From 4e9d044ec182fc13985e39f3035b9858caa96a5f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Feb 2023 10:54:35 +0100 Subject: [PATCH 001/210] Update dependency react-hook-form to ^7.43.1 (main) (#151145) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [react-hook-form](https://www.react-hook-form.com) ([source](https://togithub.com/react-hook-form/react-hook-form)) | [`^7.43.0` -> `^7.43.1`](https://renovatebot.com/diffs/npm/react-hook-form/7.43.0/7.43.1) | [![age](https://badges.renovateapi.com/packages/npm/react-hook-form/7.43.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/react-hook-form/7.43.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/react-hook-form/7.43.1/compatibility-slim/7.43.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/react-hook-form/7.43.1/confidence-slim/7.43.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
react-hook-form/react-hook-form ### [`v7.43.1`](https://togithub.com/react-hook-form/react-hook-form/releases/tag/v7.43.1): Version 7.43.1 [Compare Source](https://togithub.com/react-hook-form/react-hook-form/compare/v7.43.0...v7.43.1) 🐞 fix [#​9871](https://togithub.com/react-hook-form/react-hook-form/issues/9871) issue with error type ([#​9873](https://togithub.com/react-hook-form/react-hook-form/issues/9873)) 🐞 fix [#​9842](https://togithub.com/react-hook-form/react-hook-form/issues/9842) `clearErrors` method does not support global error ([#​9843](https://togithub.com/react-hook-form/react-hook-form/issues/9843))
--- ### 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 [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/elastic/kibana). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4349bb747869e..cb0a7b87b2b1b 100644 --- a/package.json +++ b/package.json @@ -862,7 +862,7 @@ "react-fast-compare": "^2.0.4", "react-focus-on": "^3.7.0", "react-grid-layout": "^1.3.4", - "react-hook-form": "^7.43.0", + "react-hook-form": "^7.43.1", "react-intl": "^2.8.0", "react-is": "^17.0.2", "react-markdown": "^6.0.3", diff --git a/yarn.lock b/yarn.lock index 9dc6aaf06c07a..51a9a2144b6e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24088,10 +24088,10 @@ react-grid-layout@^1.3.4: react-draggable "^4.0.0" react-resizable "^3.0.4" -react-hook-form@^7.43.0: - version "7.43.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.43.0.tgz#d0c19b5c4ec561fbf8d652869ccb513c11c772e7" - integrity sha512-/rVEz7T0gLdSFwPqutJ1kn2e0sQNyb9ci/hmwEYr2YG0KF/LSuRLvNrf9QWJM+gj88CjDpDW5Bh/1AD7B2+z9Q== +react-hook-form@^7.43.1: + version "7.43.1" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.43.1.tgz#0d0d7822f3f7fc05ffc41d5f012b49b90fcfa0f0" + integrity sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg== react-input-autosize@^3.0.0: version "3.0.0" From b7c0d10d74f38e44397d23a7043d5b32214b8b53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Feb 2023 11:23:14 +0100 Subject: [PATCH 002/210] Update cypress (main) (#150967) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [cypress](https://togithub.com/cypress-io/cypress) | [`^12.3.0` -> `^12.5.1`](https://renovatebot.com/diffs/npm/cypress/12.3.0/12.5.1) | [![age](https://badges.renovateapi.com/packages/npm/cypress/12.5.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/cypress/12.5.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/cypress/12.5.1/compatibility-slim/12.3.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/cypress/12.5.1/confidence-slim/12.3.0)](https://docs.renovatebot.com/merge-confidence/) | | [cypress-axe](https://togithub.com/component-driven/cypress-axe) | [`^1.2.0` -> `^1.3.0`](https://renovatebot.com/diffs/npm/cypress-axe/1.2.0/1.3.0) | [![age](https://badges.renovateapi.com/packages/npm/cypress-axe/1.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/cypress-axe/1.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/cypress-axe/1.3.0/compatibility-slim/1.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/cypress-axe/1.3.0/confidence-slim/1.2.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
cypress-io/cypress ### [`v12.5.1`](https://togithub.com/cypress-io/cypress/releases/tag/v12.5.1) [Compare Source](https://togithub.com/cypress-io/cypress/compare/v12.5.0...v12.5.1) Changelog: https://docs.cypress.io/guides/references/changelog#​12-5-1 ### [`v12.5.0`](https://togithub.com/cypress-io/cypress/releases/tag/v12.5.0) [Compare Source](https://togithub.com/cypress-io/cypress/compare/v12.4.1...v12.5.0) Changelog: https://docs.cypress.io/guides/references/changelog#​12-5-0 ### [`v12.4.1`](https://togithub.com/cypress-io/cypress/releases/tag/v12.4.1) [Compare Source](https://togithub.com/cypress-io/cypress/compare/v12.4.0...v12.4.1) Changelog: https://docs.cypress.io/guides/references/changelog#​12-4-1 ### [`v12.4.0`](https://togithub.com/cypress-io/cypress/releases/tag/v12.4.0) [Compare Source](https://togithub.com/cypress-io/cypress/compare/v12.3.0...v12.4.0) Changelog: https://docs.cypress.io/guides/references/changelog#​12-4-0
component-driven/cypress-axe ### [`v1.3.0`](https://togithub.com/component-driven/cypress-axe/releases/tag/v1.3.0) [Compare Source](https://togithub.com/component-driven/cypress-axe/compare/v1.2.0...v1.3.0) ##### Features - Allow to use custom axe-core location ([#​150](https://togithub.com/component-driven/cypress-axe/issues/150)) ([91c72d2](https://togithub.com/component-driven/cypress-axe/commit/91c72d2573cedec135789bc0b7cef80047f5abf9)), closes [#​146](https://togithub.com/component-driven/cypress-axe/issues/146) [#​134](https://togithub.com/component-driven/cypress-axe/issues/134) [#​84](https://togithub.com/component-driven/cypress-axe/issues/84) [#​75](https://togithub.com/component-driven/cypress-axe/issues/75)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/elastic/kibana). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Patryk Kopyciński --- package.json | 4 ++-- yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index cb0a7b87b2b1b..bbd67fbd89633 100644 --- a/package.json +++ b/package.json @@ -1321,8 +1321,8 @@ "cssnano": "^5.1.12", "cssnano-preset-default": "^5.2.12", "csstype": "^3.0.2", - "cypress": "^12.3.0", - "cypress-axe": "^1.2.0", + "cypress": "^12.5.1", + "cypress-axe": "^1.3.0", "cypress-file-upload": "^5.0.8", "cypress-multi-reporters": "^1.6.2", "cypress-pipe": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index 51a9a2144b6e9..99e9088e676e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12912,10 +12912,10 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= -cypress-axe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.2.0.tgz#224936a3346055f6c22636e645746cc903aaa947" - integrity sha512-mK7rxc8+e0IM519efgkzVBQRYLapy55TOVNbWZsbX3495xFzf8NnkMddUaHAGgAnF+kcyJU7zNPu3lTiOD58WQ== +cypress-axe@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.3.0.tgz#255ef8ef8e88747f2a72ceb7f7c60e8185b7852b" + integrity sha512-b2zAva1+uRwGA7r/JzP7C/64YHu9Fa8RsHRIrapUDzJeGLEQImz86FbwRW/lBamrEt7YHzGRwuJizXKTyQBsfQ== cypress-file-upload@^5.0.8: version "5.0.8" @@ -12954,10 +12954,10 @@ cypress-recurse@^1.27.0: dependencies: humanize-duration "^3.27.3" -cypress@^12.3.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.3.0.tgz#ae3fb0540aef4b5eab1ef2bcd0760caf2992b8bf" - integrity sha512-ZQNebibi6NBt51TRxRMYKeFvIiQZ01t50HSy7z/JMgRVqBUey3cdjog5MYEbzG6Ktti5ckDt1tfcC47lmFwXkw== +cypress@^12.5.1: + version "12.5.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.5.1.tgz#effdcccdd5a6187d61d497300903d4f3b5b21b6e" + integrity sha512-ZmCmJ3lsyeOpBfh410m5+AO2CO1AxAzFBt7k6/uVbNcrNZje1vdiwYTpj2ksPKg9mjr9lR6V8tmlDNMvr4H/YQ== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" From 560c3b96f81ce2167a3d104bf97e4fe5a1e7fb76 Mon Sep 17 00:00:00 2001 From: Francesco Gualazzi Date: Wed, 15 Feb 2023 11:50:29 +0100 Subject: [PATCH 003/210] profiling: fix setup page and instructions (#150885) Resolves https://github.com/elastic/prodfiler/issues/2961. We update the setup information text instructions to add data for Universal Profiling Beta. Signed-off-by: inge4pres Co-authored-by: boriskirov Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../public/components/check_setup.tsx | 70 +++++++++++++++++-- .../public/components/no_data_page.tsx | 11 +-- .../profiling_header_action_menu.tsx | 2 +- 3 files changed, 71 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/profiling/public/components/check_setup.tsx b/x-pack/plugins/profiling/public/components/check_setup.tsx index 566ff7382aacf..aff650446303f 100644 --- a/x-pack/plugins/profiling/public/components/check_setup.tsx +++ b/x-pack/plugins/profiling/public/components/check_setup.tsx @@ -4,7 +4,16 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, EuiText } from '@elastic/eui'; +import { + EuiButton, + EuiCallOut, + EuiFlexGrid, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiLoadingSpinner, + EuiText, +} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useState } from 'react'; import { AsyncStatus, useAsync } from '../hooks/use_async'; @@ -49,6 +58,13 @@ export function CheckSetup({ children }: { children: React.ReactElement }) { + + + {i18n.translate('xpack.profiling.noDataConfig.loading.loaderText', { + defaultMessage: 'Loading data sources', + })} + + ); @@ -81,12 +97,54 @@ export function CheckSetup({ children }: { children: React.ReactElement }) { action: { elasticAgent: { description: ( - - {i18n.translate('xpack.profiling.noDataConfig.action.title', { - defaultMessage: `Universal Profiling provides fleet-wide, whole-system, continuous profiling with zero instrumentation. + + + {i18n.translate('xpack.profiling.noDataConfig.action.title', { + defaultMessage: `Universal Profiling provides fleet-wide, whole-system, continuous profiling with zero instrumentation. Understand what lines of code are consuming compute resources, at all times, and across your entire infrastructure.`, - })} - + })} + + + +
    +
  • + {i18n.translate('xpack.profiling.noDataConfig.action.dataRetention', { + defaultMessage: `Normal data storage costs apply for profiling data stored in Elasticsearch. + To control data retention. `, + })} + + {i18n.translate('xpack.profiling.noDataConfig.readMore.linkLabel', { + defaultMessage: 'Read more', + })} + +
  • +
  • + {i18n.translate('xpack.profiling.noDataConfig.action.legalBetaTerms', { + defaultMessage: `By using this feature, you acknowledge that you have read and agree to `, + })} + + {i18n.translate('xpack.profiling.noDataConfig.betaTerms.linkLabel', { + defaultMessage: 'Elastic Beta Release Terms', + })} + +
  • +
+
+ + ), onClick: (event: React.MouseEvent) => { event.preventDefault(); diff --git a/x-pack/plugins/profiling/public/components/no_data_page.tsx b/x-pack/plugins/profiling/public/components/no_data_page.tsx index d045b4146dd9c..52e5e35abe9d3 100644 --- a/x-pack/plugins/profiling/public/components/no_data_page.tsx +++ b/x-pack/plugins/profiling/public/components/no_data_page.tsx @@ -124,7 +124,8 @@ docker.elastic.co/observability/profiling-agent:stable /root/pf-host-agent \\ }), content: ( - wget -O- https://releases.prodfiler.com/stable/pf-host-agent_linux_amd64.tgz | tar xz + wget -O pf-host-agent.tgz "https://ela.st/pf-host-agent-amd64" && tar xzf + pf-host-agent.tgz ), }, @@ -162,8 +163,8 @@ docker.elastic.co/observability/profiling-agent:stable /root/pf-host-agent \\ 'Open the URL below and download the right DEB package for your CPU architecture:', }), content: ( - - https://releases.prodfiler.com/stable/index.html + + https://ela.st/pf-host-agent-linux ), }, @@ -212,8 +213,8 @@ docker.elastic.co/observability/profiling-agent:stable /root/pf-host-agent \\ 'Open the URL below and download the right RPM package for your CPU architecture:', }), content: ( - - https://releases.prodfiler.com/stable/index.html + + https://ela.st/pf-host-agent-linux ), }, diff --git a/x-pack/plugins/profiling/public/components/profiling_header_action_menu.tsx b/x-pack/plugins/profiling/public/components/profiling_header_action_menu.tsx index 86d2ce4b28b1a..21aba30123c55 100644 --- a/x-pack/plugins/profiling/public/components/profiling_header_action_menu.tsx +++ b/x-pack/plugins/profiling/public/components/profiling_header_action_menu.tsx @@ -16,7 +16,7 @@ export function ProfilingHeaderActionMenu() { - + {i18n.translate('xpack.profiling.headerActionMenu.addData', { From 45bbed223c2bdd7724e74c6d2b656c058b5c3482 Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Wed, 15 Feb 2023 12:09:15 +0100 Subject: [PATCH 004/210] [Lens] Fix absolute time shift validation when using relative time range in dashboard (#150984) ## Summary Fix #150313 as noted in https://github.com/elastic/kibana/pull/150418#issuecomment-1424925427 I could not find any particular way to test it visually other than with a unit test. ### 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 - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Stratoula Kalafateli --- .../common/search/aggs/utils/parse_time_shift.test.ts | 9 +++++++++ .../data/common/search/aggs/utils/parse_time_shift.ts | 8 +++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/plugins/data/common/search/aggs/utils/parse_time_shift.test.ts b/src/plugins/data/common/search/aggs/utils/parse_time_shift.test.ts index 03c1b901580c8..f8df9ded94ec0 100644 --- a/src/plugins/data/common/search/aggs/utils/parse_time_shift.test.ts +++ b/src/plugins/data/common/search/aggs/utils/parse_time_shift.test.ts @@ -119,6 +119,15 @@ describe('parse time shifts', () => { } } }); + + it('should validate against absolute time range values', () => { + expect( + validateAbsoluteTimeShift(`startAt(${futureDateString})`, { + from: 'now-1y', + to: 'now', + }) + ).toBe(REASON_IDS.shiftAfterTimeRange); + }); }); describe('parseAbsoluteTimeShift', () => { diff --git a/src/plugins/data/common/search/aggs/utils/parse_time_shift.ts b/src/plugins/data/common/search/aggs/utils/parse_time_shift.ts index eb0241865eb3e..4b0173e75c192 100644 --- a/src/plugins/data/common/search/aggs/utils/parse_time_shift.ts +++ b/src/plugins/data/common/search/aggs/utils/parse_time_shift.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ import moment from 'moment'; +import { getAbsoluteTimeRange } from '../../../query/timefilter/get_time'; import { TimeRange } from '../../../types'; const ALLOWED_UNITS = ['s', 'm', 'h', 'd', 'w', 'M', 'y'] as const; @@ -135,10 +136,11 @@ export function validateAbsoluteTimeShift( return REASON_IDS.invalidDate; } if (timeRange) { - const duration = moment(timeRange.to).diff(moment(timeRange.from)); + const absTimeRange = getAbsoluteTimeRange(timeRange); + const duration = moment(absTimeRange.to).diff(moment(absTimeRange.from)); if ( - (anchor === START_AT_ANCHOR && tsMoment.isAfter(timeRange.from)) || - tsMoment.subtract(duration).isAfter(timeRange.from) + (anchor === START_AT_ANCHOR && tsMoment.isAfter(absTimeRange.from)) || + tsMoment.subtract(duration).isAfter(absTimeRange.from) ) return REASON_IDS.shiftAfterTimeRange; } From f443109eeae6af9873e39f16b53825941690c3be Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Wed, 15 Feb 2023 12:27:33 +0100 Subject: [PATCH 005/210] [Security Solution] Cell Actions and Security triggers refactor (#150213) ## Summary issue https://github.com/elastic/kibana/issues/145657 General actions refactor to complete the CellActions package architecture. These changes won't cause any noticeable change in the application behavior. They include: *kbn-cell-actions* - Generic actions (filterIn/Out & copyToClipboard) migrated to the package. - `factory` implemented to export actions from the package. - `CellAction` types generics. *SecuritySolution* - `SecurityCellAction` type encapsulated in new _actions/types.ts_ file. - Actions changes to use new generic actions and also to be exported using the package `factory`. - Actions registration simplified to more declarative. - Triggers and types moved to owned constants.ts enums. - FilterIn/Out default actions unified timeline in a single implementation using `metadata.scopeId`. - Timeline Trigger removed, no longer needed. - `SecurityCellActions` component to get the proper metadata typings and code suggestions inside Security. - Security CellActions metadata TSDoc expanded ### Factory The action `factory` is necessary because we need a different action `id`s for every action in the _uiActions_ registry, meaning that if different triggers/solutions need different `order`, `type`, `isCompatible` function, or any customization, they will need to register an action with a different id, before attaching it. The `CellActionFactory` implementation simplifies this workflow by allowing action creation (only `id` param is required but any other action property can be assigned) and also allows to `combine` factories, returning a new factory with some properties overridden. This is useful for extending generic actions into more specific implementations. ### SecurityCellActions They are Security typed generic `CellActions` components, just for convenience when using CellActions, they show the proper TSDoc information about `metadata` contents, `triggerId`, and so on. It was not possible when using the package exports directly. ![scopeId TSDoc](https://user-images.githubusercontent.com/17747913/218807646-c4166d58-e1f4-41c6-ad2d-3ee801cf037c.png) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/__stories__/cell_actions.stories.tsx | 3 +- .../copy_to_clipboard.test.ts | 20 +-- .../copy_to_clipboard/copy_to_clipboard.ts | 55 +++++++ .../src/actions/copy_to_clipboard/index.ts | 9 ++ .../src/actions/factory.test.ts | 146 +++++++++++++++++ .../kbn-cell-actions/src/actions/factory.ts | 76 +++++++++ .../src/actions/filter/create_filter.test.ts | 114 ++++++++++++++ .../src/actions/filter/create_filter.ts | 57 +++++++ .../src/actions/filter/filter_in.test.ts | 122 +++++++++++++++ .../src/actions/filter/filter_in.ts | 49 ++++++ .../src/actions/filter/filter_out.test.ts | 116 ++++++++++++++ .../src/actions/filter/filter_out.ts | 53 +++++++ .../src/actions/filter/index.ts | 10 ++ .../src/components/cell_actions.test.tsx | 2 +- .../src/components/cell_actions.tsx | 9 +- .../components/hover_actions_popover.test.tsx | 12 +- .../src/components/hover_actions_popover.tsx | 6 +- .../src/components/inline_actions.test.tsx | 4 +- .../src/components/inline_actions.tsx | 6 +- packages/kbn-cell-actions/src/constants.ts | 15 ++ packages/kbn-cell-actions/src/hooks/index.ts | 1 + .../use_data_grid_column_cell_actions.tsx | 16 +- .../src/hooks/use_load_actions.test.ts | 10 +- .../src/hooks/use_load_actions.ts | 16 +- packages/kbn-cell-actions/src/index.ts | 30 +++- .../kbn-cell-actions/src/mocks/helpers.ts | 1 + packages/kbn-cell-actions/src/types.ts | 47 ++++-- packages/kbn-cell-actions/tsconfig.json | 3 + .../security_solution/common/constants.ts | 4 - .../cypress/screens/alerts.ts | 10 +- .../cypress/screens/network/flows.ts | 11 +- .../cypress/screens/timeline.ts | 9 +- .../add_to_timeline.test.ts | 32 ++-- .../cell_action/add_to_timeline.ts | 71 +++++++++ .../default/add_to_timeline.tsx | 77 --------- .../public/actions/add_to_timeline/index.ts | 4 +- .../lens/add_to_timeline.test.ts | 6 +- .../add_to_timeline/lens/add_to_timeline.ts | 2 +- .../public/actions/constants.ts | 18 +++ .../cell_action/copy_to_clipboard.ts | 27 ++++ .../default/copy_to_clipboard.tsx | 47 ------ .../public/actions/copy_to_clipboard/index.ts | 4 +- .../lens/copy_to_clipboard.test.ts | 6 +- .../lens/copy_to_clipboard.ts | 2 +- .../filter/cell_action/filter_in.test.ts | 134 ++++++++++++++++ .../actions/filter/cell_action/filter_in.ts | 57 +++++++ .../filter/cell_action/filter_out.test.ts | 104 ++++++++++++ .../actions/filter/cell_action/filter_out.ts | 57 +++++++ .../actions/filter/default/filter_in.test.ts | 74 --------- .../actions/filter/default/filter_in.tsx | 42 ----- .../actions/filter/default/filter_out.test.ts | 74 --------- .../actions/filter/default/filter_out.tsx | 42 ----- .../public/actions/filter/helpers.ts | 50 ------ .../public/actions/filter/index.ts | 7 +- .../actions/filter/timeline/filter_in.test.ts | 83 ---------- .../actions/filter/timeline/filter_in.tsx | 60 ------- .../filter/timeline/filter_out.test.ts | 83 ---------- .../actions/filter/timeline/filter_out.tsx | 60 ------- .../public/actions/register.ts | 148 ++++++------------ .../show_top_n.test.tsx | 31 +--- .../{default => cell_action}/show_top_n.tsx | 61 +++----- .../public/actions/show_top_n/index.ts | 2 +- .../show_top_n/show_top_n_component.test.tsx | 1 + .../show_top_n/show_top_n_component.tsx | 4 +- .../toggle_column.test.ts | 15 +- .../cell_action/toggle_column.ts | 84 ++++++++++ .../toggle_column/default/toggle_column.ts | 104 ------------ .../public/actions/toggle_column/index.tsx | 2 +- .../security_solution/public/actions/types.ts | 45 ++++++ .../security_solution/public/actions/utils.ts | 3 +- .../common/components/cell_actions/index.ts | 36 +++++ .../components/data_table/index.test.tsx | 4 +- .../common/components/data_table/index.tsx | 16 +- .../components/event_details/columns.tsx | 7 +- .../cti_details/enrichment_summary.tsx | 11 +- .../event_details/overview/overview_card.tsx | 11 +- .../table/summary_value_cell.tsx | 11 +- .../ml/__snapshots__/entity.test.tsx.snap | 2 +- .../public/common/components/ml/entity.tsx | 9 +- .../score/__snapshots__/score.test.tsx.snap | 4 +- .../common/components/ml/score/score.tsx | 13 +- .../common/components/tables/helpers.tsx | 9 +- .../alerts_by_type_panel/columns.tsx | 13 +- .../host_risk_score_table/columns.tsx | 13 +- .../hosts/components/hosts_table/columns.tsx | 25 +-- .../components/network_dns_table/columns.tsx | 14 +- .../network_top_countries_table/columns.tsx | 13 +- .../network_top_n_flow_table/columns.tsx | 19 ++- .../explore/network/pages/details/index.tsx | 13 +- .../user_risk_score_table/columns.tsx | 13 +- .../entity_analytics/risk_score/columns.tsx | 27 ++-- .../field_renderers/field_renderers.tsx | 21 +-- 92 files changed, 1863 insertions(+), 1206 deletions(-) rename {x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default => packages/kbn-cell-actions/src/actions/copy_to_clipboard}/copy_to_clipboard.test.ts (63%) create mode 100644 packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.ts create mode 100644 packages/kbn-cell-actions/src/actions/copy_to_clipboard/index.ts create mode 100644 packages/kbn-cell-actions/src/actions/factory.test.ts create mode 100644 packages/kbn-cell-actions/src/actions/factory.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/create_filter.test.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/create_filter.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/filter_in.test.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/filter_in.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/filter_out.test.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/filter_out.ts create mode 100644 packages/kbn-cell-actions/src/actions/filter/index.ts create mode 100644 packages/kbn-cell-actions/src/constants.ts rename x-pack/plugins/security_solution/public/actions/add_to_timeline/{default => cell_action}/add_to_timeline.test.ts (80%) create mode 100644 x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.tsx create mode 100644 x-pack/plugins/security_solution/public/actions/constants.ts create mode 100644 x-pack/plugins/security_solution/public/actions/copy_to_clipboard/cell_action/copy_to_clipboard.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.tsx create mode 100644 x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts create mode 100644 x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts create mode 100644 x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts create mode 100644 x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/default/filter_in.test.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/default/filter_out.test.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/helpers.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.test.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.tsx delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.test.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.tsx rename x-pack/plugins/security_solution/public/actions/show_top_n/{default => cell_action}/show_top_n.test.tsx (77%) rename x-pack/plugins/security_solution/public/actions/show_top_n/{default => cell_action}/show_top_n.tsx (73%) rename x-pack/plugins/security_solution/public/actions/toggle_column/{default => cell_action}/toggle_column.test.ts (84%) create mode 100644 x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.ts delete mode 100644 x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts create mode 100644 x-pack/plugins/security_solution/public/actions/types.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/cell_actions/index.ts diff --git a/packages/kbn-cell-actions/src/__stories__/cell_actions.stories.tsx b/packages/kbn-cell-actions/src/__stories__/cell_actions.stories.tsx index 4c0f362d3ddf1..657dcc93416b8 100644 --- a/packages/kbn-cell-actions/src/__stories__/cell_actions.stories.tsx +++ b/packages/kbn-cell-actions/src/__stories__/cell_actions.stories.tsx @@ -11,7 +11,8 @@ import { ComponentStory } from '@storybook/react'; import { CellActionsProvider } from '../context/cell_actions_context'; import { makeAction } from '../mocks/helpers'; import { CellActions } from '../components/cell_actions'; -import { CellActionsMode, type CellActionsProps } from '../types'; +import { CellActionsMode } from '../constants'; +import type { CellActionsProps } from '../types'; const TRIGGER_ID = 'testTriggerId'; diff --git a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.test.ts b/packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.test.ts similarity index 63% rename from x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.test.ts rename to packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.test.ts index 6c17b4019f98b..395fbd13cfadf 100644 --- a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.test.ts +++ b/packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.test.ts @@ -1,23 +1,25 @@ /* * Copyright 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. + * 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 { KibanaServices } from '../../../common/lib/kibana'; -import { createCopyToClipboardAction } from './copy_to_clipboard'; -import type { CellActionExecutionContext } from '@kbn/cell-actions'; +import { createCopyToClipboardActionFactory } from './copy_to_clipboard'; +import type { CellActionExecutionContext } from '../../types'; +import type { NotificationsStart } from '@kbn/core/public'; -jest.mock('../../../common/lib/kibana'); const mockSuccessToast = jest.fn(); -KibanaServices.get().notifications.toasts.addSuccess = mockSuccessToast; const mockCopy = jest.fn((text: string) => true); jest.mock('copy-to-clipboard', () => (text: string) => mockCopy(text)); -describe('Default createCopyToClipboardAction', () => { - const copyToClipboardAction = createCopyToClipboardAction({ order: 1 }); +describe('Default createCopyToClipboardActionFactory', () => { + const copyToClipboardActionFactory = createCopyToClipboardActionFactory({ + notifications: { toasts: { addSuccess: mockSuccessToast } } as unknown as NotificationsStart, + }); + const copyToClipboardAction = copyToClipboardActionFactory({ id: 'testAction' }); const context = { field: { name: 'user.name', value: 'the value', type: 'text' }, } as CellActionExecutionContext; diff --git a/packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.ts b/packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.ts new file mode 100644 index 0000000000000..9d4860da1c77c --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.ts @@ -0,0 +1,55 @@ +/* + * Copyright 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 copy from 'copy-to-clipboard'; +import { i18n } from '@kbn/i18n'; +import type { NotificationsStart } from '@kbn/core/public'; +import { COPY_CELL_ACTION_TYPE } from '../../constants'; +import { createCellActionFactory } from '../factory'; + +const ICON = 'copyClipboard'; +const COPY_TO_CLIPBOARD = i18n.translate('cellActions.actions.copyToClipboard.displayName', { + defaultMessage: 'Copy to Clipboard', +}); +const COPY_TO_CLIPBOARD_SUCCESS = i18n.translate( + 'cellActions.actions.copyToClipboard.successMessage', + { + defaultMessage: 'Copied to the clipboard', + } +); + +export const createCopyToClipboardActionFactory = createCellActionFactory( + ({ notifications }: { notifications: NotificationsStart }) => ({ + type: COPY_CELL_ACTION_TYPE, + getIconType: () => ICON, + getDisplayName: () => COPY_TO_CLIPBOARD, + getDisplayNameTooltip: () => COPY_TO_CLIPBOARD, + isCompatible: async ({ field }) => field.name != null, + execute: async ({ field }) => { + let textValue: undefined | string; + if (field.value != null) { + textValue = Array.isArray(field.value) + ? field.value.map((value) => `"${value}"`).join(', ') + : `"${field.value}"`; + } + const text = textValue ? `${field.name}: ${textValue}` : field.name; + const isSuccess = copy(text, { debug: true }); + + if (isSuccess) { + notifications.toasts.addSuccess( + { + title: COPY_TO_CLIPBOARD_SUCCESS, + }, + { + toastLifeTimeMs: 800, + } + ); + } + }, + }) +); diff --git a/packages/kbn-cell-actions/src/actions/copy_to_clipboard/index.ts b/packages/kbn-cell-actions/src/actions/copy_to_clipboard/index.ts new file mode 100644 index 0000000000000..a827edbfcad59 --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/copy_to_clipboard/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright 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 { createCopyToClipboardActionFactory } from './copy_to_clipboard'; diff --git a/packages/kbn-cell-actions/src/actions/factory.test.ts b/packages/kbn-cell-actions/src/actions/factory.test.ts new file mode 100644 index 0000000000000..978f2a342dff2 --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/factory.test.ts @@ -0,0 +1,146 @@ +/* + * Copyright 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 { makeActionContext } from '../mocks/helpers'; +import { createCellActionFactory } from './factory'; + +const mockContext = makeActionContext(); + +const mockActionIsCompatible = jest.fn(async () => true); +const mockActionExecute = jest.fn(async () => {}); + +const testAction = { + id: 'genericTestId', + type: 'genericCellActionType', + getIconType: () => 'test-icon', + getDisplayName: () => 'test name', + isCompatible: mockActionIsCompatible, + execute: mockActionExecute, +}; +const createTestAction = (type: string) => ({ + ...testAction, + type, +}); + +describe('createCellActionFactory', () => { + const id = 'testId'; + const type = 'testActionType'; + + const createActionFactory = createCellActionFactory(createTestAction); + const actionFactory = createActionFactory(type); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should create action factory executes the action creation', () => { + expect(actionFactory({ id: 'test' }).type).toBe(type); + }); + + it('should create action with id only', () => { + const action = actionFactory({ id }); + expect(action.id).toEqual(id); + expect(action.order).toBeUndefined(); + expect(action.getIconType).toBe(testAction.getIconType); + expect(action.getDisplayName).toBe(testAction.getDisplayName); + expect(action.isCompatible).toBe(testAction.isCompatible); + expect(action.execute).toBe(testAction.execute); + }); + + it('should create action with order', () => { + const order = 1234; + const action = actionFactory({ id, order }); + expect(action.order).toEqual(order); + }); + + it('should create action with custom execute and isCompatible', async () => { + const customExecute = jest.fn(); + const customIsCompatible = jest.fn(); + const action = actionFactory({ + id, + execute: customExecute, + isCompatible: customIsCompatible, + }); + + await action.isCompatible(mockContext); + expect(customIsCompatible).toHaveBeenCalledWith(mockContext); + expect(mockActionIsCompatible).not.toHaveBeenCalled(); + + await action.execute(mockContext); + expect(customExecute).toHaveBeenCalledWith(mockContext); + expect(mockActionExecute).not.toHaveBeenCalled(); + }); + + it('should create action with custom execute', async () => { + const customExecute = jest.fn(); + const action = actionFactory({ id, execute: customExecute }); + + await action.isCompatible(mockContext); + expect(mockActionIsCompatible).toHaveBeenCalledWith(mockContext); + + await action.execute(mockContext); + expect(customExecute).toHaveBeenCalledWith(mockContext); + expect(mockActionExecute).not.toHaveBeenCalled(); + }); + + it('should create action with custom isCompatible', async () => { + const customIsCompatible = jest.fn(async () => true); + const action = actionFactory({ id, isCompatible: customIsCompatible }); + + await action.isCompatible(mockContext); + expect(mockActionIsCompatible).toHaveBeenCalledWith(mockContext); + expect(customIsCompatible).toHaveBeenCalledWith(mockContext); + + await action.execute(mockContext); + expect(mockActionExecute).toHaveBeenCalledWith(mockContext); + }); + + describe('combine', () => { + it('should combine factory with new icon', () => { + const newType = 'action-type-2'; + const combinedFactory = actionFactory.combine({ + type: newType, + }); + const action = combinedFactory({ id }); + expect(action.type).toEqual(newType); + }); + + it('should combine factory with isCompatible function', async () => { + const combinedIsCompatible = jest.fn(async () => true); + const customIsCompatible = jest.fn(async () => true); + const combinedFactory = actionFactory.combine({ isCompatible: combinedIsCompatible }); + const action = combinedFactory({ id, isCompatible: customIsCompatible }); + + await action.isCompatible(mockContext); + expect(mockActionIsCompatible).toHaveBeenCalledWith(mockContext); + expect(combinedIsCompatible).toHaveBeenCalledWith(mockContext); + expect(customIsCompatible).toHaveBeenCalledWith(mockContext); + + await action.execute(mockContext); + expect(mockActionExecute).toHaveBeenCalledWith(mockContext); + }); + + it('should combine factory with custom execute and isCompatible', async () => { + const combinedExecute = jest.fn(); + const combinedIsCompatible = jest.fn(); + const combinedFactory = actionFactory.combine({ + execute: combinedExecute, + isCompatible: combinedIsCompatible, + }); + const action = combinedFactory({ id }); + + await action.isCompatible(mockContext); + expect(combinedIsCompatible).toHaveBeenCalledWith(mockContext); + expect(mockActionIsCompatible).not.toHaveBeenCalled(); + + await action.execute(mockContext); + expect(combinedExecute).toHaveBeenCalledWith(mockContext); + expect(mockActionExecute).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/kbn-cell-actions/src/actions/factory.ts b/packages/kbn-cell-actions/src/actions/factory.ts new file mode 100644 index 0000000000000..d2f2da416425a --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/factory.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 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 { CellAction, CellActionExtend, CellActionFactory, CellActionTemplate } from '../types'; + +export const createCellActionFactory = ( + actionCreator: (params: P) => CellActionTemplate +) => { + return (params: P): CellActionFactory => { + const action = actionCreator(params); + return createFactory(action); + }; +}; + +const createFactory = ( + actionTemplate: CellActionTemplate +): CellActionFactory => { + const factory = (extend: CellActionExtend): A => + extendAction(actionTemplate, extend); + + factory.combine = ( + partialActionTemplate: Partial> + ): CellActionFactory => { + const combinedActions = extendActionTemplate(actionTemplate, partialActionTemplate); + return createFactory(combinedActions); + }; + + return factory; +}; + +// extends the template to create another template +const extendActionTemplate = ( + action: CellActionTemplate, + extend: Partial> +): CellActionTemplate => _extendAction>(action, extend); + +// extends the template to create a full action (with id) +const extendAction = ( + action: CellActionTemplate, + extend: CellActionExtend +): C => _extendAction(action, extend); + +const _extendAction = >( + actionTemplate: CellActionTemplate, + extend: Partial +): C => { + const { isCompatible: extendedIsCompatible, execute: extendedExecute, ...rest } = extend; + + let isCompatible = actionTemplate.isCompatible; + if (extendedIsCompatible) { + if (extendedExecute) { + isCompatible = extendedIsCompatible; + } else { + isCompatible = async (context) => { + // call extended and default `isCompatible` to make sure the default `execute` will run properly + return ( + (await actionTemplate.isCompatible(context)) && (await extendedIsCompatible(context)) + ); + }; + } + } + + const execute = extendedExecute ?? actionTemplate.execute; + + return { + ...(actionTemplate as C), + isCompatible, + execute, + ...rest, + }; +}; diff --git a/packages/kbn-cell-actions/src/actions/filter/create_filter.test.ts b/packages/kbn-cell-actions/src/actions/filter/create_filter.test.ts new file mode 100644 index 0000000000000..12ae2fa16a2dd --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/create_filter.test.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 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 { createFilter } from './create_filter'; + +const field = 'field.name'; +const value = 'the-value'; + +describe('createFilter', () => { + it.each([ + { caseName: 'string', caseValue: value }, + { caseName: 'array', caseValue: [value] }, + ])('should return filter with $caseName value', ({ caseValue }) => { + expect(createFilter({ key: field, value: caseValue, negate: false })).toEqual({ + meta: { + alias: null, + disabled: false, + type: 'phrase', + key: field, + negate: false, + value, + params: { + query: value, + }, + }, + query: { + match: { + [field]: { + query: value, + type: 'phrase', + }, + }, + }, + }); + }); + + it.each([ + { caseName: 'string', caseValue: value }, + { caseName: 'array', caseValue: [value] }, + ])('should return negate filter with $caseName value', ({ caseValue }) => { + expect(createFilter({ key: field, value: caseValue, negate: true })).toEqual({ + meta: { + alias: null, + disabled: false, + type: 'phrase', + key: field, + negate: true, + value, + params: { + query: value, + }, + }, + query: { + match: { + [field]: { + query: value, + type: 'phrase', + }, + }, + }, + }); + }); + + it.each([ + { caseName: 'null', caseValue: null }, + { caseName: 'undefined', caseValue: undefined }, + { caseName: 'empty string', caseValue: '' }, + { caseName: 'empty array', caseValue: [] }, + ])('should return exist filter with $caseName value', ({ caseValue }) => { + expect(createFilter({ key: field, value: caseValue, negate: false })).toEqual({ + query: { + exists: { + field, + }, + }, + meta: { + alias: null, + disabled: false, + key: field, + negate: false, + type: 'exists', + value: 'exists', + }, + }); + }); + + it.each([ + { caseName: 'null', caseValue: null }, + { caseName: 'undefined', caseValue: undefined }, + { caseName: 'empty string', caseValue: '' }, + { caseName: 'empty array', caseValue: [] }, + ])('should return negate exist filter with $caseName value', ({ caseValue }) => { + expect(createFilter({ key: field, value: caseValue, negate: true })).toEqual({ + query: { + exists: { + field, + }, + }, + meta: { + alias: null, + disabled: false, + key: field, + negate: true, + type: 'exists', + value: 'exists', + }, + }); + }); +}); diff --git a/packages/kbn-cell-actions/src/actions/filter/create_filter.ts b/packages/kbn-cell-actions/src/actions/filter/create_filter.ts new file mode 100644 index 0000000000000..1dcb44e2b73e7 --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/create_filter.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 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 { Filter } from '@kbn/es-query'; + +export const isEmptyFilterValue = (value: string[] | string | null | undefined) => + value == null || value.length === 0; + +export const createFilter = ({ + key, + value, + negate, +}: { + key: string; + value: string[] | string | null | undefined; + negate: boolean; +}): Filter => { + const queryValue = !isEmptyFilterValue(value) ? (Array.isArray(value) ? value[0] : value) : null; + const meta = { alias: null, disabled: false, key, negate }; + + if (queryValue == null) { + return { + query: { + exists: { + field: key, + }, + }, + meta: { + ...meta, + type: 'exists', + value: 'exists', + }, + }; + } + return { + meta: { + ...meta, + type: 'phrase', + value: queryValue, + params: { + query: queryValue, + }, + }, + query: { + match: { + [key]: { + query: queryValue, + type: 'phrase', + }, + }, + }, + }; +}; diff --git a/packages/kbn-cell-actions/src/actions/filter/filter_in.test.ts b/packages/kbn-cell-actions/src/actions/filter/filter_in.test.ts new file mode 100644 index 0000000000000..f75447fe7458b --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/filter_in.test.ts @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { FilterManager } from '@kbn/data-plugin/public'; +import { createFilterInActionFactory } from './filter_in'; +import { makeActionContext } from '../../mocks/helpers'; + +const mockFilterManager = { addFilters: jest.fn() } as unknown as FilterManager; + +const mockCreateFilter = jest.fn((_: any) => ({})); +jest.mock('./create_filter', () => ({ + ...jest.requireActual('./create_filter'), + createFilter: (params: any) => mockCreateFilter(params), +})); + +const fieldName = 'user.name'; +const value = 'the value'; + +describe('createFilterInActionFactory', () => { + const filterInActionFactory = createFilterInActionFactory({ + filterManager: mockFilterManager, + }); + const filterInAction = filterInActionFactory({ id: 'testAction' }); + const context = makeActionContext({ + field: { name: fieldName, value, type: 'text' }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return display name', () => { + expect(filterInAction.getDisplayName(context)).toEqual('Filter In'); + }); + + it('should return icon type', () => { + expect(filterInAction.getIconType(context)).toEqual('plusInCircle'); + }); + + describe('isCompatible', () => { + it('should return true if everything is okay', async () => { + expect(await filterInAction.isCompatible(context)).toEqual(true); + }); + + it('should return false if field.name not valid', async () => { + expect( + await filterInAction.isCompatible({ + ...context, + field: { ...context.field, name: '' }, + }) + ).toEqual(false); + }); + }); + + describe('execute', () => { + it('should add the filter to filterManager', async () => { + await filterInAction.execute(context); + expect(mockFilterManager.addFilters).toHaveBeenCalled(); + }); + + it('should create filter query with value', async () => { + await filterInAction.execute(context); + expect(mockCreateFilter).toHaveBeenCalledWith({ + key: fieldName, + value, + negate: false, + }); + }); + + it('should create filter query with array value', async () => { + await filterInAction.execute({ + ...context, + field: { ...context.field, value: [value] }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ + key: fieldName, + value: [value], + negate: false, + }); + }); + + it('should create negate filter query with null value', async () => { + await filterInAction.execute({ + ...context, + field: { ...context.field, value: null }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value: null, negate: true }); + }); + + it('should create negate filter query with undefined value', async () => { + await filterInAction.execute({ + ...context, + field: { ...context.field, value: undefined }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ + key: fieldName, + value: undefined, + negate: true, + }); + }); + + it('should create negate filter query with empty string value', async () => { + await filterInAction.execute({ + ...context, + field: { ...context.field, value: '' }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value: '', negate: true }); + }); + + it('should create negate filter query with empty array value', async () => { + await filterInAction.execute({ + ...context, + field: { ...context.field, value: [] }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value: [], negate: true }); + }); + }); +}); diff --git a/packages/kbn-cell-actions/src/actions/filter/filter_in.ts b/packages/kbn-cell-actions/src/actions/filter/filter_in.ts new file mode 100644 index 0000000000000..524318d9722d1 --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/filter_in.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { i18n } from '@kbn/i18n'; +import type { FilterManager } from '@kbn/data-plugin/public'; +import { createFilter, isEmptyFilterValue } from './create_filter'; +import { FILTER_CELL_ACTION_TYPE } from '../../constants'; +import { createCellActionFactory } from '../factory'; + +const ICON = 'plusInCircle'; +const FILTER_IN = i18n.translate('cellActions.actions.filterIn', { + defaultMessage: 'Filter In', +}); + +export const createFilterInActionFactory = createCellActionFactory( + ({ filterManager }: { filterManager: FilterManager }) => ({ + type: FILTER_CELL_ACTION_TYPE, + getIconType: () => ICON, + getDisplayName: () => FILTER_IN, + getDisplayNameTooltip: () => FILTER_IN, + isCompatible: async ({ field }) => !!field.name, + execute: async ({ field }) => { + addFilterIn({ filterManager, fieldName: field.name, value: field.value }); + }, + }) +); + +export const addFilterIn = ({ + filterManager, + fieldName, + value, +}: { + filterManager: FilterManager | undefined; + fieldName: string; + value: string[] | string | null | undefined; +}) => { + if (filterManager != null) { + const filter = createFilter({ + key: fieldName, + value, + negate: isEmptyFilterValue(value), + }); + filterManager.addFilters(filter); + } +}; diff --git a/packages/kbn-cell-actions/src/actions/filter/filter_out.test.ts b/packages/kbn-cell-actions/src/actions/filter/filter_out.test.ts new file mode 100644 index 0000000000000..72564d64fc8bf --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/filter_out.test.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { FilterManager } from '@kbn/data-plugin/public'; +import { createFilterOutActionFactory } from './filter_out'; +import { makeActionContext } from '../../mocks/helpers'; + +const mockFilterManager = { addFilters: jest.fn() } as unknown as FilterManager; + +const mockCreateFilter = jest.fn((_: any) => ({})); +jest.mock('./create_filter', () => ({ + ...jest.requireActual('./create_filter'), + createFilter: (params: any) => mockCreateFilter(params), +})); + +const fieldName = 'user.name'; +const value = 'the value'; + +describe('createFilterOutAction', () => { + const filterOutActionFactory = createFilterOutActionFactory({ filterManager: mockFilterManager }); + const filterOutAction = filterOutActionFactory({ id: 'testAction' }); + const context = makeActionContext({ + field: { name: fieldName, value, type: 'text' }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return display name', () => { + expect(filterOutAction.getDisplayName(context)).toEqual('Filter Out'); + }); + + it('should return icon type', () => { + expect(filterOutAction.getIconType(context)).toEqual('minusInCircle'); + }); + + describe('isCompatible', () => { + it('should return true if everything is okay', async () => { + expect(await filterOutAction.isCompatible(context)).toEqual(true); + }); + + it('should return false if field.name not valid', async () => { + expect( + await filterOutAction.isCompatible({ + ...context, + field: { ...context.field, name: '' }, + }) + ).toEqual(false); + }); + }); + + describe('execute', () => { + it('should add the filter to filterManager', async () => { + await filterOutAction.execute(context); + expect(mockFilterManager.addFilters).toHaveBeenCalled(); + }); + + it('should create negate filter query with value', async () => { + await filterOutAction.execute(context); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value, negate: true }); + }); + + it('should create negate filter query with array value', async () => { + await filterOutAction.execute({ + ...context, + field: { ...context.field, value: [value] }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ + key: fieldName, + value: [value], + negate: true, + }); + }); + + it('should create filter query with null value', async () => { + await filterOutAction.execute({ + ...context, + field: { ...context.field, value: null }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value: null, negate: false }); + }); + + it('should create filter query with undefined value', async () => { + await filterOutAction.execute({ + ...context, + field: { ...context.field, value: undefined }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ + key: fieldName, + value: undefined, + negate: false, + }); + }); + + it('should create negate filter query with empty string value', async () => { + await filterOutAction.execute({ + ...context, + field: { ...context.field, value: '' }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value: '', negate: false }); + }); + + it('should create negate filter query with empty array value', async () => { + await filterOutAction.execute({ + ...context, + field: { ...context.field, value: [] }, + }); + expect(mockCreateFilter).toHaveBeenCalledWith({ key: fieldName, value: [], negate: false }); + }); + }); +}); diff --git a/packages/kbn-cell-actions/src/actions/filter/filter_out.ts b/packages/kbn-cell-actions/src/actions/filter/filter_out.ts new file mode 100644 index 0000000000000..bbb1b7ee70a61 --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/filter_out.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { i18n } from '@kbn/i18n'; +import type { FilterManager } from '@kbn/data-plugin/public'; +import { createFilter, isEmptyFilterValue } from './create_filter'; +import { FILTER_CELL_ACTION_TYPE } from '../../constants'; +import { createCellActionFactory } from '../factory'; + +const ICON = 'minusInCircle'; +const FILTER_OUT = i18n.translate('cellActions.actions.filterOut', { + defaultMessage: 'Filter Out', +}); + +export const createFilterOutActionFactory = createCellActionFactory( + ({ filterManager }: { filterManager: FilterManager }) => ({ + type: FILTER_CELL_ACTION_TYPE, + getIconType: () => ICON, + getDisplayName: () => FILTER_OUT, + getDisplayNameTooltip: () => FILTER_OUT, + isCompatible: async ({ field }) => !!field.name, + execute: async ({ field }) => { + addFilterOut({ + filterManager, + fieldName: field.name, + value: field.value, + }); + }, + }) +); + +export const addFilterOut = ({ + filterManager, + fieldName, + value, +}: { + filterManager: FilterManager | undefined; + fieldName: string; + value: string[] | string | null | undefined; +}) => { + if (filterManager != null) { + const filter = createFilter({ + key: fieldName, + value, + negate: !isEmptyFilterValue(value), + }); + filterManager.addFilters(filter); + } +}; diff --git a/packages/kbn-cell-actions/src/actions/filter/index.ts b/packages/kbn-cell-actions/src/actions/filter/index.ts new file mode 100644 index 0000000000000..19a32c05db6cb --- /dev/null +++ b/packages/kbn-cell-actions/src/actions/filter/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { createFilterInActionFactory, addFilterIn } from './filter_in'; +export { createFilterOutActionFactory, addFilterOut } from './filter_out'; diff --git a/packages/kbn-cell-actions/src/components/cell_actions.test.tsx b/packages/kbn-cell-actions/src/components/cell_actions.test.tsx index c7b685da3e097..ec266889fe255 100644 --- a/packages/kbn-cell-actions/src/components/cell_actions.test.tsx +++ b/packages/kbn-cell-actions/src/components/cell_actions.test.tsx @@ -9,7 +9,7 @@ import { act, render } from '@testing-library/react'; import React from 'react'; import { CellActions } from './cell_actions'; -import { CellActionsMode } from '../types'; +import { CellActionsMode } from '../constants'; import { CellActionsProvider } from '../context/cell_actions_context'; const TRIGGER_ID = 'test-trigger-id'; diff --git a/packages/kbn-cell-actions/src/components/cell_actions.tsx b/packages/kbn-cell-actions/src/components/cell_actions.tsx index 3d843a3168f79..f6d3288ed6f7d 100644 --- a/packages/kbn-cell-actions/src/components/cell_actions.tsx +++ b/packages/kbn-cell-actions/src/components/cell_actions.tsx @@ -10,7 +10,8 @@ import React, { useMemo, useRef } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { InlineActions } from './inline_actions'; import { HoverActionsPopover } from './hover_actions_popover'; -import { CellActionsMode, type CellActionsProps, type CellActionExecutionContext } from '../types'; +import { CellActionsMode } from '../constants'; +import type { CellActionsProps, CellActionExecutionContext } from '../types'; export const CellActions: React.FC = ({ field, @@ -19,7 +20,7 @@ export const CellActions: React.FC = ({ mode, showActionTooltips = true, visibleCellActions = 3, - disabledActions = [], + disabledActionTypes = [], metadata, className, }) => { @@ -43,7 +44,7 @@ export const CellActions: React.FC = ({ actionContext={actionContext} showActionTooltips={showActionTooltips} visibleCellActions={visibleCellActions} - disabledActions={disabledActions} + disabledActionTypes={disabledActionTypes} > {children} @@ -67,7 +68,7 @@ export const CellActions: React.FC = ({ actionContext={actionContext} showActionTooltips={showActionTooltips} visibleCellActions={visibleCellActions} - disabledActions={disabledActions} + disabledActionTypes={disabledActionTypes} /> diff --git a/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx b/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx index 7c513d2eb8515..b30ca63e52ec0 100644 --- a/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx +++ b/packages/kbn-cell-actions/src/components/hover_actions_popover.test.tsx @@ -26,7 +26,7 @@ describe('HoverActionsPopover', () => { const { queryByTestId } = render( { const { queryByLabelText, getByTestId } = render( { const { queryByLabelText, getByTestId } = render( { const { getByTestId } = render( { const { getByTestId, getByLabelText } = render( { const { getByTestId, queryByLabelText } = render( = ({ @@ -48,13 +48,13 @@ export const HoverActionsPopover: React.FC = ({ visibleCellActions, actionContext, showActionTooltips, - disabledActions, + disabledActionTypes, }) => { const contentRef = useRef(null); const [isExtraActionsPopoverOpen, setIsExtraActionsPopoverOpen] = useState(false); const [showHoverContent, setShowHoverContent] = useState(false); - const [{ value: actions }, loadActions] = useLoadActionsFn({ disabledActions }); + const [{ value: actions }, loadActions] = useLoadActionsFn({ disabledActionTypes }); const { visibleActions, extraActions } = useMemo( () => partitionActions(actions ?? [], visibleCellActions), diff --git a/packages/kbn-cell-actions/src/components/inline_actions.test.tsx b/packages/kbn-cell-actions/src/components/inline_actions.test.tsx index 2c3423c021e65..eaba9ec2b0d8b 100644 --- a/packages/kbn-cell-actions/src/components/inline_actions.test.tsx +++ b/packages/kbn-cell-actions/src/components/inline_actions.test.tsx @@ -21,7 +21,7 @@ describe('InlineActions', () => { const { queryByTestId } = render( { const { queryAllByRole } = render( = ({ actionContext, showActionTooltips, visibleCellActions, - disabledActions, + disabledActionTypes, }) => { - const { value: actions } = useLoadActions(actionContext, { disabledActions }); + const { value: actions } = useLoadActions(actionContext, { disabledActionTypes }); const { extraActions, visibleActions } = usePartitionActions(actions ?? [], visibleCellActions); const [isPopoverOpen, setIsPopoverOpen] = useState(false); diff --git a/packages/kbn-cell-actions/src/constants.ts b/packages/kbn-cell-actions/src/constants.ts new file mode 100644 index 0000000000000..86eb81ed5c7cf --- /dev/null +++ b/packages/kbn-cell-actions/src/constants.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 FILTER_CELL_ACTION_TYPE = 'cellAction-filter'; +export const COPY_CELL_ACTION_TYPE = 'cellAction-copy'; + +export enum CellActionsMode { + HOVER = 'hover', + INLINE = 'inline', +} diff --git a/packages/kbn-cell-actions/src/hooks/index.ts b/packages/kbn-cell-actions/src/hooks/index.ts index 94086c432065e..18bdb9d4053c5 100644 --- a/packages/kbn-cell-actions/src/hooks/index.ts +++ b/packages/kbn-cell-actions/src/hooks/index.ts @@ -9,4 +9,5 @@ export { useDataGridColumnsCellActions, type UseDataGridColumnsCellActionsProps, + type UseDataGridColumnsCellActions, } from './use_data_grid_column_cell_actions'; diff --git a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx index 2fe9668097f1b..344e4a058ad44 100644 --- a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx +++ b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx @@ -29,17 +29,21 @@ interface BulkField extends Pick { } export interface UseDataGridColumnsCellActionsProps - extends Pick { + extends Pick { fields: BulkField[]; dataGridRef: MutableRefObject; } -export const useDataGridColumnsCellActions = ({ +export type UseDataGridColumnsCellActions< + P extends UseDataGridColumnsCellActionsProps = UseDataGridColumnsCellActionsProps +> = (props: P) => EuiDataGridColumnCellAction[][]; + +export const useDataGridColumnsCellActions: UseDataGridColumnsCellActions = ({ fields, triggerId, metadata, dataGridRef, - disabledActions = [], -}: UseDataGridColumnsCellActionsProps): EuiDataGridColumnCellAction[][] => { + disabledActionTypes = [], +}) => { const bulkContexts: CellActionCompatibilityContext[] = useMemo( () => fields.map(({ values, ...field }) => ({ @@ -50,7 +54,9 @@ export const useDataGridColumnsCellActions = ({ [fields, triggerId, metadata] ); - const { loading, value: columnsActions } = useBulkLoadActions(bulkContexts, { disabledActions }); + const { loading, value: columnsActions } = useBulkLoadActions(bulkContexts, { + disabledActionTypes, + }); const columnsCellActions = useMemo(() => { if (loading) { diff --git a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts index e9612e6ffa26d..8df9102719466 100644 --- a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts +++ b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts @@ -58,7 +58,7 @@ describe('loadActions hooks', () => { mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); const { result, waitForNextUpdate } = renderHook(() => - useLoadActions(actionContext, { disabledActions: [actionDisabled.id] }) + useLoadActions(actionContext, { disabledActionTypes: [actionDisabled.type] }) ); await waitForNextUpdate(); @@ -110,13 +110,13 @@ describe('loadActions hooks', () => { expect(result.error?.message).toEqual(message); }); - it('filters out disabled actions', async () => { + it('filters out disabled actions types', async () => { const actionEnabled = makeAction('action-enabled'); const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); const { result, waitForNextUpdate } = renderHook(() => - useLoadActionsFn({ disabledActions: [actionDisabled.id] }) + useLoadActionsFn({ disabledActionTypes: [actionDisabled.type] }) ); const [_, loadActions] = result.current; @@ -163,13 +163,13 @@ describe('loadActions hooks', () => { expect(result.error?.message).toEqual(message); }); - it('filters out disabled actions', async () => { + it('filters out disabled actions types', async () => { const actionEnabled = makeAction('action-enabled'); const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); const { result, waitForNextUpdate } = renderHook(() => - useBulkLoadActions(actionContexts, { disabledActions: [actionDisabled.id] }) + useBulkLoadActions(actionContexts, { disabledActionTypes: [actionDisabled.type] }) ); await waitForNextUpdate(); diff --git a/packages/kbn-cell-actions/src/hooks/use_load_actions.ts b/packages/kbn-cell-actions/src/hooks/use_load_actions.ts index a1d84e9dd2ade..54e6843bac279 100644 --- a/packages/kbn-cell-actions/src/hooks/use_load_actions.ts +++ b/packages/kbn-cell-actions/src/hooks/use_load_actions.ts @@ -29,7 +29,7 @@ export const useLoadActions = ( ): AsyncActions => { const { getActions } = useCellActionsContext(); const { error, value, loading } = useAsync(() => getActions(context), []); - const filteredActions = useFilteredActions(value, options.disabledActions); + const filteredActions = useFilteredActions(value, options.disabledActionTypes); useThrowError(error); return { value: filteredActions, loading }; }; @@ -40,13 +40,13 @@ export const useLoadActions = ( export const useLoadActionsFn = (options: LoadActionsOptions = {}): [AsyncActions, GetActions] => { const { getActions } = useCellActionsContext(); const [{ error, value, loading }, loadActions] = useAsyncFn(getActions, []); - const filteredActions = useFilteredActions(value, options.disabledActions); + const filteredActions = useFilteredActions(value, options.disabledActionTypes); useThrowError(error); return [{ value: filteredActions, loading }, loadActions]; }; interface LoadActionsOptions { - disabledActions?: string[]; + disabledActionTypes?: string[]; } /** @@ -62,7 +62,7 @@ export const useBulkLoadActions = ( Promise.all( contexts.map((context) => getActions(context).then( - (actions) => filteredActions(actions, options.disabledActions) ?? [] + (actions) => filteredActions(actions, options.disabledActionTypes) ?? [] ) ) ), @@ -72,8 +72,8 @@ export const useBulkLoadActions = ( return actionsState; }; -const useFilteredActions = (actions: CellAction[] | undefined, disabledActions?: string[]) => - useMemo(() => filteredActions(actions, disabledActions), [actions, disabledActions]); +const useFilteredActions = (actions: CellAction[] | undefined, disabledActionTypes?: string[]) => + useMemo(() => filteredActions(actions, disabledActionTypes), [actions, disabledActionTypes]); -const filteredActions = (actions: CellAction[] | undefined, disabledActions: string[] = []) => - actions ? actions.filter(({ id }) => !disabledActions?.includes(id)) : undefined; +const filteredActions = (actions: CellAction[] | undefined, disabledActionTypes: string[] = []) => + actions ? actions.filter(({ type }) => !disabledActionTypes?.includes(type)) : undefined; diff --git a/packages/kbn-cell-actions/src/index.ts b/packages/kbn-cell-actions/src/index.ts index 61c74c7c92621..7c13b97adf276 100644 --- a/packages/kbn-cell-actions/src/index.ts +++ b/packages/kbn-cell-actions/src/index.ts @@ -6,12 +6,34 @@ * Side Public License, v 1. */ -export { CellActions } from './components'; -export { CellActionsProvider } from './context'; -export { useDataGridColumnsCellActions, type UseDataGridColumnsCellActionsProps } from './hooks'; -export { CellActionsMode } from './types'; +// Types and enums export type { CellAction, + CellActionsProps, CellActionExecutionContext, CellActionCompatibilityContext, + CellActionTemplate, + CellActionFactory, + CellActionExtend, } from './types'; +export type { UseDataGridColumnsCellActions, UseDataGridColumnsCellActionsProps } from './hooks'; + +// Constants +export { CellActionsMode, FILTER_CELL_ACTION_TYPE, COPY_CELL_ACTION_TYPE } from './constants'; + +// Components and hooks +export { CellActionsProvider } from './context'; +export { CellActions } from './components'; +export { useDataGridColumnsCellActions } from './hooks'; + +// Generic actions +export { createCopyToClipboardActionFactory } from './actions/copy_to_clipboard'; +export { + createFilterInActionFactory, + createFilterOutActionFactory, + addFilterIn, + addFilterOut, +} from './actions/filter'; + +// Action factory +export { createCellActionFactory } from './actions/factory'; diff --git a/packages/kbn-cell-actions/src/mocks/helpers.ts b/packages/kbn-cell-actions/src/mocks/helpers.ts index acb1afd1bc21e..46fd53448f512 100644 --- a/packages/kbn-cell-actions/src/mocks/helpers.ts +++ b/packages/kbn-cell-actions/src/mocks/helpers.ts @@ -33,5 +33,6 @@ export const makeActionContext = ( value: 'some value', }, nodeRef: {} as MutableRefObject, + metadata: undefined, ...override, }); diff --git a/packages/kbn-cell-actions/src/types.ts b/packages/kbn-cell-actions/src/types.ts index bb58ebdc69f51..1efc4239514f7 100644 --- a/packages/kbn-cell-actions/src/types.ts +++ b/packages/kbn-cell-actions/src/types.ts @@ -5,12 +5,12 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ - import type { Action, ActionExecutionContext, UiActionsService, } from '@kbn/ui-actions-plugin/public'; +import type { CellActionsMode } from './constants'; export interface CellActionsProviderProps { /** @@ -46,10 +46,7 @@ export interface CellActionField { aggregatable?: boolean; } -export enum CellActionsMode { - HOVER = 'hover', - INLINE = 'inline', -} +type Metadata = Record; export interface CellActionsProps { /** @@ -80,19 +77,17 @@ export interface CellActionsProps { /** * List of Actions ids that shouldn't be displayed inside cell actions. */ - disabledActions?: string[]; + disabledActionTypes?: string[]; /** * Custom set of properties used by some actions. * An action might require a specific set of metadata properties to render. * This data is sent directly to actions. */ - metadata?: Record; + metadata?: Metadata; className?: string; } -type Metadata = Record | undefined; - export interface CellActionExecutionContext extends ActionExecutionContext { field: CellActionField; /** @@ -102,19 +97,24 @@ export interface CellActionExecutionContext extends ActionExecutionContext { /** * Extra configurations for actions. */ - metadata?: Metadata; + metadata: Metadata | undefined; } -export interface CellActionCompatibilityContext - extends ActionExecutionContext { +/** + * Subset of `CellActionExecutionContext` used only for the compatibility check in the `isCompatible` function. + * It omits the references and the `field.value`. + */ +export interface CellActionCompatibilityContext< + C extends CellActionExecutionContext = CellActionExecutionContext +> extends ActionExecutionContext { /** * The object containing the field name and type, needed for the compatibility check */ - field: Pick; + field: Omit; /** * Extra configurations for actions. */ - metadata?: M; + metadata: C['metadata'] | undefined; } export interface CellAction @@ -123,7 +123,7 @@ export interface CellAction): Promise; + isCompatible(context: CellActionCompatibilityContext): Promise; } export type GetActions = (context: CellActionCompatibilityContext) => Promise; @@ -132,3 +132,20 @@ export interface PartitionedActions { extraActions: CellAction[]; visibleActions: CellAction[]; } + +/** + * Cell action factory template with optional `id`. + * The id override is required when using the action factory so it + * can be omitted in the original action creator + */ +export type CellActionTemplate = Omit; +/** + * Action factory extend parameter type, + */ +export type CellActionExtend = Partial & { id: string }; +export interface CellActionFactory { + (extend: CellActionExtend): A; + combine: ( + partialActionTemplate: Partial> + ) => CellActionFactory; +} diff --git a/packages/kbn-cell-actions/tsconfig.json b/packages/kbn-cell-actions/tsconfig.json index 63c76dfbfaa45..cc40d4c80f3b0 100644 --- a/packages/kbn-cell-actions/tsconfig.json +++ b/packages/kbn-cell-actions/tsconfig.json @@ -15,6 +15,9 @@ "kbn_references": [ "@kbn/ui-theme", "@kbn/i18n", + "@kbn/core", + "@kbn/data-plugin", + "@kbn/es-query", "@kbn/ui-actions-plugin", ], "exclude": ["target/**/*"] diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index d4df7e45c67be..0a100ba2870b7 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -498,7 +498,3 @@ export const DEFAULT_DETECTION_PAGE_FILTERS = [ fieldName: 'host.name', }, ]; - -export const CELL_ACTIONS_DEFAULT_TRIGGER = 'security-solution-default-cellActions'; -export const CELL_ACTIONS_TIMELINE_TRIGGER = 'security-solution-timeline-cellActions'; -export const CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER = 'security-solution-details-flyout-cellActions'; diff --git a/x-pack/plugins/security_solution/cypress/screens/alerts.ts b/x-pack/plugins/security_solution/cypress/screens/alerts.ts index 1b5ca92e1eb1c..eb2cb28d80844 100644 --- a/x-pack/plugins/security_solution/cypress/screens/alerts.ts +++ b/x-pack/plugins/security_solution/cypress/screens/alerts.ts @@ -138,15 +138,15 @@ export const EVENT_CONTAINER_TABLE_NOT_LOADING = export const FILTER_BADGE = '[data-test-subj^="filter-badge"]'; export const CELL_FILTER_IN_BUTTON = - '[data-test-subj="dataGridColumnCellAction-security_filterIn"]'; + '[data-test-subj="dataGridColumnCellAction-security-default-cellActions-filterIn"]'; export const CELL_FILTER_OUT_BUTTON = - '[data-test-subj="dataGridColumnCellAction-security_filterOut"]'; + '[data-test-subj="dataGridColumnCellAction-security-default-cellActions-filterOut"]'; export const CELL_ADD_TO_TIMELINE_BUTTON = - '[data-test-subj="dataGridColumnCellAction-security_addToTimeline"]'; + '[data-test-subj="dataGridColumnCellAction-security-default-cellActions-addToTimeline"]'; export const CELL_SHOW_TOP_FIELD_BUTTON = - '[data-test-subj="dataGridColumnCellAction-security_showTopN"]'; + '[data-test-subj="dataGridColumnCellAction-security-default-cellActions-showTopN"]'; export const CELL_COPY_BUTTON = - '[data-test-subj="dataGridColumnCellAction-security_copyToClipboard"]'; + '[data-test-subj="dataGridColumnCellAction-security-default-cellActions-copyToClipboard"]'; export const ACTIONS_EXPAND_BUTTON = '[data-test-subj="euiDataGridCellExpandButton"]'; diff --git a/x-pack/plugins/security_solution/cypress/screens/network/flows.ts b/x-pack/plugins/security_solution/cypress/screens/network/flows.ts index d20e1d69199af..e29d2a85a69a7 100644 --- a/x-pack/plugins/security_solution/cypress/screens/network/flows.ts +++ b/x-pack/plugins/security_solution/cypress/screens/network/flows.ts @@ -9,15 +9,16 @@ export const IPS_TABLE_LOADED = '[data-test-subj="table-topNFlowSource-loading-f export const EXPAND_OVERFLOW_ITEMS = '[data-test-subj="overflow-button"]'; -export const FILTER_IN = '[data-test-subj="actionItem-security_filterIn"]'; +export const FILTER_IN = '[data-test-subj="actionItem-security-default-cellActions-filterIn"]'; -export const FILTER_OUT = '[data-test-subj="actionItem-security_filterOut"]'; +export const FILTER_OUT = '[data-test-subj="actionItem-security-default-cellActions-filterOut"]'; -export const ADD_TO_TIMELINE = '[data-test-subj="actionItem-security_addToTimeline"]'; +export const ADD_TO_TIMELINE = + '[data-test-subj="actionItem-security-default-cellActions-addToTimeline"]'; -export const SHOW_TOP_FIELD = '[data-test-subj="actionItem-security_showTopN"]'; +export const SHOW_TOP_FIELD = '[data-test-subj="actionItem-security-default-cellActions-showTopN"]'; -export const COPY = '[data-test-subj="actionItem-security_copyToClipboard"]'; +export const COPY = '[data-test-subj="actionItem-security-default-cellActions-copyToClipboard"]'; export const TOP_N_CONTAINER = '[data-test-subj="topN-container"]'; diff --git a/x-pack/plugins/security_solution/cypress/screens/timeline.ts b/x-pack/plugins/security_solution/cypress/screens/timeline.ts index a9cdb896cdea4..2752afad6323a 100644 --- a/x-pack/plugins/security_solution/cypress/screens/timeline.ts +++ b/x-pack/plugins/security_solution/cypress/screens/timeline.ts @@ -60,7 +60,8 @@ export const HOST_KPI = '[data-test-subj="siem-timeline-host-kpi"]'; export const ID_HEADER_FIELD = '[data-test-subj="timeline"] [data-test-subj="header-text-_id"]'; -export const ID_TOGGLE_FIELD = '[data-test-subj="actionItem-security_toggleColumn"]'; +export const ID_TOGGLE_FIELD = + '[data-test-subj="actionItem-security-detailsFlyout-cellActions-toggleColumn"]'; export const ID_HOVER_ACTION_OVERFLOW_BTN = '[data-test-subj="event-fields-table-row-_id"] [data-test-subj="showExtraActionsButton"]'; @@ -238,7 +239,8 @@ export const TIMELINE_TITLE_INPUT = '[data-test-subj="save-timeline-title"]'; export const TIMESTAMP_HEADER_FIELD = '[data-test-subj="header-text-@timestamp"]'; -export const TIMESTAMP_TOGGLE_FIELD = '[data-test-subj="actionItem-security_toggleColumn"]'; +export const TIMESTAMP_TOGGLE_FIELD = + '[data-test-subj="actionItem-security-detailsFlyout-cellActions-toggleColumn"]'; export const TOGGLE_TIMELINE_EXPAND_EVENT = '[data-test-subj="expand-event"]'; @@ -296,9 +298,6 @@ export const ALERT_TABLE_FILE_NAME_HEADER = '[data-gridcell-column-id="file.name export const ALERT_TABLE_FILE_NAME_VALUES = '[data-gridcell-column-id="file.name"][data-test-subj="dataGridRowCell"]'; // empty column for the test data -export const ALERT_TABLE_CELL_ACTIONS_ADD_TO_TIMELINE = - '[data-test-subj="dataGridColumnCellAction-security_addToTimeline"]'; - export const ACTIVE_TIMELINE_BOTTOM_BAR = '[data-test-subj="flyoutBottomBar"] .active-timeline-button'; diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.test.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.test.ts similarity index 80% rename from x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.test.ts rename to x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.test.ts index 7fe791cc333a0..340a7cc11c2e2 100644 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.test.ts +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.test.ts @@ -6,20 +6,15 @@ */ import type { SecurityAppStore } from '../../../common/store/types'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { APP_UI_ID } from '../../../../common/constants'; -import { Subject } from 'rxjs'; import { TimelineId } from '../../../../common/types'; import { addProvider } from '../../../timelines/store/timeline/actions'; -import { createAddToTimelineAction } from './add_to_timeline'; +import { createAddToTimelineCellActionFactory } from './add_to_timeline'; import type { CellActionExecutionContext } from '@kbn/cell-actions'; import { GEO_FIELD_TYPE } from '../../../timelines/components/timeline/body/renderers/constants'; +import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; -jest.mock('../../../common/lib/kibana'); -const currentAppId$ = new Subject(); -KibanaServices.get().application.currentAppId$ = currentAppId$.asObservable(); -const mockWarningToast = jest.fn(); -KibanaServices.get().notifications.toasts.addWarning = mockWarningToast; +const services = createStartServicesMock(); +const mockWarningToast = services.notifications.toasts.addWarning; const mockDispatch = jest.fn(); const store = { @@ -54,11 +49,11 @@ const defaultDataProvider = { }, }; -describe('Default createAddToTimelineAction', () => { - const addToTimelineAction = createAddToTimelineAction({ store, order: 1 }); +describe('createAddToTimelineCellAction', () => { + const addToTimelineCellActionFactory = createAddToTimelineCellActionFactory({ store, services }); + const addToTimelineAction = addToTimelineCellActionFactory({ id: 'testAddToTimeline', order: 1 }); beforeEach(() => { - currentAppId$.next(APP_UI_ID); jest.clearAllMocks(); }); @@ -71,14 +66,17 @@ describe('Default createAddToTimelineAction', () => { }); describe('isCompatible', () => { - it('should return false if not in Security', async () => { - currentAppId$.next('not security'); - expect(await addToTimelineAction.isCompatible(context)).toEqual(false); - }); - it('should return true if everything is okay', async () => { expect(await addToTimelineAction.isCompatible(context)).toEqual(true); }); + it('should return false if field not allowed', async () => { + expect( + await addToTimelineAction.isCompatible({ + ...context, + field: { ...context.field, name: 'signal.reason' }, + }) + ).toEqual(false); + }); }); describe('execute', () => { diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts new file mode 100644 index 0000000000000..c444a46cd6407 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createCellActionFactory } from '@kbn/cell-actions'; +import type { CellActionTemplate } from '@kbn/cell-actions'; +import { addProvider } from '../../../timelines/store/timeline/actions'; +import { TimelineId } from '../../../../common/types'; +import type { SecurityAppStore } from '../../../common/store'; +import { fieldHasCellActions } from '../../utils'; +import { + ADD_TO_TIMELINE, + ADD_TO_TIMELINE_FAILED_TEXT, + ADD_TO_TIMELINE_FAILED_TITLE, + ADD_TO_TIMELINE_ICON, + ADD_TO_TIMELINE_SUCCESS_TITLE, +} from '../constants'; +import { createDataProviders } from '../data_provider'; +import { SecurityCellActionType } from '../../constants'; +import type { StartServices } from '../../../types'; +import type { SecurityCellAction } from '../../types'; + +export const createAddToTimelineCellActionFactory = createCellActionFactory( + ({ + store, + services, + }: { + store: SecurityAppStore; + services: StartServices; + }): CellActionTemplate => { + const { notifications: notificationsService } = services; + + return { + type: SecurityCellActionType.ADD_TO_TIMELINE, + getIconType: () => ADD_TO_TIMELINE_ICON, + getDisplayName: () => ADD_TO_TIMELINE, + getDisplayNameTooltip: () => ADD_TO_TIMELINE, + isCompatible: async ({ field }) => fieldHasCellActions(field.name), + execute: async ({ field, metadata }) => { + const dataProviders = + createDataProviders({ + contextId: TimelineId.active, + fieldType: field.type, + values: field.value, + field: field.name, + negate: metadata?.negateFilters === true, + }) ?? []; + + if (dataProviders.length > 0) { + store.dispatch(addProvider({ id: TimelineId.active, providers: dataProviders })); + + let messageValue = ''; + if (field.value != null) { + messageValue = Array.isArray(field.value) ? field.value.join(', ') : field.value; + } + notificationsService.toasts.addSuccess({ + title: ADD_TO_TIMELINE_SUCCESS_TITLE(messageValue), + }); + } else { + notificationsService.toasts.addWarning({ + title: ADD_TO_TIMELINE_FAILED_TITLE, + text: ADD_TO_TIMELINE_FAILED_TEXT, + }); + } + }, + }; + } +); diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.tsx b/x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.tsx deleted file mode 100644 index 5bb23be732750..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/default/add_to_timeline.tsx +++ /dev/null @@ -1,77 +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 { CellAction } from '@kbn/cell-actions'; -import { addProvider } from '../../../timelines/store/timeline/actions'; -import { TimelineId } from '../../../../common/types'; -import { KibanaServices } from '../../../common/lib/kibana'; -import type { SecurityAppStore } from '../../../common/store'; -import { fieldHasCellActions, isInSecurityApp } from '../../utils'; -import { - ADD_TO_TIMELINE, - ADD_TO_TIMELINE_FAILED_TEXT, - ADD_TO_TIMELINE_FAILED_TITLE, - ADD_TO_TIMELINE_ICON, - ADD_TO_TIMELINE_SUCCESS_TITLE, -} from '../constants'; -import { createDataProviders } from '../data_provider'; - -export const ACTION_ID = 'security_addToTimeline'; - -export const createAddToTimelineAction = ({ - store, - order, -}: { - store: SecurityAppStore; - order?: number; -}): CellAction => { - const { application: applicationService, notifications: notificationsService } = - KibanaServices.get(); - let currentAppId: string | undefined; - applicationService.currentAppId$.subscribe((appId) => { - currentAppId = appId; - }); - - return { - id: ACTION_ID, - type: ACTION_ID, - order, - getIconType: (): string => ADD_TO_TIMELINE_ICON, - getDisplayName: () => ADD_TO_TIMELINE, - getDisplayNameTooltip: () => ADD_TO_TIMELINE, - isCompatible: async ({ field }) => - isInSecurityApp(currentAppId) && fieldHasCellActions(field.name), - execute: async ({ field, metadata }) => { - const negate = Boolean(metadata?.negateFilters); - const dataProviders = - createDataProviders({ - contextId: TimelineId.active, - fieldType: field.type, - values: field.value, - field: field.name, - negate, - }) ?? []; - - if (dataProviders.length > 0) { - store.dispatch(addProvider({ id: TimelineId.active, providers: dataProviders })); - - let messageValue = ''; - if (field.value != null) { - messageValue = Array.isArray(field.value) ? field.value.join(', ') : field.value; - } - notificationsService.toasts.addSuccess({ - title: ADD_TO_TIMELINE_SUCCESS_TITLE(messageValue), - }); - } else { - notificationsService.toasts.addWarning({ - title: ADD_TO_TIMELINE_FAILED_TITLE, - text: ADD_TO_TIMELINE_FAILED_TEXT, - }); - } - }, - }; -}; diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/index.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/index.ts index d948e0c65acec..c639dde1e2337 100644 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/index.ts +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/index.ts @@ -5,5 +5,5 @@ * 2.0. */ -export { createAddToTimelineAction as createDefaultAddToTimelineAction } from './default/add_to_timeline'; -export { createAddToTimelineAction as createLensAddToTimelineAction } from './lens/add_to_timeline'; +export { createAddToTimelineCellActionFactory } from './cell_action/add_to_timeline'; +export { createAddToTimelineLensAction } from './lens/add_to_timeline'; diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.test.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.test.ts index 9b845a20f831f..9f172d4e18b3e 100644 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.test.ts +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.test.ts @@ -9,7 +9,7 @@ import type { CellValueContext, EmbeddableInput, IEmbeddable } from '@kbn/embedd import { ErrorEmbeddable } from '@kbn/embeddable-plugin/public'; import { LENS_EMBEDDABLE_TYPE } from '@kbn/lens-plugin/public'; import type { SecurityAppStore } from '../../../common/store/types'; -import { createAddToTimelineAction } from './add_to_timeline'; +import { createAddToTimelineLensAction } from './add_to_timeline'; import { KibanaServices } from '../../../common/lib/kibana'; import { APP_UI_ID } from '../../../../common/constants'; import { Subject } from 'rxjs'; @@ -54,8 +54,8 @@ const context = { embeddable: lensEmbeddable, } as unknown as ActionExecutionContext; -describe('Lens createAddToTimelineAction', () => { - const addToTimelineAction = createAddToTimelineAction({ store, order: 1 }); +describe('createAddToTimelineLensAction', () => { + const addToTimelineAction = createAddToTimelineLensAction({ store, order: 1 }); beforeEach(() => { currentAppId$.next(APP_UI_ID); diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.ts index 892caff34b3dd..4efe1d2a0122a 100644 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.ts +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/lens/add_to_timeline.ts @@ -38,7 +38,7 @@ function isDataColumnsFilterable(data?: CellValueContext['data']): boolean { ); } -export const createAddToTimelineAction = ({ +export const createAddToTimelineLensAction = ({ store, order, }: { diff --git a/x-pack/plugins/security_solution/public/actions/constants.ts b/x-pack/plugins/security_solution/public/actions/constants.ts new file mode 100644 index 0000000000000..94c2601222847 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/constants.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +export enum SecurityCellActionsTrigger { + DEFAULT = 'security-default-cellActions', + DETAILS_FLYOUT = 'security-detailsFlyout-cellActions', +} + +export enum SecurityCellActionType { + FILTER = 'security-cellAction-type-filter', + COPY = 'security-cellAction-type-copyToClipboard', + ADD_TO_TIMELINE = 'security-cellAction-type-addToTimeline', + SHOW_TOP_N = 'security-cellAction-type-showTopN', + TOGGLE_COLUMN = 'security-cellAction-type-toggleColumn', +} diff --git a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/cell_action/copy_to_clipboard.ts b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/cell_action/copy_to_clipboard.ts new file mode 100644 index 0000000000000..90ab55a5b0fd0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/cell_action/copy_to_clipboard.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createCopyToClipboardActionFactory as genericCreateCopyToClipboardActionFactory } from '@kbn/cell-actions'; +import { fieldHasCellActions } from '../../utils'; +import type { StartServices } from '../../../types'; +import type { SecurityCellAction } from '../../types'; +import { SecurityCellActionType } from '../../constants'; + +export const createCopyToClipboardCellActionFactory = ({ + services, +}: { + services: StartServices; +}) => { + const { notifications } = services; + const genericCopyToClipboardActionFactory = genericCreateCopyToClipboardActionFactory({ + notifications, + }); + return genericCopyToClipboardActionFactory.combine({ + type: SecurityCellActionType.COPY, + isCompatible: async ({ field }) => fieldHasCellActions(field.name), + }); +}; diff --git a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.tsx b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.tsx deleted file mode 100644 index 9c0b65c42ff21..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/default/copy_to_clipboard.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { CellAction } from '@kbn/cell-actions'; -import copy from 'copy-to-clipboard'; -import { COPY_TO_CLIPBOARD, COPY_TO_CLIPBOARD_ICON, COPY_TO_CLIPBOARD_SUCCESS } from '../constants'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { fieldHasCellActions } from '../../utils'; - -const ID = 'security_copyToClipboard'; - -export const createCopyToClipboardAction = ({ order }: { order?: number }): CellAction => ({ - id: ID, - type: ID, - order, - getIconType: (): string => COPY_TO_CLIPBOARD_ICON, - getDisplayName: () => COPY_TO_CLIPBOARD, - getDisplayNameTooltip: () => COPY_TO_CLIPBOARD, - isCompatible: async ({ field }) => fieldHasCellActions(field.name), - execute: async ({ field }) => { - const { notifications } = KibanaServices.get(); - - let textValue: undefined | string; - if (field.value != null) { - textValue = Array.isArray(field.value) - ? field.value.map((value) => `"${value}"`).join(', ') - : `"${field.value}"`; - } - const text = textValue ? `${field.name}: ${textValue}` : field.name; - const isSuccess = copy(text, { debug: true }); - - if (isSuccess) { - notifications.toasts.addSuccess( - { - title: COPY_TO_CLIPBOARD_SUCCESS, - }, - { - toastLifeTimeMs: 800, - } - ); - } - }, -}); diff --git a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/index.ts b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/index.ts index 07adcfba234fc..601e23086b422 100644 --- a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/index.ts +++ b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/index.ts @@ -5,5 +5,5 @@ * 2.0. */ -export { createCopyToClipboardAction as createLensCopyToClipboardAction } from './lens/copy_to_clipboard'; -export { createCopyToClipboardAction as createDefaultCopyToClipboardAction } from './default/copy_to_clipboard'; +export { createCopyToClipboardLensAction } from './lens/copy_to_clipboard'; +export { createCopyToClipboardCellActionFactory } from './cell_action/copy_to_clipboard'; diff --git a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts index 2b7f232514323..5e80ab4b00409 100644 --- a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts +++ b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.test.ts @@ -8,7 +8,7 @@ import type { CellValueContext, EmbeddableInput, IEmbeddable } from '@kbn/embeddable-plugin/public'; import { ErrorEmbeddable } from '@kbn/embeddable-plugin/public'; import { LENS_EMBEDDABLE_TYPE } from '@kbn/lens-plugin/public'; -import { createCopyToClipboardAction } from './copy_to_clipboard'; +import { createCopyToClipboardLensAction } from './copy_to_clipboard'; import { KibanaServices } from '../../../common/lib/kibana'; import { APP_UI_ID } from '../../../../common/constants'; import { Subject } from 'rxjs'; @@ -46,8 +46,8 @@ const context = { embeddable: lensEmbeddable, } as unknown as ActionExecutionContext; -describe('Lens createCopyToClipboardAction', () => { - const copyToClipboardAction = createCopyToClipboardAction({ order: 1 }); +describe('createCopyToClipboardLensAction', () => { + const copyToClipboardAction = createCopyToClipboardLensAction({ order: 1 }); beforeEach(() => { currentAppId$.next(APP_UI_ID); diff --git a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.ts b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.ts index 0398a94ef98c2..1921434c0d4fa 100644 --- a/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.ts +++ b/x-pack/plugins/security_solution/public/actions/copy_to_clipboard/lens/copy_to_clipboard.ts @@ -23,7 +23,7 @@ function isDataColumnsValid(data?: CellValueContext['data']): boolean { ); } -export const createCopyToClipboardAction = ({ order }: { order?: number }) => { +export const createCopyToClipboardLensAction = ({ order }: { order?: number }) => { const { application: applicationService } = KibanaServices.get(); let currentAppId: string | undefined; applicationService.currentAppId$.subscribe((appId) => { diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts new file mode 100644 index 0000000000000..d9fa197f30bf1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.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 { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; +import { TableId, TimelineId } from '../../../../common/types'; +import { + createSecuritySolutionStorageMock, + kibanaObservable, + mockGlobalState, + SUB_PLUGINS_REDUCER, +} from '../../../common/mock'; +import { createStore } from '../../../common/store'; +import { createFilterInCellActionFactory } from './filter_in'; +import type { SecurityCellActionExecutionContext } from '../../types'; +import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; + +const services = createStartServicesMock(); +const mockFilterManager = services.data.query.filterManager; + +const mockState = { + ...mockGlobalState, + timeline: { + ...mockGlobalState.timeline, + timelineById: { + ...mockGlobalState.timeline.timelineById, + [TimelineId.active]: { + ...mockGlobalState.timeline.timelineById[TimelineId.active], + filterManager: createFilterManagerMock(), + }, + }, + }, +}; + +jest.mock('@kbn/ui-actions-plugin/public', () => ({ + ...jest.requireActual('@kbn/ui-actions-plugin/public'), + addFilterIn: () => {}, + addFilterOut: () => {}, +})); + +const { storage } = createSecuritySolutionStorageMock(); +const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + +describe('createFilterInCellActionFactory', () => { + const createFilterInCellAction = createFilterInCellActionFactory({ store: mockStore, services }); + const filterInAction = createFilterInCellAction({ id: 'testAction' }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + const context = { + field: { name: 'user.name', value: 'the value', type: 'text' }, + } as SecurityCellActionExecutionContext; + + it('should return display name', () => { + expect(filterInAction.getDisplayName(context)).toEqual('Filter In'); + }); + + it('should return icon type', () => { + expect(filterInAction.getIconType(context)).toEqual('plusInCircle'); + }); + + describe('isCompatible', () => { + it('should return true if everything is okay', async () => { + expect(await filterInAction.isCompatible(context)).toEqual(true); + }); + it('should return false if field not allowed', async () => { + expect( + await filterInAction.isCompatible({ + ...context, + field: { ...context.field, name: 'signal.reason' }, + }) + ).toEqual(false); + }); + }); + + describe('generic scope execution', () => { + const dataTableContext = { + ...context, + metadata: { scopeId: TableId.alertsOnAlertsPage }, + } as SecurityCellActionExecutionContext; + + it('should execute using generic filterManager', async () => { + await filterInAction.execute(dataTableContext); + expect(mockFilterManager.addFilters).toHaveBeenCalled(); + expect( + mockState.timeline.timelineById[TimelineId.active].filterManager?.addFilters + ).not.toHaveBeenCalled(); + }); + }); + + describe('timeline scope execution', () => { + const timelineContext = { + ...context, + metadata: { scopeId: TimelineId.active }, + } as SecurityCellActionExecutionContext; + + it('should execute using timeline filterManager', async () => { + await filterInAction.execute(timelineContext); + expect( + mockState.timeline.timelineById[TimelineId.active].filterManager?.addFilters + ).toHaveBeenCalled(); + expect(mockFilterManager.addFilters).not.toHaveBeenCalled(); + }); + + describe('should execute correctly when negateFilters is provided', () => { + it('if negateFilters is false, negate should be false (do not exclude)', async () => { + await filterInAction.execute({ + ...context, + metadata: { + negateFilters: false, + }, + }); + expect(mockFilterManager.addFilters).toHaveBeenCalled(); + // expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, false); + }); + + it('if negateFilters is true, negate should be true (exclude)', async () => { + await filterInAction.execute({ + ...context, + metadata: { + negateFilters: true, + }, + }); + expect(mockFilterManager.addFilters).toHaveBeenCalled(); + // expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, true); + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts new file mode 100644 index 0000000000000..7b206b1f41cd1 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.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 { addFilterIn, addFilterOut, createFilterInActionFactory } from '@kbn/cell-actions'; +import type { SecurityAppStore } from '../../../common/store'; +import { timelineSelectors } from '../../../timelines/store/timeline'; +import { fieldHasCellActions } from '../../utils'; +import { TimelineId } from '../../../../common/types'; +import { isTimelineScope } from '../../../helpers'; +import { SecurityCellActionType } from '../../constants'; +import type { StartServices } from '../../../types'; +import type { SecurityCellAction } from '../../types'; + +export const createFilterInCellActionFactory = ({ + store, + services, +}: { + store: SecurityAppStore; + services: StartServices; +}) => { + const getTimelineById = timelineSelectors.getTimelineByIdSelector(); + + const { filterManager } = services.data.query; + const genericFilterInActionFactory = createFilterInActionFactory({ filterManager }); + + return genericFilterInActionFactory.combine({ + type: SecurityCellActionType.FILTER, + isCompatible: async ({ field }) => fieldHasCellActions(field.name), + execute: async ({ field, metadata }) => { + // if negateFilters is true we have to perform the opposite operation, we can just execute filterOut with the same params + const addFilter = metadata?.negateFilters === true ? addFilterOut : addFilterIn; + + if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) { + const timelineFilterManager = getTimelineById( + store.getState(), + TimelineId.active + )?.filterManager; + + addFilter({ + filterManager: timelineFilterManager, + fieldName: field.name, + value: field.value, + }); + } else { + addFilter({ + filterManager, + fieldName: field.name, + value: field.value, + }); + } + }, + }); +}; diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts new file mode 100644 index 0000000000000..f171b3084cbfa --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; +import { TableId, TimelineId } from '../../../../common/types'; +import { + createSecuritySolutionStorageMock, + kibanaObservable, + mockGlobalState, + SUB_PLUGINS_REDUCER, +} from '../../../common/mock'; +import { createStore } from '../../../common/store'; +import { createFilterOutCellActionFactory } from './filter_out'; +import type { SecurityCellActionExecutionContext } from '../../types'; +import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; + +const services = createStartServicesMock(); +const mockFilterManager = services.data.query.filterManager; + +const mockState = { + ...mockGlobalState, + timeline: { + ...mockGlobalState.timeline, + timelineById: { + ...mockGlobalState.timeline.timelineById, + [TimelineId.active]: { + ...mockGlobalState.timeline.timelineById[TimelineId.active], + filterManager: createFilterManagerMock(), + }, + }, + }, +}; + +const { storage } = createSecuritySolutionStorageMock(); +const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); + +describe('createFilterOutCellActionFactory', () => { + const filterOutActionFactory = createFilterOutCellActionFactory({ store: mockStore, services }); + const filterOutAction = filterOutActionFactory({ id: 'testAction' }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + const context = { + field: { name: 'user.name', value: 'the value', type: 'text' }, + } as SecurityCellActionExecutionContext; + + it('should return display name', () => { + expect(filterOutAction.getDisplayName(context)).toEqual('Filter Out'); + }); + + it('should return icon type', () => { + expect(filterOutAction.getIconType(context)).toEqual('minusInCircle'); + }); + + describe('isCompatible', () => { + it('should return true if everything is okay', async () => { + expect(await filterOutAction.isCompatible(context)).toEqual(true); + }); + it('should return false if field not allowed', async () => { + expect( + await filterOutAction.isCompatible({ + ...context, + field: { ...context.field, name: 'signal.reason' }, + }) + ).toEqual(false); + }); + }); + + describe('generic scope execution', () => { + const dataTableContext = { + ...context, + metadata: { scopeId: TableId.alertsOnAlertsPage }, + } as SecurityCellActionExecutionContext; + + it('should execute using generic filterManager', async () => { + await filterOutAction.execute(dataTableContext); + expect(mockFilterManager.addFilters).toHaveBeenCalled(); + expect( + mockState.timeline.timelineById[TimelineId.active].filterManager?.addFilters + ).not.toHaveBeenCalled(); + }); + }); + + describe('timeline scope execution', () => { + const timelineContext = { + ...context, + metadata: { scopeId: TimelineId.active }, + } as SecurityCellActionExecutionContext; + + it('should execute using timeline filterManager', async () => { + await filterOutAction.execute(timelineContext); + expect( + mockState.timeline.timelineById[TimelineId.active].filterManager?.addFilters + ).toHaveBeenCalled(); + expect(mockFilterManager.addFilters).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts new file mode 100644 index 0000000000000..dfe5b6cf46330 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.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 { addFilterIn, addFilterOut, createFilterOutActionFactory } from '@kbn/cell-actions'; +import { fieldHasCellActions } from '../../utils'; +import type { SecurityAppStore } from '../../../common/store'; +import type { StartServices } from '../../../types'; +import { timelineSelectors } from '../../../timelines/store/timeline'; +import { TimelineId } from '../../../../common/types'; +import { isTimelineScope } from '../../../helpers'; +import type { SecurityCellAction } from '../../types'; +import { SecurityCellActionType } from '../../constants'; + +export const createFilterOutCellActionFactory = ({ + store, + services, +}: { + store: SecurityAppStore; + services: StartServices; +}) => { + const getTimelineById = timelineSelectors.getTimelineByIdSelector(); + + const { filterManager } = services.data.query; + const genericFilterOutActionFactory = createFilterOutActionFactory({ filterManager }); + + return genericFilterOutActionFactory.combine({ + type: SecurityCellActionType.FILTER, + isCompatible: async ({ field }) => fieldHasCellActions(field.name), + execute: async ({ field, metadata }) => { + // if negateFilters is true we have to perform the opposite operation, we can just execute filterIn with the same params + const addFilter = metadata?.negateFilters === true ? addFilterIn : addFilterOut; + + if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) { + const timelineFilterManager = getTimelineById( + store.getState(), + TimelineId.active + )?.filterManager; + + addFilter({ + filterManager: timelineFilterManager, + fieldName: field.name, + value: field.value, + }); + } else { + addFilter({ + filterManager, + fieldName: field.name, + value: field.value, + }); + } + }, + }); +}; diff --git a/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.test.ts b/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.test.ts deleted file mode 100644 index 5f09609f49a85..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { CellActionExecutionContext } from '@kbn/cell-actions'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { createFilterInAction } from './filter_in'; -import { createFilter } from '../helpers'; - -jest.mock('../../../common/lib/kibana'); -jest.mock('../helpers'); - -const mockFilterManager = KibanaServices.get().data.query.filterManager; -const mockCreateFilter = createFilter as jest.Mock; - -describe('Default createFilterInAction', () => { - const filterInAction = createFilterInAction({ order: 1 }); - const context = { - field: { name: 'user.name', value: 'the value', type: 'text' }, - } as CellActionExecutionContext; - - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('should return display name', () => { - expect(filterInAction.getDisplayName(context)).toEqual('Filter In'); - }); - - it('should return icon type', () => { - expect(filterInAction.getIconType(context)).toEqual('plusInCircle'); - }); - - describe('isCompatible', () => { - it('should return true if everything is okay', async () => { - expect(await filterInAction.isCompatible(context)).toEqual(true); - }); - }); - - describe('execute', () => { - it('should execute normally', async () => { - await filterInAction.execute(context); - expect(mockFilterManager.addFilters).toHaveBeenCalled(); - expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, false); - }); - - describe('should execute correctly when negateFilters is provided', () => { - it('if negateFilters is false, negate should be false (do not exclude)', async () => { - await filterInAction.execute({ - ...context, - metadata: { - negateFilters: false, - }, - }); - expect(mockFilterManager.addFilters).toHaveBeenCalled(); - expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, false); - }); - - it('if negateFilters is true, negate should be true (exclude)', async () => { - await filterInAction.execute({ - ...context, - metadata: { - negateFilters: true, - }, - }); - expect(mockFilterManager.addFilters).toHaveBeenCalled(); - expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, true); - }); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx b/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx deleted file mode 100644 index 06c0d7ee3ca4a..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/default/filter_in.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { CellAction } from '@kbn/cell-actions'; -import { i18n } from '@kbn/i18n'; -import { createFilter } from '../helpers'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { fieldHasCellActions } from '../../utils'; - -export const FILTER_IN = i18n.translate('xpack.securitySolution.actions.filterIn', { - defaultMessage: 'Filter In', -}); -export const ACTION_ID = 'security_filterIn'; -const ICON = 'plusInCircle'; - -export const createFilterInAction = ({ order }: { order?: number }): CellAction => ({ - id: ACTION_ID, - type: ACTION_ID, - order, - getIconType: (): string => ICON, - getDisplayName: () => FILTER_IN, - getDisplayNameTooltip: () => FILTER_IN, - isCompatible: async ({ field }) => fieldHasCellActions(field.name), - execute: async ({ field, metadata }) => { - const services = KibanaServices.get(); - const filterManager = services.data.query.filterManager; - const negate = Boolean(metadata?.negateFilters); - - const makeFilter = (currentVal: string | string[] | null | undefined) => - currentVal?.length === 0 - ? createFilter(field.name, null) - : createFilter(field.name, currentVal, negate); - - if (filterManager != null) { - filterManager.addFilters(makeFilter(field.value)); - } - }, -}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.test.ts b/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.test.ts deleted file mode 100644 index 31a9fe6798f2b..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { CellActionExecutionContext } from '@kbn/cell-actions'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { createFilterOutAction } from './filter_out'; -import { createFilter } from '../helpers'; - -jest.mock('../../../common/lib/kibana'); -jest.mock('../helpers'); - -const mockFilterManager = KibanaServices.get().data.query.filterManager; -const mockCreateFilter = createFilter as jest.Mock; - -describe('Default createFilterOutAction', () => { - const filterInAction = createFilterOutAction({ order: 1 }); - const context = { - field: { name: 'user.name', value: 'the value', type: 'text' }, - } as CellActionExecutionContext; - - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('should return display name', () => { - expect(filterInAction.getDisplayName(context)).toEqual('Filter Out'); - }); - - it('should return icon type', () => { - expect(filterInAction.getIconType(context)).toEqual('minusInCircle'); - }); - - describe('isCompatible', () => { - it('should return true if everything is okay', async () => { - expect(await filterInAction.isCompatible(context)).toEqual(true); - }); - }); - - describe('execute', () => { - it('should execute normally', async () => { - await filterInAction.execute(context); - expect(mockFilterManager.addFilters).toHaveBeenCalled(); - expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, true); - }); - - describe('should execute correctly when negateFilters is provided', () => { - it('if negateFilters is false, negate should be true', async () => { - await filterInAction.execute({ - ...context, - metadata: { - negateFilters: false, - }, - }); - expect(mockFilterManager.addFilters).toHaveBeenCalled(); - expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, true); - }); - - it('if negateFilters is true, negate should be false ', async () => { - await filterInAction.execute({ - ...context, - metadata: { - negateFilters: true, - }, - }); - expect(mockFilterManager.addFilters).toHaveBeenCalled(); - expect(mockCreateFilter).toBeCalledWith(context.field.name, context.field.value, false); - }); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx b/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx deleted file mode 100644 index 19fb6f323d745..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/default/filter_out.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { CellAction } from '@kbn/cell-actions'; -import { createFilter } from '../helpers'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { fieldHasCellActions } from '../../utils'; - -export const FILTER_OUT = i18n.translate('xpack.securitySolution.actions.filterOut', { - defaultMessage: 'Filter Out', -}); -export const ACTION_ID = 'security_filterOut'; -const ICON = 'minusInCircle'; - -export const createFilterOutAction = ({ order }: { order?: number }): CellAction => ({ - id: ACTION_ID, - type: ACTION_ID, - order, - getIconType: (): string => ICON, - getDisplayName: () => FILTER_OUT, - getDisplayNameTooltip: () => FILTER_OUT, - isCompatible: async ({ field }) => fieldHasCellActions(field.name), - execute: async ({ field, metadata }) => { - const services = KibanaServices.get(); - const filterManager = services.data.query.filterManager; - const negate = !metadata?.negateFilters; - - const makeFilter = (currentVal: string | string[] | null | undefined) => - currentVal == null || currentVal?.length === 0 - ? createFilter(field.name, null, false) - : createFilter(field.name, currentVal, negate); - - if (filterManager != null) { - filterManager.addFilters(makeFilter(field.value)); - } - }, -}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/helpers.ts b/x-pack/plugins/security_solution/public/actions/filter/helpers.ts deleted file mode 100644 index ffe89bf3fd718..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/helpers.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import type { Filter } from '@kbn/es-query'; - -export const createFilter = ( - key: string, - value: string[] | string | null | undefined, - negate: boolean = false -): Filter => { - const queryValue = value != null ? (Array.isArray(value) ? value[0] : value) : null; - return queryValue != null - ? { - meta: { - alias: null, - negate, - disabled: false, - type: 'phrase', - key, - value: queryValue, - params: { - query: queryValue, - }, - }, - query: { - match: { - [key]: { - query: queryValue, - type: 'phrase', - }, - }, - }, - } - : ({ - exists: { - field: key, - }, - meta: { - alias: null, - disabled: false, - key, - negate: value === undefined, - type: 'exists', - value: 'exists', - }, - } as Filter); -}; diff --git a/x-pack/plugins/security_solution/public/actions/filter/index.ts b/x-pack/plugins/security_solution/public/actions/filter/index.ts index c86bdf801d6d3..a6e782d261db7 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/index.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/index.ts @@ -5,8 +5,5 @@ * 2.0. */ -export { createFilterInAction as createDefaultFilterInAction } from './default/filter_in'; -export { createFilterOutAction as createDefaultFilterOutAction } from './default/filter_out'; - -export { createFilterInAction as createTimelineFilterInAction } from './timeline/filter_in'; -export { createFilterOutAction as createTimelineFilterOutAction } from './timeline/filter_out'; +export { createFilterInCellActionFactory } from './cell_action/filter_in'; +export { createFilterOutCellActionFactory } from './cell_action/filter_out'; diff --git a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.test.ts b/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.test.ts deleted file mode 100644 index 20964ab5328b6..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.test.ts +++ /dev/null @@ -1,83 +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 { CellActionExecutionContext } from '@kbn/cell-actions'; -import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; -import { TimelineId } from '../../../../common/types'; -import { - createSecuritySolutionStorageMock, - kibanaObservable, - mockGlobalState, - SUB_PLUGINS_REDUCER, -} from '../../../common/mock'; -import { createStore } from '../../../common/store'; -import { createFilterInAction } from './filter_in'; -import { Subject } from 'rxjs'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { APP_UI_ID } from '../../../../common/constants'; - -jest.mock('../../../common/lib/kibana'); - -const currentAppId$ = new Subject(); -KibanaServices.get().application.currentAppId$ = currentAppId$.asObservable(); - -const mockState = { - ...mockGlobalState, - timeline: { - ...mockGlobalState.timeline, - timelineById: { - ...mockGlobalState.timeline.timelineById, - [TimelineId.active]: { - ...mockGlobalState.timeline.timelineById[TimelineId.active], - filterManager: createFilterManagerMock(), - }, - }, - }, -}; - -const { storage } = createSecuritySolutionStorageMock(); -const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); - -describe('Timeline createFilterInAction', () => { - const filterInAction = createFilterInAction({ store: mockStore, order: 1 }); - const context = { - field: { name: 'user.name', value: 'the value', type: 'text' }, - } as CellActionExecutionContext; - - beforeEach(() => { - jest.clearAllMocks(); - currentAppId$.next(APP_UI_ID); - }); - - it('should return display name', () => { - expect(filterInAction.getDisplayName(context)).toEqual('Filter In'); - }); - - it('should return icon type', () => { - expect(filterInAction.getIconType(context)).toEqual('plusInCircle'); - }); - - describe('isCompatible', () => { - it('should return true if everything is okay', async () => { - expect(await filterInAction.isCompatible(context)).toEqual(true); - }); - - it('should return false if not in Security', async () => { - currentAppId$.next('not security'); - expect(await filterInAction.isCompatible(context)).toEqual(false); - }); - }); - - describe('execute', () => { - it('should execute normally', async () => { - await filterInAction.execute(context); - expect( - mockState.timeline.timelineById[TimelineId.active].filterManager?.addFilters - ).toHaveBeenCalled(); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.tsx b/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.tsx deleted file mode 100644 index 650c4f8b8b9d3..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_in.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { CellAction } from '@kbn/cell-actions'; -import { createFilter } from '../helpers'; -import type { SecurityAppStore } from '../../../common/store'; -import { timelineSelectors } from '../../../timelines/store/timeline'; -import { fieldHasCellActions, isInSecurityApp } from '../../utils'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { TimelineId } from '../../../../common/types'; - -export const FILTER_IN = i18n.translate('xpack.securitySolution.actions.filterIn', { - defaultMessage: 'Filter In', -}); -const ID = 'security_timeline_filterIn'; -const ICON = 'plusInCircle'; - -export const createFilterInAction = ({ - store, - order, -}: { - store: SecurityAppStore; - order?: number; -}): CellAction => { - const { application: applicationService } = KibanaServices.get(); - let currentAppId: string | undefined; - applicationService.currentAppId$.subscribe((appId) => { - currentAppId = appId; - }); - - return { - id: ID, - type: ID, - order, - getIconType: (): string => ICON, - getDisplayName: () => FILTER_IN, - getDisplayNameTooltip: () => FILTER_IN, - isCompatible: async ({ field }) => - isInSecurityApp(currentAppId) && fieldHasCellActions(field.name), - execute: async ({ field }) => { - const makeFilter = (currentVal?: string[] | string | null) => - currentVal?.length === 0 - ? createFilter(field.name, null) - : createFilter(field.name, currentVal); - - const state = store.getState(); - const getTimeline = timelineSelectors.getTimelineByIdSelector(); - const filterManager = getTimeline(state, TimelineId.active)?.filterManager; - - if (filterManager != null) { - filterManager.addFilters(makeFilter(field.value)); - } - }, - }; -}; diff --git a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.test.ts b/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.test.ts deleted file mode 100644 index e13d68c68cf68..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.test.ts +++ /dev/null @@ -1,83 +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 { CellActionExecutionContext } from '@kbn/cell-actions'; -import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; -import { TimelineId } from '../../../../common/types'; -import { - createSecuritySolutionStorageMock, - kibanaObservable, - mockGlobalState, - SUB_PLUGINS_REDUCER, -} from '../../../common/mock'; -import { createStore } from '../../../common/store'; -import { Subject } from 'rxjs'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { APP_UI_ID } from '../../../../common/constants'; -import { createFilterOutAction } from './filter_out'; - -jest.mock('../../../common/lib/kibana'); - -const currentAppId$ = new Subject(); -KibanaServices.get().application.currentAppId$ = currentAppId$.asObservable(); - -const mockState = { - ...mockGlobalState, - timeline: { - ...mockGlobalState.timeline, - timelineById: { - ...mockGlobalState.timeline.timelineById, - [TimelineId.active]: { - ...mockGlobalState.timeline.timelineById[TimelineId.active], - filterManager: createFilterManagerMock(), - }, - }, - }, -}; - -const { storage } = createSecuritySolutionStorageMock(); -const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); - -describe('Timeline createFilterOutAction', () => { - const filterOutAction = createFilterOutAction({ store: mockStore, order: 1 }); - const context = { - field: { name: 'user.name', value: 'the value', type: 'text' }, - } as CellActionExecutionContext; - - beforeEach(() => { - jest.clearAllMocks(); - currentAppId$.next(APP_UI_ID); - }); - - it('should return display name', () => { - expect(filterOutAction.getDisplayName(context)).toEqual('Filter Out'); - }); - - it('should return icon type', () => { - expect(filterOutAction.getIconType(context)).toEqual('minusInCircle'); - }); - - describe('isCompatible', () => { - it('should return true if everything is okay', async () => { - expect(await filterOutAction.isCompatible(context)).toEqual(true); - }); - - it('should return false if not in Security', async () => { - currentAppId$.next('not security'); - expect(await filterOutAction.isCompatible(context)).toEqual(false); - }); - }); - - describe('execute', () => { - it('should execute normally', async () => { - await filterOutAction.execute(context); - expect( - mockState.timeline.timelineById[TimelineId.active].filterManager?.addFilters - ).toHaveBeenCalled(); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.tsx b/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.tsx deleted file mode 100644 index e6c342bc861b0..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/filter/timeline/filter_out.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { i18n } from '@kbn/i18n'; -import type { CellAction } from '@kbn/cell-actions'; -import { createFilter } from '../helpers'; -import { KibanaServices } from '../../../common/lib/kibana'; -import { fieldHasCellActions, isInSecurityApp } from '../../utils'; -import type { SecurityAppStore } from '../../../common/store'; -import { timelineSelectors } from '../../../timelines/store/timeline'; -import { TimelineId } from '../../../../common/types'; - -export const FILTER_OUT = i18n.translate('xpack.securitySolution.actions.filterOut', { - defaultMessage: 'Filter Out', -}); -const ID = 'security_timeline_filterOut'; -const ICON = 'minusInCircle'; - -export const createFilterOutAction = ({ - store, - order, -}: { - store: SecurityAppStore; - order?: number; -}): CellAction => { - const { application: applicationService } = KibanaServices.get(); - let currentAppId: string | undefined; - applicationService.currentAppId$.subscribe((appId) => { - currentAppId = appId; - }); - - return { - id: ID, - type: ID, - order, - getIconType: (): string => ICON, - getDisplayName: () => FILTER_OUT, - getDisplayNameTooltip: () => FILTER_OUT, - isCompatible: async ({ field }) => - isInSecurityApp(currentAppId) && fieldHasCellActions(field.name), - execute: async ({ field }) => { - const makeFilter = (currentVal?: string[] | string | null) => - currentVal == null || currentVal?.length === 0 - ? createFilter(field.name, null, false) - : createFilter(field.name, currentVal, true); - - const state = store.getState(); - const getTimeline = timelineSelectors.getTimelineByIdSelector(); - const filterManager = getTimeline(state, TimelineId.active)?.filterManager; - - if (filterManager != null) { - filterManager.addFilters(makeFilter(field.value)); - } - }, - }; -}; diff --git a/x-pack/plugins/security_solution/public/actions/register.ts b/x-pack/plugins/security_solution/public/actions/register.ts index e113a242d6aa8..0fafb561d45a1 100644 --- a/x-pack/plugins/security_solution/public/actions/register.ts +++ b/x-pack/plugins/security_solution/public/actions/register.ts @@ -10,130 +10,84 @@ import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import type * as H from 'history'; import type { SecurityAppStore } from '../common/store/types'; import type { StartPlugins, StartServices } from '../types'; +import { createFilterInCellActionFactory, createFilterOutCellActionFactory } from './filter'; import { - createLensCopyToClipboardAction, - createDefaultCopyToClipboardAction, -} from './copy_to_clipboard'; -import { - createDefaultFilterInAction, - createDefaultFilterOutAction, - createTimelineFilterInAction, - createTimelineFilterOutAction, -} from './filter'; -import { createLensAddToTimelineAction, createDefaultAddToTimelineAction } from './add_to_timeline'; -import { createDefaultShowTopNAction } from './show_top_n'; + createAddToTimelineLensAction, + createAddToTimelineCellActionFactory, +} from './add_to_timeline'; +import { createShowTopNCellActionFactory } from './show_top_n'; import { - CELL_ACTIONS_DEFAULT_TRIGGER, - CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, - CELL_ACTIONS_TIMELINE_TRIGGER, -} from '../../common/constants'; -import { createDefaultToggleColumnAction } from './toggle_column'; + createCopyToClipboardLensAction, + createCopyToClipboardCellActionFactory, +} from './copy_to_clipboard'; +import { createToggleColumnCellActionFactory } from './toggle_column'; +import { SecurityCellActionsTrigger } from './constants'; +import type { SecurityCellActionName, SecurityCellActions } from './types'; export const registerUIActions = ( - plugins: StartPlugins, + { uiActions }: StartPlugins, store: SecurityAppStore, history: H.History, services: StartServices ) => { - registerLensActions(plugins.uiActions, store); - registerDefaultActions(plugins.uiActions, store, history, services); - registerTimelineActions(plugins.uiActions, store, history, services); - registerTableFlyoutActions(plugins.uiActions, store, history, services); + registerLensActions(uiActions, store); + registerCellActions(uiActions, store, history, services); }; const registerLensActions = (uiActions: UiActionsStart, store: SecurityAppStore) => { - const addToTimelineAction = createLensAddToTimelineAction({ store, order: 1 }); + const addToTimelineAction = createAddToTimelineLensAction({ store, order: 1 }); uiActions.addTriggerAction(CELL_VALUE_TRIGGER, addToTimelineAction); - const copyToClipboardAction = createLensCopyToClipboardAction({ order: 2 }); + const copyToClipboardAction = createCopyToClipboardLensAction({ order: 2 }); uiActions.addTriggerAction(CELL_VALUE_TRIGGER, copyToClipboardAction); }; -const registerDefaultActions = ( - uiActions: UiActionsStart, - store: SecurityAppStore, - history: H.History, - services: StartServices -) => { - const filterInAction = createDefaultFilterInAction({ - order: 10, - }); - const filterOutAction = createDefaultFilterOutAction({ - order: 20, - }); - const addToTimeline = createDefaultAddToTimelineAction({ store, order: 30 }); - const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 40 }); - const copyAction = createDefaultCopyToClipboardAction({ order: 50 }); - - uiActions.registerTrigger({ - id: CELL_ACTIONS_DEFAULT_TRIGGER, - }); - - uiActions.addTriggerAction(CELL_ACTIONS_DEFAULT_TRIGGER, copyAction); - uiActions.addTriggerAction(CELL_ACTIONS_DEFAULT_TRIGGER, filterInAction); - uiActions.addTriggerAction(CELL_ACTIONS_DEFAULT_TRIGGER, filterOutAction); - uiActions.addTriggerAction(CELL_ACTIONS_DEFAULT_TRIGGER, showTopNAction); - uiActions.addTriggerAction(CELL_ACTIONS_DEFAULT_TRIGGER, addToTimeline); -}; - -const registerTimelineActions = ( +const registerCellActions = ( uiActions: UiActionsStart, store: SecurityAppStore, history: H.History, services: StartServices ) => { - const filterInAction = createTimelineFilterInAction({ - store, - order: 10, - }); - const filterOutAction = createTimelineFilterOutAction({ - store, - order: 20, - }); - const addToTimeline = createDefaultAddToTimelineAction({ store, order: 30 }); - const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 40 }); - const copyAction = createDefaultCopyToClipboardAction({ order: 50 }); + const cellActions: SecurityCellActions = { + filterIn: createFilterInCellActionFactory({ store, services }), + filterOut: createFilterOutCellActionFactory({ store, services }), + addToTimeline: createAddToTimelineCellActionFactory({ store, services }), + showTopN: createShowTopNCellActionFactory({ store, history, services }), + copyToClipboard: createCopyToClipboardCellActionFactory({ services }), + toggleColumn: createToggleColumnCellActionFactory({ store }), + }; - uiActions.registerTrigger({ - id: CELL_ACTIONS_TIMELINE_TRIGGER, - }); + registerCellActionsTrigger(uiActions, SecurityCellActionsTrigger.DEFAULT, cellActions, [ + 'filterIn', + 'filterOut', + 'addToTimeline', + 'showTopN', + 'copyToClipboard', + ]); - uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, copyAction); - uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, filterInAction); - uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, filterOutAction); - uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, showTopNAction); - uiActions.addTriggerAction(CELL_ACTIONS_TIMELINE_TRIGGER, addToTimeline); + registerCellActionsTrigger(uiActions, SecurityCellActionsTrigger.DETAILS_FLYOUT, cellActions, [ + 'filterIn', + 'filterOut', + 'addToTimeline', + 'toggleColumn', + 'showTopN', + 'copyToClipboard', + ]); }; -/** - * This actions show up in when a details flyout is open from a table field. - */ -const registerTableFlyoutActions = ( +const registerCellActionsTrigger = ( uiActions: UiActionsStart, - store: SecurityAppStore, - history: H.History, - services: StartServices + triggerId: SecurityCellActionsTrigger, + cellActions: SecurityCellActions, + actionsOrder: SecurityCellActionName[] ) => { - const filterInAction = createDefaultFilterInAction({ - order: 10, - }); - const filterOutAction = createDefaultFilterOutAction({ - order: 20, - }); - - const addToTimeline = createDefaultAddToTimelineAction({ store, order: 30 }); - const toggleAction = createDefaultToggleColumnAction({ store, order: 35 }); - const showTopNAction = createDefaultShowTopNAction({ store, history, services, order: 40 }); - const copyAction = createDefaultCopyToClipboardAction({ order: 50 }); + uiActions.registerTrigger({ id: triggerId }); - uiActions.registerTrigger({ - id: CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, + actionsOrder.forEach((actionName, order) => { + const actionFactory = cellActions[actionName]; + uiActions.addTriggerAction( + triggerId, + actionFactory({ id: `${triggerId}-${actionName}`, order }) + ); }); - - uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, copyAction); - uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, filterInAction); - uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, filterOutAction); - uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, showTopNAction); - uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, addToTimeline); - uiActions.addTriggerAction(CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER, toggleAction); }; diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx b/x-pack/plugins/security_solution/public/actions/show_top_n/cell_action/show_top_n.test.tsx similarity index 77% rename from x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx rename to x-pack/plugins/security_solution/public/actions/show_top_n/cell_action/show_top_n.test.tsx index a2e047bc5e415..58754bdf8bbbd 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.test.tsx +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/cell_action/show_top_n.test.tsx @@ -6,8 +6,6 @@ */ import type { CellActionExecutionContext } from '@kbn/cell-actions'; -import { Subject } from 'rxjs'; -import { APP_UI_ID } from '../../../../common/constants'; import { createSecuritySolutionStorageMock, kibanaObservable, @@ -16,7 +14,7 @@ import { } from '../../../common/mock'; import { mockHistory } from '../../../common/mock/router'; import { createStore } from '../../../common/store'; -import { createShowTopNAction } from './show_top_n'; +import { createShowTopNCellActionFactory } from './show_top_n'; import React from 'react'; import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; @@ -26,41 +24,32 @@ jest.mock('../show_top_n_component', () => ({ TopNAction: () => {'TEST COMPONENT'}, })); -const currentAppId$ = new Subject(); -const startServices = createStartServicesMock(); - -const mockServices = { - ...startServices, - application: { - ...startServices.application, - currentAppId$: currentAppId$.asObservable(), - }, -}; - +const mockServices = createStartServicesMock(); const { storage } = createSecuritySolutionStorageMock(); const mockStore = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage); const element = document.createElement('div'); document.body.appendChild(element); -describe('createShowTopNAction', () => { - const showTopNAction = createShowTopNAction({ +describe('createShowTopNCellActionFactory', () => { + const showTopNActionFactory = createShowTopNCellActionFactory({ store: mockStore, history: mockHistory, - order: 1, services: mockServices, }); + const showTopNAction = showTopNActionFactory({ id: 'testAction' }); + const context = { field: { name: 'user.name', value: 'the-value', type: 'keyword', aggregatable: true }, trigger: { id: 'trigger' }, nodeRef: { current: element, }, + metadata: undefined, } as CellActionExecutionContext; beforeEach(() => { jest.clearAllMocks(); - currentAppId$.next(APP_UI_ID); }); it('should return display name', () => { @@ -76,13 +65,7 @@ describe('createShowTopNAction', () => { expect(await showTopNAction.isCompatible(context)).toEqual(true); }); - it('should return false if not in Security', async () => { - currentAppId$.next('not security'); - expect(await showTopNAction.isCompatible(context)).toEqual(false); - }); - it('should return false if field type does not support aggregations', async () => { - currentAppId$.next('not security'); expect( await showTopNAction.isCompatible({ ...context, field: { ...context.field, type: 'text' } }) ).toEqual(false); diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx b/x-pack/plugins/security_solution/public/actions/show_top_n/cell_action/show_top_n.tsx similarity index 73% rename from x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx rename to x-pack/plugins/security_solution/public/actions/show_top_n/cell_action/show_top_n.tsx index 215033409a46f..557210286678e 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/default/show_top_n.tsx +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/cell_action/show_top_n.tsx @@ -4,23 +4,22 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { i18n } from '@kbn/i18n'; -import type { CellAction, CellActionExecutionContext } from '@kbn/cell-actions'; -import ReactDOM, { unmountComponentAtNode } from 'react-dom'; import React from 'react'; - +import ReactDOM, { unmountComponentAtNode } from 'react-dom'; import type * as H from 'history'; -import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { Provider } from 'react-redux'; import { Router } from 'react-router-dom'; - +import { i18n } from '@kbn/i18n'; +import { createCellActionFactory, type CellActionTemplate } from '@kbn/cell-actions'; +import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider } from '../../../common/lib/kibana'; import { APP_NAME, DEFAULT_DARK_MODE } from '../../../../common/constants'; import type { SecurityAppStore } from '../../../common/store'; -import { fieldHasCellActions, isInSecurityApp } from '../../utils'; +import { fieldHasCellActions } from '../../utils'; import { TopNAction } from '../show_top_n_component'; import type { StartServices } from '../../../types'; +import type { SecurityCellAction } from '../../types'; +import { SecurityCellActionType } from '../../constants'; const SHOW_TOP = (fieldName: string) => i18n.translate('xpack.securitySolution.actions.showTopTooltip', { @@ -28,42 +27,24 @@ const SHOW_TOP = (fieldName: string) => defaultMessage: `Show top {fieldName}`, }); -export const ACTION_ID = 'security_showTopN'; const ICON = 'visBarVertical'; const UNSUPPORTED_FIELD_TYPES = ['date', 'text']; -export interface ShowTopNActionContext extends CellActionExecutionContext { - metadata?: { - scopeId?: string; - }; -} - -export const createShowTopNAction = ({ - store, - history, - services, - order, -}: { - store: SecurityAppStore; - history: H.History; - services: StartServices; - order?: number; -}): CellAction => { - let currentAppId: string | undefined; - - services.application.currentAppId$.subscribe((appId) => { - currentAppId = appId; - }); - - return { - id: ACTION_ID, - type: ACTION_ID, - order, - getIconType: (): string => ICON, +export const createShowTopNCellActionFactory = createCellActionFactory( + ({ + store, + history, + services, + }: { + store: SecurityAppStore; + history: H.History; + services: StartServices; + }): CellActionTemplate => ({ + type: SecurityCellActionType.SHOW_TOP_N, + getIconType: () => ICON, getDisplayName: ({ field }) => SHOW_TOP(field.name), getDisplayNameTooltip: ({ field }) => SHOW_TOP(field.name), isCompatible: async ({ field }) => - isInSecurityApp(currentAppId) && fieldHasCellActions(field.name) && !UNSUPPORTED_FIELD_TYPES.includes(field.type) && !!field.aggregatable, @@ -97,5 +78,5 @@ export const createShowTopNAction = ({ ReactDOM.render(element, node); }, - }; -}; + }) +); diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/index.ts b/x-pack/plugins/security_solution/public/actions/show_top_n/index.ts index 42c14331aa06a..df848ce8e474c 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/index.ts +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { createShowTopNAction as createDefaultShowTopNAction } from './default/show_top_n'; +export { createShowTopNCellActionFactory } from './cell_action/show_top_n'; diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.test.tsx b/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.test.tsx index 1737a65596a78..73c56b983b377 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.test.tsx +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.test.tsx @@ -35,6 +35,7 @@ const context = { nodeRef: { current: element, }, + metadata: undefined, } as CellActionExecutionContext; describe('TopNAction', () => { diff --git a/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.tsx b/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.tsx index 7d426b03ec605..bc231ec106975 100644 --- a/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.tsx +++ b/x-pack/plugins/security_solution/public/actions/show_top_n/show_top_n_component.tsx @@ -14,7 +14,7 @@ import { StatefulTopN } from '../../common/components/top_n'; import { useGetUserCasesPermissions } from '../../common/lib/kibana'; import { APP_ID } from '../../../common/constants'; import { getScopeFromPath, useSourcererDataView } from '../../common/containers/sourcerer'; -import type { ShowTopNActionContext } from './default/show_top_n'; +import type { SecurityCellActionExecutionContext } from '../types'; export const TopNAction = ({ onClose, @@ -22,7 +22,7 @@ export const TopNAction = ({ casesService, }: { onClose: () => void; - context: ShowTopNActionContext; + context: SecurityCellActionExecutionContext; casesService: CasesUiStart; }) => { const { pathname } = useLocation(); diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.test.ts b/x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.test.ts similarity index 84% rename from x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.test.ts rename to x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.test.ts index a62e0cedff19a..fffd6a21a9b42 100644 --- a/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.test.ts +++ b/x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.test.ts @@ -6,19 +6,13 @@ */ import type { SecurityAppStore } from '../../../common/store/types'; -import { KibanaServices } from '../../../common/lib/kibana'; import { TableId } from '../../../../common/types'; -import { createToggleColumnAction } from './toggle_column'; +import { createToggleColumnCellActionFactory } from './toggle_column'; import type { CellActionExecutionContext } from '@kbn/cell-actions'; import { mockGlobalState } from '../../../common/mock'; import { dataTableActions } from '../../../common/store/data_table'; -jest.mock('../../../common/lib/kibana'); - -const mockWarningToast = jest.fn(); -KibanaServices.get().notifications.toasts.addWarning = mockWarningToast; - const mockDispatch = jest.fn(); const mockGetState = jest.fn().mockReturnValue(mockGlobalState); const store = { @@ -35,8 +29,9 @@ const context = { }, } as unknown as CellActionExecutionContext; -describe('Default createToggleColumnAction', () => { - const toggleColumnAction = createToggleColumnAction({ store, order: 1 }); +describe('createToggleColumnCellActionFactory', () => { + const toggleColumnActionFactory = createToggleColumnCellActionFactory({ store }); + const toggleColumnAction = toggleColumnActionFactory({ id: 'testAction' }); beforeEach(() => { jest.clearAllMocks(); @@ -80,7 +75,6 @@ describe('Default createToggleColumnAction', () => { id: TableId.test, }) ); - expect(mockWarningToast).not.toHaveBeenCalled(); }); it('should add column', async () => { @@ -97,7 +91,6 @@ describe('Default createToggleColumnAction', () => { index: 1, }) ); - expect(mockWarningToast).not.toHaveBeenCalled(); }); }); }); diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.ts b/x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.ts new file mode 100644 index 0000000000000..feb555851ba8d --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/toggle_column/cell_action/toggle_column.ts @@ -0,0 +1,84 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { createCellActionFactory, type CellActionTemplate } from '@kbn/cell-actions'; +import { fieldHasCellActions } from '../../utils'; +import type { SecurityAppStore } from '../../../common/store'; +import { getScopedActions, isInTableScope, isTimelineScope } from '../../../helpers'; +import { timelineDefaults } from '../../../timelines/store/timeline/defaults'; +import { defaultColumnHeaderType, tableDefaults } from '../../../common/store/data_table/defaults'; +import { timelineSelectors } from '../../../timelines/store/timeline'; +import { dataTableSelectors } from '../../../common/store/data_table'; +import { DEFAULT_COLUMN_MIN_WIDTH } from '../../../timelines/components/timeline/body/constants'; +import type { SecurityCellAction } from '../../types'; +import { SecurityCellActionType } from '../../constants'; + +const ICON = 'listAdd'; +const COLUMN_TOGGLE = i18n.translate('xpack.securitySolution.actions.toggleColumnToggle.label', { + defaultMessage: 'Toggle column in table', +}); +const NESTED_COLUMN = (field: string) => + i18n.translate('xpack.securitySolution.actions.toggleColumnToggle.nestedLabel', { + values: { field }, + defaultMessage: + 'The {field} field is an object, and is broken down into nested fields which can be added as columns', + }); + +export const createToggleColumnCellActionFactory = createCellActionFactory( + ({ store }: { store: SecurityAppStore }): CellActionTemplate => ({ + type: SecurityCellActionType.TOGGLE_COLUMN, + getIconType: () => ICON, + getDisplayName: () => COLUMN_TOGGLE, + getDisplayNameTooltip: ({ field, metadata }) => + metadata?.isObjectArray ? NESTED_COLUMN(field.name) : COLUMN_TOGGLE, + isCompatible: async ({ field, metadata }) => { + return ( + fieldHasCellActions(field.name) && + !!metadata?.scopeId && + (isTimelineScope(metadata.scopeId) || isInTableScope(metadata.scopeId)) + ); + }, + execute: async ({ metadata, field }) => { + const scopeId = metadata?.scopeId; + if (!scopeId) return; + + const scopedActions = getScopedActions(scopeId); + if (!scopedActions) { + return; + } + + const selector = isTimelineScope(scopeId) + ? timelineSelectors.getTimelineByIdSelector() + : dataTableSelectors.getTableByIdSelector(); + + const defaults = isTimelineScope(scopeId) ? timelineDefaults : tableDefaults; + const { columns } = selector(store.getState(), scopeId) ?? defaults; + + if (columns.some((c) => c.id === field.name)) { + store.dispatch( + scopedActions.removeColumn({ + columnId: field.name, + id: scopeId, + }) + ); + } else { + store.dispatch( + scopedActions.upsertColumn({ + column: { + columnHeaderType: defaultColumnHeaderType, + id: field.name, + initialWidth: DEFAULT_COLUMN_MIN_WIDTH, + }, + id: scopeId, + index: 1, + }) + ); + } + }, + }) +); diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts b/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts deleted file mode 100644 index 5ebdad769f1d9..0000000000000 --- a/x-pack/plugins/security_solution/public/actions/toggle_column/default/toggle_column.ts +++ /dev/null @@ -1,104 +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 { i18n } from '@kbn/i18n'; -import type { CellAction, CellActionExecutionContext } from '@kbn/cell-actions'; - -import { fieldHasCellActions } from '../../utils'; -import type { SecurityAppStore } from '../../../common/store'; -import { getScopedActions, isInTableScope, isTimelineScope } from '../../../helpers'; -import { timelineDefaults } from '../../../timelines/store/timeline/defaults'; -import { defaultColumnHeaderType, tableDefaults } from '../../../common/store/data_table/defaults'; -import { timelineSelectors } from '../../../timelines/store/timeline'; -import { dataTableSelectors } from '../../../common/store/data_table'; -import { DEFAULT_COLUMN_MIN_WIDTH } from '../../../timelines/components/timeline/body/constants'; - -export const ACTION_ID = 'security_toggleColumn'; -const ICON = 'listAdd'; - -export interface ShowTopNActionContext extends CellActionExecutionContext { - metadata?: { - scopeId?: string; - isObjectArray?: boolean; - }; -} - -export const COLUMN_TOGGLE = i18n.translate( - 'xpack.securitySolution.actions.toggleColumnToggle.label', - { - defaultMessage: 'Toggle column in table', - } -); - -export const NESTED_COLUMN = (field: string) => - i18n.translate('xpack.securitySolution.actions.toggleColumnToggle.nestedLabel', { - values: { field }, - defaultMessage: - 'The {field} field is an object, and is broken down into nested fields which can be added as columns', - }); - -export const createToggleColumnAction = ({ - store, - order, -}: { - store: SecurityAppStore; - order?: number; -}): CellAction => ({ - id: ACTION_ID, - type: ACTION_ID, - order, - getIconType: (): string => ICON, - getDisplayName: () => COLUMN_TOGGLE, - getDisplayNameTooltip: ({ field, metadata }) => - metadata?.isObjectArray ? NESTED_COLUMN(field.name) : COLUMN_TOGGLE, - isCompatible: async ({ field, metadata }) => { - return ( - fieldHasCellActions(field.name) && - !!metadata?.scopeId && - (isTimelineScope(metadata?.scopeId) || isInTableScope(metadata?.scopeId)) - ); - }, - execute: async ({ metadata, field }) => { - const scopeId = metadata?.scopeId; - - if (!scopeId) return; - - const selector = isTimelineScope(scopeId) - ? timelineSelectors.getTimelineByIdSelector() - : dataTableSelectors.getTableByIdSelector(); - - const defaults = isTimelineScope(scopeId) ? timelineDefaults : tableDefaults; - const { columns } = selector(store.getState(), scopeId) ?? defaults; - - const scopedActions = getScopedActions(scopeId); - - if (!scopedActions) { - return; - } - - if (columns.some((c) => c.id === field.name)) { - store.dispatch( - scopedActions.removeColumn({ - columnId: field.name, - id: scopeId, - }) - ); - } else { - store.dispatch( - scopedActions.upsertColumn({ - column: { - columnHeaderType: defaultColumnHeaderType, - id: field.name, - initialWidth: DEFAULT_COLUMN_MIN_WIDTH, - }, - id: scopeId, - index: 1, - }) - ); - } - }, -}); diff --git a/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx b/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx index da04abfda3734..4e1fb2a03fc46 100644 --- a/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx +++ b/x-pack/plugins/security_solution/public/actions/toggle_column/index.tsx @@ -5,4 +5,4 @@ * 2.0. */ -export { createToggleColumnAction as createDefaultToggleColumnAction } from './default/toggle_column'; +export { createToggleColumnCellActionFactory } from './cell_action/toggle_column'; diff --git a/x-pack/plugins/security_solution/public/actions/types.ts b/x-pack/plugins/security_solution/public/actions/types.ts new file mode 100644 index 0000000000000..da6b2cc3919a9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/actions/types.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CellAction, CellActionExecutionContext, CellActionFactory } from '@kbn/cell-actions'; + +export interface SecurityMetadata extends Record { + /** + * `metadata.scopeId` is used by some actions (e.g. filterIn/Out) to discriminate the Timeline + * and the DataTables scope (alerts, events, rules preview..) in the actions execution. + * It is required when cellActions are rendered inside the Timeline or dataTables, + * it can be omitted otherwise. + */ + scopeId?: string; + /** + * `metadata.isObjectArray` is used to display extended tooltip information + * for fields that have multiple values + */ + isObjectArray?: boolean; + /** + * `metadata.negateFilters` is used by some actions (e.g. filterIn/Out and addToTimeline) to negate + * the usual filtering behavior. This is used in special cases where the displayed value is computed + * and we need all the filtering actions to perform the opposite (negate) operation. + */ + negateFilters?: boolean; +} + +export interface SecurityCellActionExecutionContext extends CellActionExecutionContext { + metadata: SecurityMetadata | undefined; +} +export type SecurityCellAction = CellAction; + +// All security cell actions names +export type SecurityCellActionName = + | 'filterIn' + | 'filterOut' + | 'addToTimeline' + | 'showTopN' + | 'copyToClipboard' + | 'toggleColumn'; + +export type SecurityCellActions = Record; diff --git a/x-pack/plugins/security_solution/public/actions/utils.ts b/x-pack/plugins/security_solution/public/actions/utils.ts index 4544d180175e2..74b40334284cf 100644 --- a/x-pack/plugins/security_solution/public/actions/utils.ts +++ b/x-pack/plugins/security_solution/public/actions/utils.ts @@ -7,10 +7,9 @@ import type { IEmbeddable } from '@kbn/embeddable-plugin/public'; import { LENS_EMBEDDABLE_TYPE, type Embeddable as LensEmbeddable } from '@kbn/lens-plugin/public'; import type { Serializable } from '@kbn/utility-types'; - import { APP_UI_ID } from '../../common/constants'; -/** all cell actions are disabled for these fields */ +// All cell actions are disabled for these fields in Security const FIELDS_WITHOUT_CELL_ACTIONS = [ 'signal.rule.risk_score', 'kibana.alert.risk_score', diff --git a/x-pack/plugins/security_solution/public/common/components/cell_actions/index.ts b/x-pack/plugins/security_solution/public/common/components/cell_actions/index.ts new file mode 100644 index 0000000000000..23a11aa738443 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/cell_actions/index.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 { CellActions, useDataGridColumnsCellActions } from '@kbn/cell-actions'; +import type { + CellActionsProps, + UseDataGridColumnsCellActions, + UseDataGridColumnsCellActionsProps, +} from '@kbn/cell-actions'; +import type { SecurityMetadata } from '../../../actions/types'; +import { SecurityCellActionsTrigger, SecurityCellActionType } from '../../../actions/constants'; + +// bridge exports for convenience +export * from '@kbn/cell-actions'; +export { SecurityCellActionsTrigger, SecurityCellActionType }; + +export interface SecurityCellActionsProps extends CellActionsProps { + triggerId: string; // can not use SecurityCellActionsTrigger, React.FC Validation throws error for some reason + disabledActionTypes?: string[]; // can not use SecurityCellActionType[], React.FC Validation throws error for some reason + metadata?: SecurityMetadata; +} +export interface UseDataGridColumnsSecurityCellActionsProps + extends UseDataGridColumnsCellActionsProps { + triggerId: SecurityCellActionsTrigger; + disabledActionTypes?: SecurityCellActionType[]; + metadata?: SecurityMetadata; +} + +// same components with security cell actions types +export const SecurityCellActions: React.FC = CellActions; +export const useDataGridColumnsSecurityCellActions: UseDataGridColumnsCellActions = + useDataGridColumnsCellActions; diff --git a/x-pack/plugins/security_solution/public/common/components/data_table/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/data_table/index.test.tsx index 527eb6e3d0ab9..86cf4eabeba1b 100644 --- a/x-pack/plugins/security_solution/public/common/components/data_table/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/data_table/index.test.tsx @@ -18,7 +18,7 @@ import { mockBrowserFields } from '../../containers/source/mock'; import { getMappedNonEcsValue } from '../../../timelines/components/timeline/body/data_driven_columns'; import type { CellValueElementProps } from '../../../../common/types'; import { TableId } from '../../../../common/types'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../common/constants'; +import { SecurityCellActionsTrigger } from '../cell_actions'; const mockDispatch = jest.fn(); jest.mock('react-redux', () => ({ @@ -184,7 +184,7 @@ describe('DataTable', () => { wrapper.update(); expect(mockUseDataGridColumnsCellActions).toHaveBeenCalledWith({ - triggerId: CELL_ACTIONS_DEFAULT_TRIGGER, + triggerId: SecurityCellActionsTrigger.DEFAULT, fields: [ { name: '@timestamp', diff --git a/x-pack/plugins/security_solution/public/common/components/data_table/index.tsx b/x-pack/plugins/security_solution/public/common/components/data_table/index.tsx index bfddac06f64b5..a48bf61f4ac93 100644 --- a/x-pack/plugins/security_solution/public/common/components/data_table/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/data_table/index.tsx @@ -26,9 +26,10 @@ import type { EuiTheme } from '@kbn/kibana-react-plugin/common'; import type { FieldBrowserOptions } from '@kbn/triggers-actions-ui-plugin/public'; import { i18n } from '@kbn/i18n'; import { - useDataGridColumnsCellActions, - type UseDataGridColumnsCellActionsProps, -} from '@kbn/cell-actions'; + useDataGridColumnsSecurityCellActions, + SecurityCellActionsTrigger, + type UseDataGridColumnsSecurityCellActionsProps, +} from '../cell_actions'; import type { CellValueElementProps, ColumnHeaderOptions, @@ -49,7 +50,6 @@ import { getPageRowIndex } from './pagination'; import { UnitCount } from '../toolbar/unit'; import { useShallowEqualSelector } from '../../hooks/use_selector'; import { tableDefaults } from '../../store/data_table/defaults'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../common/constants'; const DATA_TABLE_ARIA_LABEL = i18n.translate('xpack.securitySolution.dataTable.ariaLabel', { defaultMessage: 'Alerts', @@ -303,8 +303,8 @@ export const DataTableComponent = React.memo( [dispatch, id] ); - const columnsCellActionsProps = useMemo((): UseDataGridColumnsCellActionsProps => { - const fields: UseDataGridColumnsCellActionsProps['fields'] = disableCellActions + const columnsCellActionsProps = useMemo(() => { + const fields = disableCellActions ? [] : columnHeaders.map((column) => ({ name: column.id, @@ -317,7 +317,7 @@ export const DataTableComponent = React.memo( })); return { - triggerId: CELL_ACTIONS_DEFAULT_TRIGGER, + triggerId: SecurityCellActionsTrigger.DEFAULT, fields, metadata: { scopeId: id, @@ -326,7 +326,7 @@ export const DataTableComponent = React.memo( }; }, [disableCellActions, columnHeaders, data, id]); - const columnsCellActions = useDataGridColumnsCellActions(columnsCellActionsProps); + const columnsCellActions = useDataGridColumnsSecurityCellActions(columnsCellActionsProps); const columnsWithCellActions: EuiDataGridColumn[] = useMemo( () => diff --git a/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx b/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx index 7cf91c27d13b7..7f68eb73a2355 100644 --- a/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx +++ b/x-pack/plugins/security_solution/public/common/components/event_details/columns.tsx @@ -10,14 +10,13 @@ import { get } from 'lodash'; import memoizeOne from 'memoize-one'; import React from 'react'; import styled from 'styled-components'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { SecurityCellActions, CellActionsMode, SecurityCellActionsTrigger } from '../cell_actions'; import type { BrowserFields } from '../../containers/source'; import * as i18n from './translations'; import type { EventFieldsData } from './types'; import type { BrowserField } from '../../../../common/search_strategy'; import { FieldValueCell } from './table/field_value_cell'; import { FieldNameCell } from './table/field_name_cell'; -import { CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER } from '../../../../common/constants'; const HoverActionsContainer = styled(EuiPanel)` align-items: center; @@ -74,14 +73,14 @@ export const getColumns = ({ ); return ( - = ({ {value && !isReadOnly && ( - theme.eui.euiSizeS}; @@ -88,14 +91,14 @@ export const OverviewCardWithActions: React.FC = ( {children} - = ({ values={values} /> {scopeId !== TimelineId.active && !isReadOnly && hoverActionsEnabled && ( - 0 ? values[0] : '', type: data.type, aggregatable: fieldFromBrowserField?.aggregatable, }} - triggerId={CELL_ACTIONS_DETAILS_FLYOUT_TRIGGER} + triggerId={SecurityCellActionsTrigger.DETAILS_FLYOUT} mode={CellActionsMode.INLINE} visibleCellActions={3} metadata={{ scopeId }} diff --git a/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap index 3c834b31ddfaa..941078e41f917 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/ml/__snapshots__/entity.test.tsx.snap @@ -11,7 +11,7 @@ exports[`entity_draggable renders correctly against snapshot 1`] = ` } } mode="hover" - triggerId="security-solution-default-cellActions" + triggerId="security-default-cellActions" visibleCellActions={5} > entity-name: "entity-value" diff --git a/x-pack/plugins/security_solution/public/common/components/ml/entity.tsx b/x-pack/plugins/security_solution/public/common/components/ml/entity.tsx index 5b9f01628570d..00a8c0cdb3f39 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/entity.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml/entity.tsx @@ -6,8 +6,7 @@ */ import React from 'react'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../common/constants'; +import { SecurityCellActions, CellActionsMode, SecurityCellActionsTrigger } from '../cell_actions'; interface Props { entityName: string; @@ -16,19 +15,19 @@ interface Props { export const EntityComponent: React.FC = ({ entityName, entityValue }) => { return ( - {`${entityName}: "${entityValue}"`} - + ); }; diff --git a/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap index c244dd622d8a2..08e1bbe2bfc80 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/ml/score/__snapshots__/score.test.tsx.snap @@ -11,7 +11,7 @@ exports[`draggable_score renders correctly against snapshot 1`] = ` } } mode="hover" - triggerId="security-solution-default-cellActions" + triggerId="security-default-cellActions" visibleCellActions={5} > 17 @@ -29,7 +29,7 @@ exports[`draggable_score renders correctly against snapshot when the index is no } } mode="hover" - triggerId="security-solution-default-cellActions" + triggerId="security-default-cellActions" visibleCellActions={5} > 17 diff --git a/x-pack/plugins/security_solution/public/common/components/ml/score/score.tsx b/x-pack/plugins/security_solution/public/common/components/ml/score/score.tsx index 18596ec2c16b8..3ad058dd2ab33 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/score/score.tsx +++ b/x-pack/plugins/security_solution/public/common/components/ml/score/score.tsx @@ -6,11 +6,14 @@ */ import React from 'react'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../cell_actions'; import type { Anomaly } from '../types'; import { Spacer } from '../../page'; import { getScoreString } from './score_health'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; export const ScoreComponent = ({ index = 0, @@ -22,7 +25,7 @@ export const ScoreComponent = ({ const scoreString = getScoreString(score.severity); return ( - <> @@ -42,7 +45,7 @@ export const ScoreComponent = ({ )} {scoreString} - + ); }; diff --git a/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx b/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx index c6fa5291e1e61..6705cc9b871fe 100644 --- a/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx +++ b/x-pack/plugins/security_solution/public/common/components/tables/helpers.tsx @@ -8,11 +8,10 @@ import React, { useCallback, useState } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiLink, EuiPopover, EuiToolTip, EuiText, EuiTextColor } from '@elastic/eui'; import styled from 'styled-components'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { SecurityCellActions, CellActionsMode, SecurityCellActionsTrigger } from '../cell_actions'; import { escapeDataProviderId } from '../drag_and_drop/helpers'; import { defaultToEmptyTag, getEmptyTagValue } from '../empty_value'; import { MoreRowItems } from '../page'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../common/constants'; import { MoreContainer } from '../../../timelines/components/field_renderers/field_renderers'; const Subtext = styled.div` @@ -44,12 +43,12 @@ export const getRowItemsWithActions = ({ const visibleItems = values.slice(0, displayCount).map((value, index) => { const id = escapeDataProviderId(`${idPrefix}-${fieldName}-${value}-${index}`); return ( - <>{render ? render(value) : defaultToEmptyTag(value)} - + ); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_by_type_panel/columns.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_by_type_panel/columns.tsx index 63bac25889831..f8df50e9f67d4 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_by_type_panel/columns.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_kpis/alerts_by_type_panel/columns.tsx @@ -7,15 +7,18 @@ import React from 'react'; import { EuiHealth, EuiText } from '@elastic/eui'; import { ALERT_RULE_NAME } from '@kbn/rule-data-utils'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import type { EuiBasicTableColumn } from '@elastic/eui'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; import type { AlertsTypeData, AlertType } from './types'; import { DefaultDraggable } from '../../../../common/components/draggables'; import { FormattedCount } from '../../../../common/components/formatted_number'; import { ALERTS_HEADERS_RULE_NAME } from '../../alerts_table/translations'; import { ALERT_TYPE_COLOR, ALERT_TYPE_LABEL } from './helpers'; import { COUNT_TABLE_TITLE } from '../alerts_count_panel/translations'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; import * as i18n from './translations'; export const getAlertsTypeTableColumns = (): Array> => [ @@ -48,11 +51,11 @@ export const getAlertsTypeTableColumns = (): Array - {ALERT_TYPE_LABEL[type as AlertType]} - + ); diff --git a/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx index 9142ac1b2a226..3d7729a5e9ac7 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx @@ -7,7 +7,11 @@ import React from 'react'; import { EuiIcon, EuiLink, EuiText, EuiToolTip } from '@elastic/eui'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; import { getEmptyTagValue } from '../../../../common/components/empty_value'; import { HostDetailsLink } from '../../../../common/components/links'; import type { HostRiskScoreColumns } from '.'; @@ -16,7 +20,6 @@ import { HostsTableType } from '../../store/model'; import type { RiskSeverity } from '../../../../../common/search_strategy'; import { RiskScoreFields } from '../../../../../common/search_strategy'; import { RiskScore } from '../../../components/risk_score/severity/common'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; export const getHostRiskScoreColumns = ({ dispatchSeverityUpdate, @@ -32,11 +35,11 @@ export const getHostRiskScoreColumns = ({ render: (hostName) => { if (hostName != null && hostName.length > 0) { return ( - - + ); } return getEmptyTagValue(); diff --git a/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx index 188d5eb8b3809..1dcff6fbb0afd 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx @@ -7,7 +7,11 @@ import { EuiIcon, EuiLink, EuiText, EuiToolTip } from '@elastic/eui'; import React from 'react'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; import { getEmptyTagValue } from '../../../../common/components/empty_value'; import { HostDetailsLink } from '../../../../common/components/links'; import { FormattedRelativePreferenceDate } from '../../../../common/components/formatted_date'; @@ -16,7 +20,6 @@ import * as i18n from './translations'; import type { Maybe, RiskSeverity } from '../../../../../common/search_strategy'; import { VIEW_HOSTS_BY_SEVERITY } from '../host_risk_score_table/translations'; import { RiskScore } from '../../../components/risk_score/severity/common'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; export const getHostsColumns = ( showRiskColumn: boolean, @@ -32,11 +35,11 @@ export const getHostsColumns = ( render: (hostName) => { if (hostName != null && hostName.length > 0) { return ( - - + ); } return getEmptyTagValue(); @@ -89,11 +92,11 @@ export const getHostsColumns = ( render: (hostOsName) => { if (hostOsName != null) { return ( - {hostOsName} - + ); } return getEmptyTagValue(); @@ -116,11 +119,11 @@ export const getHostsColumns = ( render: (hostOsVersion) => { if (hostOsVersion != null) { return ( - {hostOsVersion} - + ); } return getEmptyTagValue(); diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx index 72e4268eb399e..c343742143ac2 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx @@ -8,7 +8,11 @@ import numeral from '@elastic/numeral'; import React from 'react'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; import type { NetworkDnsItem } from '../../../../../common/search_strategy'; import { NetworkDnsFields } from '../../../../../common/search_strategy'; import { escapeDataProviderId } from '../../../../common/components/drag_and_drop/helpers'; @@ -17,7 +21,7 @@ import type { Columns } from '../../../components/paginated_table'; import { PreferenceFormattedBytes } from '../../../../common/components/formatted_bytes'; import * as i18n from './translations'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; + export type NetworkDnsColumns = [ Columns, Columns, @@ -36,12 +40,12 @@ export const getNetworkDnsColumns = (): NetworkDnsColumns => [ render: (dnsName) => { if (dnsName != null) { return ( - [ }} > {defaultToEmptyTag(dnsName)} - + ); } else { return getEmptyTagValue(); diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx index 2505337e47c3e..d7b443e1ab326 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx @@ -9,7 +9,11 @@ import { get } from 'lodash/fp'; import numeral from '@elastic/numeral'; import React from 'react'; import type { DataViewBase } from '@kbn/es-query'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; import { CountryFlagAndName } from '../source_destination/country_flag'; import type { NetworkTopCountriesEdges, @@ -22,7 +26,6 @@ import { getEmptyTagValue } from '../../../../common/components/empty_value'; import type { Columns } from '../../../components/paginated_table'; import * as i18n from './translations'; import { PreferenceFormattedBytes } from '../../../../common/components/formatted_bytes'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; export type NetworkTopCountriesColumns = [ Columns, @@ -55,12 +58,12 @@ export const getNetworkTopCountriesColumns = ( const id = escapeDataProviderId(`${tableId}-table-${flowTarget}-country-${geo}`); if (geo != null) { return ( - - + ); } else { return getEmptyTagValue(); diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx index cdb323640972d..6d11df641286b 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx @@ -9,7 +9,11 @@ import { get } from 'lodash/fp'; import numeral from '@elastic/numeral'; import React from 'react'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; import { CountryFlag } from '../source_destination/country_flag'; import type { AutonomousSystemItem, @@ -25,7 +29,6 @@ import type { Columns } from '../../../components/paginated_table'; import * as i18n from './translations'; import { getRowItemsWithActions } from '../../../../common/components/tables/helpers'; import { PreferenceFormattedBytes } from '../../../../common/components/formatted_bytes'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; export type NetworkTopNFlowColumns = [ Columns, @@ -63,12 +66,12 @@ export const getNetworkTopNFlowColumns = ( if (ip != null) { return ( <> - - + {geo && ( - {' '} {geo} - + )} ); diff --git a/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx b/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx index f7d605789b082..2e9771da07de6 100644 --- a/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx @@ -13,7 +13,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiSpacer } from '@elasti import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { buildEsQuery } from '@kbn/es-query'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import { AlertsByStatus } from '../../../../overview/components/detection_response/alerts_by_status'; import { useSignalIndex } from '../../../../detections/containers/detection_engine/alerts/use_signal_index'; import { InputsModelId } from '../../../../common/store/inputs/constants'; @@ -53,7 +52,11 @@ import { useAlertsPrivileges } from '../../../../detections/containers/detection import { navTabsNetworkDetails } from './nav_tabs'; import { NetworkDetailsTabs } from './details_tabs'; import { useInstalledSecurityJobNameById } from '../../../../common/components/ml/hooks/use_installed_security_jobs'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../../common/components/cell_actions'; export { getTrailingBreadcrumbs } from './utils'; @@ -178,14 +181,14 @@ const NetworkDetailsComponent: React.FC = () => { /> } title={ - {ip} - + } > diff --git a/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx index b2734cdf0513b..3fd6d86cc0b92 100644 --- a/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx @@ -7,7 +7,11 @@ import React from 'react'; import { EuiIcon, EuiLink, EuiText, EuiToolTip } from '@elastic/eui'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; +import { + SecurityCellActions, + SecurityCellActionsTrigger, + CellActionsMode, +} from '../../../../common/components/cell_actions'; import { escapeDataProviderId } from '../../../../common/components/drag_and_drop/helpers'; import { getEmptyTagValue } from '../../../../common/components/empty_value'; import type { UserRiskScoreColumns } from '.'; @@ -17,7 +21,6 @@ import type { RiskSeverity } from '../../../../../common/search_strategy'; import { RiskScoreFields } from '../../../../../common/search_strategy'; import { UserDetailsLink } from '../../../../common/components/links'; import { UsersTableType } from '../../store/model'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; export const getUserRiskScoreColumns = ({ dispatchSeverityUpdate, @@ -34,12 +37,12 @@ export const getUserRiskScoreColumns = ({ if (userName != null && userName.length > 0) { const id = escapeDataProviderId(`user-risk-score-table-userName-${userName}`); return ( - - + ); } return getEmptyTagValue(); diff --git a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx index 8cf150387c1e9..141ce39008928 100644 --- a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/risk_score/columns.tsx @@ -9,7 +9,6 @@ import React from 'react'; import type { EuiBasicTableColumn } from '@elastic/eui'; import { EuiLink, EuiIcon, EuiToolTip } from '@elastic/eui'; import { get } from 'lodash/fp'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import styled from 'styled-components'; import { UsersTableType } from '../../../../explore/users/store/model'; import { getEmptyTagValue } from '../../../../common/components/empty_value'; @@ -24,14 +23,16 @@ import type { import { RiskScoreEntity, RiskScoreFields } from '../../../../../common/search_strategy'; import * as i18n from './translations'; import { FormattedCount } from '../../../../common/components/formatted_number'; -import { CELL_ACTIONS_DEFAULT_TRIGGER } from '../../../../../common/constants'; -import { ACTION_ID as FILTER_IN_ACTION_ID } from '../../../../actions/filter/default/filter_in'; -import { ACTION_ID as FILTER_OUT_ACTION_ID } from '../../../../actions/filter/default/filter_out'; -import { ACTION_ID as SHOW_TOP_N_ACTION_ID } from '../../../../actions/show_top_n/default/show_top_n'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, + SecurityCellActionType, +} from '../../../../common/components/cell_actions'; type HostRiskScoreColumns = Array>; -const StyledCellActions = styled(CellActions)` +const StyledCellActions = styled(SecurityCellActions)` padding-left: ${({ theme }) => theme.eui.euiSizeS}; `; @@ -55,10 +56,13 @@ export const getRiskScoreColumns = ( value: entityName, type: 'keyword', }} - triggerId={CELL_ACTIONS_DEFAULT_TRIGGER} + triggerId={SecurityCellActionsTrigger.DEFAULT} mode={CellActionsMode.INLINE} visibleCellActions={2} - disabledActions={[SHOW_TOP_N_ACTION_ID, FILTER_IN_ACTION_ID, FILTER_OUT_ACTION_ID]} + disabledActionTypes={[ + SecurityCellActionType.FILTER, + SecurityCellActionType.SHOW_TOP_N, + ]} /> ) : ( @@ -70,9 +74,12 @@ export const getRiskScoreColumns = ( value: entityName, type: 'keyword', }} - triggerId={CELL_ACTIONS_DEFAULT_TRIGGER} + triggerId={SecurityCellActionsTrigger.DEFAULT} mode={CellActionsMode.INLINE} - disabledActions={[SHOW_TOP_N_ACTION_ID, FILTER_IN_ACTION_ID, FILTER_OUT_ACTION_ID]} + disabledActionTypes={[ + SecurityCellActionType.FILTER, + SecurityCellActionType.SHOW_TOP_N, + ]} /> ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx index ed02581695834..6238392e888be 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/field_renderers.tsx @@ -11,8 +11,12 @@ import { getOr } from 'lodash/fp'; import React, { useCallback, Fragment, useMemo, useState, useContext } from 'react'; import styled from 'styled-components'; -import { CellActions, CellActionsMode } from '@kbn/cell-actions'; import type { HostEcs } from '@kbn/securitysolution-ecs'; +import { + SecurityCellActions, + CellActionsMode, + SecurityCellActionsTrigger, +} from '../../../common/components/cell_actions'; import type { AutonomousSystem, FlowTarget, @@ -26,10 +30,6 @@ import { FormattedRelativePreferenceDate } from '../../../common/components/form import { HostDetailsLink, ReputationLink, WhoIsLink } from '../../../common/components/links'; import { Spacer } from '../../../common/components/page'; import * as i18n from '../../../explore/network/components/details/translations'; -import { - CELL_ACTIONS_DEFAULT_TRIGGER, - CELL_ACTIONS_TIMELINE_TRIGGER, -} from '../../../../common/constants'; import { TimelineContext } from '../timeline'; const DraggableContainerFlexGroup = styled(EuiFlexGroup)` @@ -315,23 +315,24 @@ export const MoreContainer = React.memo( if (typeof value === 'string' && fieldName != null) { acc.push( - <>{render ? render(value) : defaultToEmptyTag(value)} - + ); } From 3d60b94351d04a03f9cfa14fcc2b9620f3f292ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20G=C3=B3mez?= Date: Wed, 15 Feb 2023 12:45:12 +0100 Subject: [PATCH 006/210] [Synthetics UI] Remove dead link to errors (#150838) Closes #150495 ## Summary Remove a dead link to a non existing errors page. Screen Shot 2023-02-07 at 4 14 44 PM --- .../overview/overview/overview_errors/overview_errors.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors.tsx index 636da377442fa..bfc57a2b55778 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors.tsx @@ -20,7 +20,6 @@ import { selectOverviewStatus } from '../../../../../state/overview_status'; import { OverviewErrorsSparklines } from './overview_errors_sparklines'; import { useAbsoluteDate } from '../../../../../hooks'; import { OverviewErrorsCount } from './overview_errors_count'; -import { ErrorsLink } from '../../../../common/links/view_errors'; export function OverviewErrors() { const { status } = useSelector(selectOverviewStatus); @@ -53,9 +52,6 @@ export function OverviewErrors() { monitorIds={status?.enabledMonitorQueryIds ?? []} /> - - - )} From 4076ecef2d4a6f88ae49731f00d8fcbf0adbcc11 Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Wed, 15 Feb 2023 13:32:46 +0100 Subject: [PATCH 007/210] [CM] Client-side content client: setup `update` `delete` `search` methods (#151041) Nothing to write home about - just a bit more boilerplate setup code. Method signatures and RPC related interfaces are expected to be changed later with an initial RPC layer implementation. - Follow-up to https://github.com/elastic/kibana/pull/150171, adding a dummy setup for `update` `delete` and `search` methods. **The `IN` and `OUT` args will be changes when we glue these to the rpc service and its types** - Also clean up unit tests a bit to have setup logic contained in a helper instead of scattered in global scope --- .../content_management/common/index.ts | 11 ++- src/plugins/content_management/common/rpc.ts | 78 ++++++++++++++++++- .../content_client/content_client.test.ts | 73 +++++++++++++++-- .../public/content_client/content_client.tsx | 27 ++++++- .../content_client_mutation_hooks.test.tsx | 64 +++++++++++---- .../content_client_mutation_hooks.tsx | 20 ++++- .../content_client_query_hooks.test.tsx | 42 +++++++--- .../content_client_query_hooks.tsx | 23 +++++- .../public/content_client/index.ts | 12 ++- .../public/crud_client/crud_client.mock.ts | 3 + .../public/crud_client/crud_client.ts | 5 +- .../public/rpc_client/rpc_client.ts | 24 +++++- 12 files changed, 339 insertions(+), 43 deletions(-) diff --git a/src/plugins/content_management/common/index.ts b/src/plugins/content_management/common/index.ts index 3746f26a2cf3d..1670078ae8d79 100644 --- a/src/plugins/content_management/common/index.ts +++ b/src/plugins/content_management/common/index.ts @@ -7,5 +7,14 @@ */ export { PLUGIN_ID, API_ENDPOINT } from './constants'; -export type { ProcedureSchemas, ProcedureName, GetIn, CreateIn } from './rpc'; +export type { + ProcedureSchemas, + ProcedureName, + GetIn, + CreateIn, + SearchIn, + SearchOut, + DeleteIn, + UpdateIn, +} from './rpc'; export { procedureNames, schemas as rpcSchemas } from './rpc'; diff --git a/src/plugins/content_management/common/rpc.ts b/src/plugins/content_management/common/rpc.ts index 8e03dc886a3f0..aa0d6a3b2e2c8 100644 --- a/src/plugins/content_management/common/rpc.ts +++ b/src/plugins/content_management/common/rpc.ts @@ -12,7 +12,7 @@ export interface ProcedureSchemas { out?: Type | false; } -export const procedureNames = ['get', 'create'] as const; +export const procedureNames = ['get', 'create', 'update', 'delete', 'search'] as const; export type ProcedureName = typeof procedureNames[number]; @@ -64,9 +64,85 @@ export interface CreateIn< options?: Options; } +// -- Update content +const updateSchemas: ProcedureSchemas = { + in: schema.object( + { + contentType: schema.string(), + data: schema.object({}, { unknowns: 'allow' }), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface UpdateIn< + T extends string = string, + Data extends object = Record, + Options extends object = any +> { + contentType: T; + data: Data; + options?: Options; +} + +// -- Delete content +const deleteSchemas: ProcedureSchemas = { + in: schema.object( + { + contentType: schema.string(), + data: schema.object({}, { unknowns: 'allow' }), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface DeleteIn< + T extends string = string, + Data extends object = Record, + Options extends object = any +> { + contentType: T; + data: Data; + options?: Options; +} + +// -- Search content +const searchSchemas: ProcedureSchemas = { + in: schema.object( + { + contentType: schema.string(), + data: schema.object({}, { unknowns: 'allow' }), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.object({ hits: schema.arrayOf(schema.object({}, { unknowns: 'allow' })) }), +}; + +export interface SearchIn< + T extends string = string, + Params extends object = Record, + Options extends object = any +> { + contentType: T; + params: Params; + options?: Options; +} + +export interface SearchOut> { + hits: Data[]; +} + export const schemas: { [key in ProcedureName]: ProcedureSchemas; } = { get: getSchemas, create: createSchemas, + update: updateSchemas, + delete: deleteSchemas, + search: searchSchemas, }; diff --git a/src/plugins/content_management/public/content_client/content_client.test.ts b/src/plugins/content_management/public/content_client/content_client.test.ts index e8465206b5e0b..02bd67a1da8da 100644 --- a/src/plugins/content_management/public/content_client/content_client.test.ts +++ b/src/plugins/content_management/public/content_client/content_client.test.ts @@ -8,20 +8,19 @@ import { lastValueFrom } from 'rxjs'; import { takeWhile, toArray } from 'rxjs/operators'; -import type { CrudClient } from '../crud_client'; import { createCrudClientMock } from '../crud_client/crud_client.mock'; import { ContentClient } from './content_client'; -import type { GetIn, CreateIn } from '../../common'; +import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common'; -let contentClient: ContentClient; -let crudClient: jest.Mocked; -beforeEach(() => { - crudClient = createCrudClientMock(); - contentClient = new ContentClient(() => crudClient); -}); +const setup = () => { + const crudClient = createCrudClientMock(); + const contentClient = new ContentClient(() => crudClient); + return { crudClient, contentClient }; +}; describe('#get', () => { it('calls rpcClient.get with input and returns output', async () => { + const { crudClient, contentClient } = setup(); const input: GetIn = { id: 'test', contentType: 'testType' }; const output = { test: 'test' }; crudClient.get.mockResolvedValueOnce(output); @@ -30,6 +29,7 @@ describe('#get', () => { }); it('calls rpcClient.get$ with input and returns output', async () => { + const { crudClient, contentClient } = setup(); const input: GetIn = { id: 'test', contentType: 'testType' }; const output = { test: 'test' }; crudClient.get.mockResolvedValueOnce(output); @@ -52,6 +52,7 @@ describe('#get', () => { describe('#create', () => { it('calls rpcClient.create with input and returns output', async () => { + const { crudClient, contentClient } = setup(); const input: CreateIn = { contentType: 'testType', data: { foo: 'bar' } }; const output = { test: 'test' }; crudClient.create.mockResolvedValueOnce(output); @@ -60,3 +61,59 @@ describe('#create', () => { expect(crudClient.create).toBeCalledWith(input); }); }); + +describe('#update', () => { + it('calls rpcClient.update with input and returns output', async () => { + const { crudClient, contentClient } = setup(); + const input: UpdateIn = { contentType: 'testType', data: { id: 'test', foo: 'bar' } }; + const output = { test: 'test' }; + crudClient.update.mockResolvedValueOnce(output); + + expect(await contentClient.update(input)).toEqual(output); + expect(crudClient.update).toBeCalledWith(input); + }); +}); + +describe('#delete', () => { + it('calls rpcClient.delete with input and returns output', async () => { + const { crudClient, contentClient } = setup(); + const input: DeleteIn = { contentType: 'testType', data: { id: 'test' } }; + const output = { test: 'test' }; + crudClient.delete.mockResolvedValueOnce(output); + + expect(await contentClient.delete(input)).toEqual(output); + expect(crudClient.delete).toBeCalledWith(input); + }); +}); + +describe('#search', () => { + it('calls rpcClient.search with input and returns output', async () => { + const { crudClient, contentClient } = setup(); + const input: SearchIn = { contentType: 'testType', params: {} }; + const output: SearchOut = { hits: [{ test: 'test' }] }; + crudClient.search.mockResolvedValueOnce(output); + expect(await contentClient.search(input)).toEqual(output); + expect(crudClient.search).toBeCalledWith(input); + }); + + it('calls rpcClient.search$ with input and returns output', async () => { + const { crudClient, contentClient } = setup(); + const input: SearchIn = { contentType: 'testType', params: {} }; + const output: SearchOut = { hits: [{ test: 'test' }] }; + crudClient.search.mockResolvedValueOnce(output); + const search$ = contentClient.search$(input).pipe( + takeWhile((result) => { + return result.data == null; + }, true), + toArray() + ); + + const [loadingState, loadedState] = await lastValueFrom(search$); + + expect(loadingState.isLoading).toBe(true); + expect(loadingState.data).toBeUndefined(); + + expect(loadedState.isLoading).toBe(false); + expect(loadedState.data).toEqual(output); + }); +}); diff --git a/src/plugins/content_management/public/content_client/content_client.tsx b/src/plugins/content_management/public/content_client/content_client.tsx index e10af79ffefda..4a4952a082060 100644 --- a/src/plugins/content_management/public/content_client/content_client.tsx +++ b/src/plugins/content_management/public/content_client/content_client.tsx @@ -9,13 +9,16 @@ import { QueryClient } from '@tanstack/react-query'; import { createQueryObservable } from './query_observable'; import type { CrudClient } from '../crud_client'; -import type { CreateIn, GetIn } from '../../common'; +import type { CreateIn, GetIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common'; const queryKeyBuilder = { all: (type: string) => [type] as const, item: (type: string, id: string) => { return [...queryKeyBuilder.all(type), id] as const; }, + search: (type: string, params: unknown) => { + return [...queryKeyBuilder.all(type), 'search', params] as const; + }, }; const createQueryOptionBuilder = ({ @@ -30,6 +33,12 @@ const createQueryOptionBuilder = ({ queryFn: () => crudClientProvider(input.contentType).get(input), }; }, + search: (input: I) => { + return { + queryKey: queryKeyBuilder.search(input.contentType, input.params), + queryFn: () => crudClientProvider(input.contentType).search(input), + }; + }, }; }; @@ -55,4 +64,20 @@ export class ContentClient { create(input: I): Promise { return this.crudClientProvider(input.contentType).create(input); } + + update(input: I): Promise { + return this.crudClientProvider(input.contentType).update(input); + } + + delete(input: I): Promise { + return this.crudClientProvider(input.contentType).delete(input); + } + + search(input: I): Promise { + return this.crudClientProvider(input.contentType).search(input); + } + + search$(input: I) { + return createQueryObservable(this.queryClient, this.queryOptionBuilder.search(input)); + } } diff --git a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx index dfbf960e605d0..ca1d8fe8f8e29 100644 --- a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx +++ b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx @@ -10,24 +10,32 @@ import React from 'react'; import { renderHook } from '@testing-library/react-hooks'; import { ContentClientProvider } from './content_client_context'; import { ContentClient } from './content_client'; -import { CrudClient } from '../crud_client'; import { createCrudClientMock } from '../crud_client/crud_client.mock'; -import { useCreateContentMutation } from './content_client_mutation_hooks'; -import type { CreateIn } from '../../common'; - -let contentClient: ContentClient; -let crudClient: jest.Mocked; -beforeEach(() => { - crudClient = createCrudClientMock(); - contentClient = new ContentClient(() => crudClient); -}); +import { + useCreateContentMutation, + useUpdateContentMutation, + useDeleteContentMutation, +} from './content_client_mutation_hooks'; +import type { CreateIn, UpdateIn, DeleteIn } from '../../common'; + +const setup = () => { + const crudClient = createCrudClientMock(); + const contentClient = new ContentClient(() => crudClient); + + const Wrapper: React.FC = ({ children }) => ( + {children} + ); -const Wrapper: React.FC = ({ children }) => ( - {children} -); + return { + Wrapper, + contentClient, + crudClient, + }; +}; describe('useCreateContentMutation', () => { test('should call rpcClient.create with input and resolve with output', async () => { + const { Wrapper, crudClient } = setup(); const input: CreateIn = { contentType: 'testType', data: { foo: 'bar' } }; const output = { test: 'test' }; crudClient.create.mockResolvedValueOnce(output); @@ -39,3 +47,33 @@ describe('useCreateContentMutation', () => { expect(result.current.data).toEqual(output); }); }); + +describe('useUpdateContentMutation', () => { + test('should call rpcClient.update with input and resolve with output', async () => { + const { Wrapper, crudClient } = setup(); + const input: UpdateIn = { contentType: 'testType', data: { foo: 'bar' } }; + const output = { test: 'test' }; + crudClient.update.mockResolvedValueOnce(output); + const { result, waitFor } = renderHook(() => useUpdateContentMutation(), { wrapper: Wrapper }); + result.current.mutate(input); + + await waitFor(() => result.current.isSuccess); + + expect(result.current.data).toEqual(output); + }); +}); + +describe('useDeleteContentMutation', () => { + test('should call rpcClient.delete with input and resolve with output', async () => { + const { Wrapper, crudClient } = setup(); + const input: DeleteIn = { contentType: 'testType', data: { foo: 'bar' } }; + const output = { test: 'test' }; + crudClient.delete.mockResolvedValueOnce(output); + const { result, waitFor } = renderHook(() => useDeleteContentMutation(), { wrapper: Wrapper }); + result.current.mutate(input); + + await waitFor(() => result.current.isSuccess); + + expect(result.current.data).toEqual(output); + }); +}); diff --git a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.tsx b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.tsx index 372b05b2ed093..dcde9ae1c8fe4 100644 --- a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.tsx +++ b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.tsx @@ -8,7 +8,7 @@ import { useMutation } from '@tanstack/react-query'; import { useContentClient } from './content_client_context'; -import type { CreateIn } from '../../common'; +import type { CreateIn, UpdateIn, DeleteIn } from '../../common'; export const useCreateContentMutation = () => { const contentClient = useContentClient(); @@ -18,3 +18,21 @@ export const useCreateContentMutation = () => { + const contentClient = useContentClient(); + return useMutation({ + mutationFn: (input: I) => { + return contentClient.update(input); + }, + }); +}; + +export const useDeleteContentMutation = () => { + const contentClient = useContentClient(); + return useMutation({ + mutationFn: (input: I) => { + return contentClient.delete(input); + }, + }); +}; diff --git a/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx b/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx index 4b88b32b5e5c8..7ed1ff8412a45 100644 --- a/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx +++ b/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx @@ -10,24 +10,28 @@ import React from 'react'; import { renderHook } from '@testing-library/react-hooks'; import { ContentClientProvider } from './content_client_context'; import { ContentClient } from './content_client'; -import { CrudClient } from '../crud_client'; import { createCrudClientMock } from '../crud_client/crud_client.mock'; -import { useGetContentQuery } from './content_client_query_hooks'; -import type { GetIn } from '../../common'; +import { useGetContentQuery, useSearchContentQuery } from './content_client_query_hooks'; +import type { GetIn, SearchIn, SearchOut } from '../../common'; -let contentClient: ContentClient; -let crudClient: jest.Mocked; -beforeEach(() => { - crudClient = createCrudClientMock(); - contentClient = new ContentClient(() => crudClient); -}); +const setup = () => { + const crudClient = createCrudClientMock(); + const contentClient = new ContentClient(() => crudClient); + + const Wrapper: React.FC = ({ children }) => ( + {children} + ); -const Wrapper: React.FC = ({ children }) => ( - {children} -); + return { + Wrapper, + contentClient, + crudClient, + }; +}; describe('useGetContentQuery', () => { test('should call rpcClient.get with input and resolve with output', async () => { + const { crudClient, Wrapper } = setup(); const input: GetIn = { id: 'test', contentType: 'testType' }; const output = { test: 'test' }; crudClient.get.mockResolvedValueOnce(output); @@ -36,3 +40,17 @@ describe('useGetContentQuery', () => { expect(result.current.data).toEqual(output); }); }); + +describe('useSearchContentQuery', () => { + test('should call rpcClient.search with input and resolve with output', async () => { + const { crudClient, Wrapper } = setup(); + const input: SearchIn = { contentType: 'testType', params: {} }; + const output: SearchOut = { hits: [{ test: 'test' }] }; + crudClient.search.mockResolvedValueOnce(output); + const { result, waitFor } = renderHook(() => useSearchContentQuery(input), { + wrapper: Wrapper, + }); + await waitFor(() => result.current.isSuccess); + expect(result.current.data).toEqual(output); + }); +}); diff --git a/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx b/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx index 09ee31bdd14f3..8231d7bfc9390 100644 --- a/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx +++ b/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx @@ -8,7 +8,7 @@ import { useQuery, QueryObserverOptions } from '@tanstack/react-query'; import { useContentClient } from './content_client_context'; -import type { GetIn } from '../../common'; +import type { GetIn, SearchIn, SearchOut } from '../../common'; /** * Exposed `useQuery` options @@ -18,7 +18,7 @@ export type QueryOptions = Pick; /** * * @param input - get content identifier like "id" and "contentType" - * @param queryOptions - + * @param queryOptions - query options */ export const useGetContentQuery = ( input: I, @@ -30,3 +30,22 @@ export const useGetContentQuery = ( ...queryOptions, }); }; + +/** + * + * @param input - get content identifier like "id" and "contentType" + * @param queryOptions - query options + */ +export const useSearchContentQuery = < + I extends SearchIn = SearchIn, + O extends SearchOut = SearchOut +>( + input: I, + queryOptions?: QueryOptions +) => { + const contentClient = useContentClient(); + return useQuery({ + ...contentClient.queryOptionBuilder.search(input), + ...queryOptions, + }); +}; diff --git a/src/plugins/content_management/public/content_client/index.ts b/src/plugins/content_management/public/content_client/index.ts index 329df9c596452..2904b19668dfd 100644 --- a/src/plugins/content_management/public/content_client/index.ts +++ b/src/plugins/content_management/public/content_client/index.ts @@ -8,5 +8,13 @@ export { ContentClient } from './content_client'; export { ContentClientProvider, useContentClient } from './content_client_context'; -export { useGetContentQuery } from './content_client_query_hooks'; -export { useCreateContentMutation } from './content_client_mutation_hooks'; +export { + useGetContentQuery, + useSearchContentQuery, + type QueryOptions, +} from './content_client_query_hooks'; +export { + useCreateContentMutation, + useUpdateContentMutation, + useDeleteContentMutation, +} from './content_client_mutation_hooks'; diff --git a/src/plugins/content_management/public/crud_client/crud_client.mock.ts b/src/plugins/content_management/public/crud_client/crud_client.mock.ts index abcb551b33cb9..2b2bead4ea462 100644 --- a/src/plugins/content_management/public/crud_client/crud_client.mock.ts +++ b/src/plugins/content_management/public/crud_client/crud_client.mock.ts @@ -12,6 +12,9 @@ export const createCrudClientMock = (): jest.Mocked => { const mock: jest.Mocked = { get: jest.fn((input) => Promise.resolve({} as any)), create: jest.fn((input) => Promise.resolve({} as any)), + update: jest.fn((input) => Promise.resolve({} as any)), + delete: jest.fn((input) => Promise.resolve({} as any)), + search: jest.fn((input) => Promise.resolve({ hits: [] } as any)), }; return mock; }; diff --git a/src/plugins/content_management/public/crud_client/crud_client.ts b/src/plugins/content_management/public/crud_client/crud_client.ts index f233eb3f62e37..e2c5fd8fb86a5 100644 --- a/src/plugins/content_management/public/crud_client/crud_client.ts +++ b/src/plugins/content_management/public/crud_client/crud_client.ts @@ -6,9 +6,12 @@ * Side Public License, v 1. */ -import type { GetIn, CreateIn } from '../../common'; +import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common'; export interface CrudClient { get(input: I): Promise; create(input: I): Promise; + update(input: I): Promise; + delete(input: I): Promise; + search(input: I): Promise; } diff --git a/src/plugins/content_management/public/rpc_client/rpc_client.ts b/src/plugins/content_management/public/rpc_client/rpc_client.ts index b5b7b7804d9d1..5ce2e781dcbb1 100644 --- a/src/plugins/content_management/public/rpc_client/rpc_client.ts +++ b/src/plugins/content_management/public/rpc_client/rpc_client.ts @@ -8,7 +8,15 @@ import { HttpSetup } from '@kbn/core/public'; import { API_ENDPOINT } from '../../common'; -import type { GetIn, CreateIn, ProcedureName } from '../../common'; +import type { + GetIn, + CreateIn, + UpdateIn, + DeleteIn, + SearchIn, + SearchOut, + ProcedureName, +} from '../../common'; import type { CrudClient } from '../crud_client/crud_client'; export class RpcClient implements CrudClient { @@ -22,6 +30,20 @@ export class RpcClient implements CrudClient { return this.sendMessage('create', input); } + public update(input: I): Promise { + return this.sendMessage('update', input); + } + + public delete(input: I): Promise { + return this.sendMessage('delete', input); + } + + public search( + input: I + ): Promise { + return this.sendMessage('search', input); + } + private sendMessage = async (name: ProcedureName, input: any): Promise => { const { result } = await this.http.post<{ result: any }>(`${API_ENDPOINT}/${name}`, { body: JSON.stringify(input), From fab938e5ec1bb448b80dddc2786306686898f98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 15 Feb 2023 14:09:05 +0100 Subject: [PATCH 008/210] [APM] Make `service.name` required in `AnnotationsContextProvider` (#151281) `service.name` was not being passed to `AnnotationsContextProvider` in the `TransactionCharts`. The result of this change is that annotations will show up on transaction charts (they didn't show up before) --- .../mobile/transaction_overview/transaction_charts.tsx | 1 + .../public/components/app/transaction_details/index.tsx | 9 +++++++-- .../public/components/app/transaction_overview/index.tsx | 9 +++++++-- .../shared/charts/transaction_charts/index.tsx | 3 +++ .../public/context/annotations/annotations_context.tsx | 4 ++-- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/transaction_charts.tsx b/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/transaction_charts.tsx index a80f0ebfbced3..86d693aaf5955 100644 --- a/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/transaction_charts.tsx +++ b/x-pack/plugins/apm/public/components/app/mobile/transaction_overview/transaction_charts.tsx @@ -36,6 +36,7 @@ export function MobileTransactionCharts({ }) { return ( )} { From 2013e0d8e5f448f761202fc6504554aa531f7ad4 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Wed, 15 Feb 2023 08:24:30 -0500 Subject: [PATCH 009/210] fix(ftr): o11y functional tests flakiness (#151210) --- .../apps/observability/pages/alerts/add_to_case.ts | 7 +++---- .../apps/observability/pages/alerts/index.ts | 4 ++-- .../apps/observability/pages/alerts/table_storage.ts | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts index 3c2b6b4403770..a575700e2cc9a 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/add_to_case.ts @@ -17,16 +17,15 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/observability/alerts'); - await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.load('x-pack/test/functional/es_archives/infra/simple_logs'); }); after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.unload('x-pack/test/functional/es_archives/infra/simple_logs'); await esArchiver.unload('x-pack/test/functional/es_archives/observability/alerts'); }); - // FLAKY: https://github.com/elastic/kibana/issues/133799 - describe.skip('When user has all priviledges for cases', () => { + describe('When user has all priviledges for cases', () => { before(async () => { await observability.users.setTestUserRole( observability.users.defineBasicObservabilityRole({ diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts index 99c41f250ab07..d2b129b4baaa3 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/index.ts @@ -49,12 +49,12 @@ export default ({ getService }: FtrProviderContext) => { describe('Alerts table', () => { before(async () => { - await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.load('x-pack/test/functional/es_archives/infra/simple_logs'); await observability.alerts.common.navigateToTimeWithData(); }); after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.unload('x-pack/test/functional/es_archives/infra/simple_logs'); }); it('Renders the table', async () => { diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/table_storage.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/table_storage.ts index e091f8ddeb7bf..5f96f9d707c7b 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/table_storage.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/table_storage.ts @@ -19,17 +19,16 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/observability/alerts'); - await esArchiver.load('x-pack/test/functional/es_archives/infra/metrics_and_logs'); - - await observability.alerts.common.navigateToTimeWithData(); + await esArchiver.load('x-pack/test/functional/es_archives/infra/simple_logs'); }); after(async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/infra/metrics_and_logs'); + await esArchiver.unload('x-pack/test/functional/es_archives/infra/simple_logs'); await esArchiver.unload('x-pack/test/functional/es_archives/observability/alerts'); }); it('remembers column changes', async () => { + await observability.alerts.common.navigateToTimeWithData(); const durationColumnButton = await testSubjects.find( 'dataGridHeaderCellActionButton-kibana.alert.duration.us' ); @@ -50,6 +49,7 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { }); it('remembers sorting changes', async () => { + await observability.alerts.common.navigateToTimeWithData(); const timestampColumnButton = await testSubjects.find( 'dataGridHeaderCellActionButton-@timestamp' ); From 9f820b8b42e95bd191e5d0ce703efd8e23dfe635 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Wed, 15 Feb 2023 14:25:45 +0100 Subject: [PATCH 010/210] [Fleet] Use new dataView API for agent logs filters (#151030) Closes https://github.com/elastic/kibana/issues/135970 ## Summary Use `dataView` API in agent dataset and logs filters. These two components were composing their own dataView-like objects. Now they compose `DataViewSpecs` and instantiate them with `DataViews.create`. ## Testing steps Run an agent, navigate to agent logs and verify that the "dataset" and "log level" filter work as usual: Screenshot 2023-02-14 at 17 11 38 Screenshot 2023-02-14 at 17 11 30 ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../components/agent_logs/constants.tsx | 2 + .../agent_logs/filter_dataset.test.tsx | 62 +++++++++++++++++++ .../components/agent_logs/filter_dataset.tsx | 24 ++++--- .../agent_logs/filter_log_level.test.tsx | 55 ++++++++++++++++ .../agent_logs/filter_log_level.tsx | 24 ++++--- 5 files changed, 153 insertions(+), 14 deletions(-) create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.test.tsx create mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.test.tsx diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx index 18af09c48f220..0225cec66a3cd 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx @@ -24,11 +24,13 @@ export const DATASET_FIELD = { name: 'data_stream.dataset', type: 'string', aggregatable: true, + searchable: true, }; export const LOG_LEVEL_FIELD = { name: 'log.level', type: 'string', aggregatable: true, + searchable: true, }; export const DEFAULT_DATE_RANGE = { start: 'now-1d', diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.test.tsx new file mode 100644 index 0000000000000..2a942a2c0c0cd --- /dev/null +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.test.tsx @@ -0,0 +1,62 @@ +/* + * Copyright 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 { render, act, fireEvent } from '@testing-library/react'; + +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; + +import { DatasetFilter } from './filter_dataset'; + +const renderComponent = (props: React.ComponentProps) => { + return render( + + + + ); +}; + +jest.mock('../../../../../hooks', () => ({ + ...jest.requireActual('../../../../../hooks'), + useStartServices: jest.fn().mockReturnValue({ + data: { + dataViews: { + getFieldsForWildcard: jest.fn().mockResolvedValue([]), + create: jest.fn().mockResolvedValue([]), + }, + }, + unifiedSearch: { + autocomplete: { + getValueSuggestions: jest + .fn() + .mockResolvedValue([ + 'elastic_agent', + 'elastic_agent.filebeat', + 'elastic_agent.fleet_server', + 'elastic_agent.metricbeat', + ]), + }, + }, + }), +})); + +describe('DatasetFilter', () => { + const { getByRole, getByText } = renderComponent({ + selectedDatasets: [], + onToggleDataset: () => {}, + }); + + it('Renders all statuses', () => { + act(() => { + fireEvent.click(getByRole('button')); + }); + + expect(getByText('elastic_agent')).toBeInTheDocument(); + expect(getByText('elastic_agent.filebeat')).toBeInTheDocument(); + expect(getByText('elastic_agent.fleet_server')).toBeInTheDocument(); + expect(getByText('elastic_agent.metricbeat')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx index b4677761be1a2..9aafb11d999f1 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx @@ -8,7 +8,7 @@ import React, { memo, useState, useEffect, useCallback } from 'react'; import { EuiPopover, EuiFilterButton, EuiFilterSelectItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; +import type { DataViewField, FieldSpec } from '@kbn/data-views-plugin/public'; import { useStartServices } from '../../../../../hooks'; @@ -18,7 +18,7 @@ export const DatasetFilter: React.FunctionComponent<{ selectedDatasets: string[]; onToggleDataset: (dataset: string) => void; }> = memo(({ selectedDatasets, onToggleDataset }) => { - const { unifiedSearch } = useStartServices(); + const { unifiedSearch, data } = useStartServices(); const [isOpen, setIsOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const [datasetValues, setDatasetValues] = useState([AGENT_DATASET]); @@ -30,11 +30,20 @@ export const DatasetFilter: React.FunctionComponent<{ const fetchValues = async () => { setIsLoading(true); try { + const fields: FieldSpec[] = await data.dataViews.getFieldsForWildcard({ + pattern: AGENT_LOG_INDEX_PATTERN, + }); + const fieldsMap = fields.reduce((acc: Record, curr: FieldSpec) => { + acc[curr.name] = curr; + return acc; + }, {}); + const newDataView = await data.dataViews.create({ + title: AGENT_LOG_INDEX_PATTERN, + fields: fieldsMap, + }); + const values = await unifiedSearch.autocomplete.getValueSuggestions({ - indexPattern: { - title: AGENT_LOG_INDEX_PATTERN, - fields: [DATASET_FIELD], - } as DataView, + indexPattern: newDataView, field: DATASET_FIELD as DataViewField, query: '', }); @@ -45,12 +54,13 @@ export const DatasetFilter: React.FunctionComponent<{ setIsLoading(false); }; fetchValues(); - }, [unifiedSearch.autocomplete]); + }, [data.dataViews, unifiedSearch.autocomplete]); return ( ) => { + return render( + + + + ); +}; + +jest.mock('../../../../../hooks', () => ({ + ...jest.requireActual('../../../../../hooks'), + useStartServices: jest.fn().mockReturnValue({ + data: { + dataViews: { + getFieldsForWildcard: jest.fn().mockResolvedValue([]), + create: jest.fn().mockResolvedValue([]), + }, + }, + unifiedSearch: { + autocomplete: { + getValueSuggestions: jest.fn().mockResolvedValue(['error', 'warn', 'info', 'debug']), + }, + }, + }), +})); + +describe('LogLevelFilter', () => { + const { getByRole, getByText } = renderComponent({ + selectedLevels: [], + onToggleLevel: () => {}, + }); + + it('Renders all statuses', () => { + act(() => { + fireEvent.click(getByRole('button')); + }); + + expect(getByText('error')).toBeInTheDocument(); + expect(getByText('warn')).toBeInTheDocument(); + expect(getByText('info')).toBeInTheDocument(); + expect(getByText('debug')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx index b512b0a5643d6..1fca50180b682 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx @@ -8,7 +8,7 @@ import React, { memo, useState, useEffect, useCallback } from 'react'; import { EuiPopover, EuiFilterButton, EuiFilterSelectItem, EuiIcon, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { DataView, DataViewField } from '@kbn/data-views-plugin/public'; +import type { DataViewField, FieldSpec } from '@kbn/data-views-plugin/public'; import { useStartServices } from '../../../../../hooks'; @@ -29,7 +29,7 @@ export const LogLevelFilter: React.FunctionComponent<{ selectedLevels: string[]; onToggleLevel: (level: string) => void; }> = memo(({ selectedLevels, onToggleLevel }) => { - const { unifiedSearch } = useStartServices(); + const { unifiedSearch, data } = useStartServices(); const [isOpen, setIsOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const [levelValues, setLevelValues] = useState([]); @@ -41,11 +41,20 @@ export const LogLevelFilter: React.FunctionComponent<{ const fetchValues = async () => { setIsLoading(true); try { + const fields: FieldSpec[] = await data.dataViews.getFieldsForWildcard({ + pattern: AGENT_LOG_INDEX_PATTERN, + }); + const fieldsMap = fields.reduce((acc: Record, curr: FieldSpec) => { + acc[curr.name] = curr; + return acc; + }, {}); + const newDataView = await data.dataViews.create({ + title: AGENT_LOG_INDEX_PATTERN, + fields: fieldsMap, + }); + const values: string[] = await unifiedSearch.autocomplete.getValueSuggestions({ - indexPattern: { - title: AGENT_LOG_INDEX_PATTERN, - fields: [LOG_LEVEL_FIELD], - } as DataView, + indexPattern: newDataView, field: LOG_LEVEL_FIELD as DataViewField, query: '', }); @@ -56,7 +65,7 @@ export const LogLevelFilter: React.FunctionComponent<{ setIsLoading(false); }; fetchValues(); - }, [unifiedSearch.autocomplete]); + }, [data.dataViews, unifiedSearch.autocomplete]); const noLogsFound = (
@@ -85,6 +94,7 @@ export const LogLevelFilter: React.FunctionComponent<{ Date: Wed, 15 Feb 2023 13:26:08 +0000 Subject: [PATCH 011/210] Change description for metadata field in ingest pipelines (#150935) ## Summary Improves the description of the `_meta` field in the Ingest pipeline form as per the decision made in https://github.com/elastic/kibana/pull/149976#issuecomment-1426083304 The 'Learn more' link leads to [the Ingest API documentation for Metadata](https://www.elastic.co/guide/en/elasticsearch/reference/8.6/put-pipeline-api.html#pipeline-metadata). meta ### Checklist Delete any items that are not applicable to this PR. - [X] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) cc: @gchaps --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/pipeline_form/pipeline_form_fields.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx index ce9a05f666be0..0c8177715c10f 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_form/pipeline_form_fields.tsx @@ -139,7 +139,7 @@ export const PipelineFormFields: React.FunctionComponent = ({ <> From 858eec506cff891e3919ec15f701ef4d8c814a5e Mon Sep 17 00:00:00 2001 From: Yan Savitski Date: Wed, 15 Feb 2023 14:43:41 +0100 Subject: [PATCH 012/210] Behavioral analytics view in discover (#151157) Issue [[Behavioral Analytics] View collection events in Discover image --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../common/types/analytics.ts | 4 + .../__mocks__/kea_logic/kibana_logic.mock.ts | 7 +- ...ytics_collection_data_view_id_api_logic.ts | 31 +++++ ...tics_collection_data_view_id_logic.test.ts | 46 +++++++ ...analytics_collection_data_view_id_logic.ts | 53 +++++++ .../analytics_collection_view.test.tsx | 31 ++++- .../analytics_collection_view.tsx | 42 +++++- .../public/applications/index.tsx | 1 + .../shared/kibana/kibana_logic.ts | 2 + ..._analytics_collection_data_view_id.test.ts | 84 ++++++++++++ ...fetch_analytics_collection_data_view_id.ts | 31 +++++ .../enterprise_search/analytics.test.ts | 129 ++++++++++++++---- .../routes/enterprise_search/analytics.ts | 37 +++++ 13 files changed, 467 insertions(+), 31 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/api/fetch_analytics_collection_data_view_id/fetch_analytics_collection_data_view_id_api_logic.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.test.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.ts create mode 100644 x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.test.ts create mode 100644 x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.ts diff --git a/x-pack/plugins/enterprise_search/common/types/analytics.ts b/x-pack/plugins/enterprise_search/common/types/analytics.ts index 49c00830a7fc9..3c716a545a9c5 100644 --- a/x-pack/plugins/enterprise_search/common/types/analytics.ts +++ b/x-pack/plugins/enterprise_search/common/types/analytics.ts @@ -17,3 +17,7 @@ export type AnalyticsCollectionDocument = Omit; export interface AnalyticsEventsIndexExists { exists: boolean; } + +export interface AnalyticsCollectionDataViewId { + data_view_id: string | null; +} diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts index 4689317cfd61a..ff4760c11f5c1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts @@ -8,13 +8,18 @@ import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { cloudMock } from '@kbn/cloud-plugin/public/mocks'; import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; -import { Capabilities } from '@kbn/core/public'; +import { ApplicationStart, Capabilities } from '@kbn/core/public'; import { securityMock } from '@kbn/security-plugin/public/mocks'; import { mockHistory } from '../react_router/state.mock'; export const mockKibanaValues = { + application: { + getUrlForApp: jest.fn( + (appId: string, options?: { path?: string }) => `/app/${appId}${options?.path}` + ), + } as unknown as ApplicationStart, capabilities: {} as Capabilities, config: { host: 'http://localhost:3002' }, charts: chartPluginMock.createStartContract(), diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/api/fetch_analytics_collection_data_view_id/fetch_analytics_collection_data_view_id_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/api/fetch_analytics_collection_data_view_id/fetch_analytics_collection_data_view_id_api_logic.ts new file mode 100644 index 0000000000000..6b4853f2aa581 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/api/fetch_analytics_collection_data_view_id/fetch_analytics_collection_data_view_id_api_logic.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AnalyticsCollectionDataViewId } from '../../../../../common/types/analytics'; +import { createApiLogic } from '../../../shared/api_logic/create_api_logic'; +import { HttpLogic } from '../../../shared/http'; + +export interface FetchAnalyticsCollectionDataViewIdAPILogicArgs { + id: string; +} + +export type FetchAnalyticsCollectionDataViewIdApiLogicResponse = AnalyticsCollectionDataViewId; + +export const fetchAnalyticsCollectionDataViewId = async ({ + id, +}: FetchAnalyticsCollectionDataViewIdAPILogicArgs): Promise => { + const { http } = HttpLogic.values; + const route = `/internal/enterprise_search/analytics/collections/${id}/data_view_id`; + const response = await http.get(route); + + return response; +}; + +export const FetchAnalyticsCollectionDataViewIdAPILogic = createApiLogic( + ['analytics', 'analytics_collection_data_view_id_api_logic'], + fetchAnalyticsCollectionDataViewId +); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.test.ts new file mode 100644 index 0000000000000..52d0dc2efc7f3 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.test.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { LogicMounter } from '../../../__mocks__/kea_logic'; + +import { Status } from '../../../../../common/types/api'; + +import { AnalyticsCollectionDataViewIdLogic } from './analytics_collection_data_view_id_logic'; + +describe('analyticsCollectionDataViewIdLogic', () => { + const { mount } = new LogicMounter(AnalyticsCollectionDataViewIdLogic); + const dataViewIdMock = '0c3edf-0c3edf-0c3edf-0c3edf-0c3edf'; + + beforeEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); + mount(); + }); + + const DEFAULT_VALUES = { + data: undefined, + dataViewId: null, + status: Status.IDLE, + }; + + it('has expected default values', () => { + expect(AnalyticsCollectionDataViewIdLogic.values).toEqual(DEFAULT_VALUES); + }); + + describe('selectors', () => { + it('updates when apiSuccess listener triggered', () => { + AnalyticsCollectionDataViewIdLogic.actions.apiSuccess({ data_view_id: dataViewIdMock }); + + expect(AnalyticsCollectionDataViewIdLogic.values).toEqual({ + ...DEFAULT_VALUES, + data: { data_view_id: dataViewIdMock }, + dataViewId: dataViewIdMock, + status: Status.SUCCESS, + }); + }); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.ts new file mode 100644 index 0000000000000..147f43c53e03e --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_data_view_id_logic.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { kea, MakeLogicType } from 'kea'; + +import { Status } from '../../../../../common/types/api'; + +import { Actions } from '../../../shared/api_logic/create_api_logic'; +import { + FetchAnalyticsCollectionDataViewIdAPILogic, + FetchAnalyticsCollectionDataViewIdApiLogicResponse, +} from '../../api/fetch_analytics_collection_data_view_id/fetch_analytics_collection_data_view_id_api_logic'; + +export interface AnalyticsCollectionDataViewIdActions { + apiSuccess: Actions<{}, FetchAnalyticsCollectionDataViewIdApiLogicResponse>['apiSuccess']; + fetchAnalyticsCollectionDataViewId(id: string): { id: string }; + makeRequest: Actions<{}, FetchAnalyticsCollectionDataViewIdApiLogicResponse>['makeRequest']; +} +export interface AnalyticsCollectionDataViewIdValues { + data: typeof FetchAnalyticsCollectionDataViewIdAPILogic.values.data; + + dataViewId: string | null; + + status: Status; +} + +export const AnalyticsCollectionDataViewIdLogic = kea< + MakeLogicType +>({ + actions: { + fetchAnalyticsCollectionDataViewId: (id) => ({ id }), + }, + connect: { + actions: [ + FetchAnalyticsCollectionDataViewIdAPILogic, + ['makeRequest', 'apiSuccess', 'apiError'], + ], + values: [FetchAnalyticsCollectionDataViewIdAPILogic, ['status', 'data']], + }, + listeners: ({ actions }) => ({ + fetchAnalyticsCollectionDataViewId: ({ id }) => { + actions.makeRequest({ id }); + }, + }), + path: ['enterprise_search', 'analytics', 'collection_data_view_id'], + selectors: ({ selectors }) => ({ + dataViewId: [() => [selectors.data], (data) => data?.data_view_id || null], + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.test.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.test.tsx index ebbd898f08641..4fe1828378736 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.test.tsx @@ -10,11 +10,12 @@ import '../../../__mocks__/shallow_useeffect.mock'; import { setMockValues, setMockActions } from '../../../__mocks__/kea_logic'; import { mockUseParams } from '../../../__mocks__/react_router'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { shallow } from 'enzyme'; import { AnalyticsCollection } from '../../../../../common/types/analytics'; +import { EnterpriseSearchAnalyticsPageTemplate } from '../layout/page_template'; import { AnalyticsCollectionIntegrate } from './analytics_collection_integrate/analytics_collection_integrate'; import { AnalyticsCollectionSettings } from './analytics_collection_settings'; @@ -27,10 +28,12 @@ const mockValues = { id: '1', name: 'Analytics Collection 1', } as AnalyticsCollection, + dataViewId: '1234-1234-1234', }; const mockActions = { fetchAnalyticsCollection: jest.fn(), + fetchAnalyticsCollectionDataViewId: jest.fn(), }; describe('AnalyticsOverview', () => { @@ -73,5 +76,31 @@ describe('AnalyticsOverview', () => { expect(wrapper.prop('pageViewTelemetry')).toBe('View Analytics Collection - settings'); }); + + it('send correct pageHeader rightSideItems when dataViewId exists', async () => { + setMockValues(mockValues); + setMockActions(mockActions); + + const rightSideItems = shallow() + ?.find(EnterpriseSearchAnalyticsPageTemplate) + ?.prop('pageHeader')?.rightSideItems; + + expect(rightSideItems).toHaveLength(1); + + expect((rightSideItems?.[0] as ReactElement).props?.children?.props?.href).toBe( + "/app/discover#/?_a=(index:'1234-1234-1234')" + ); + }); + + it('hide pageHeader rightSideItems when dataViewId not exists', async () => { + setMockValues({ ...mockValues, dataViewId: null }); + setMockActions(mockActions); + + const wrapper = shallow(); + + expect( + wrapper?.find(EnterpriseSearchAnalyticsPageTemplate)?.prop('pageHeader')?.rightSideItems + ).toBeUndefined(); + }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx index ae5d3e4166224..17e89d97195a2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx @@ -10,8 +10,19 @@ import { useParams } from 'react-router-dom'; import { useActions, useValues } from 'kea'; -import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui'; +import { + EuiEmptyPrompt, + EuiFlexGroup, + EuiFlexItem, + EuiIconTip, + EuiLink, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { RedirectAppLinks } from '@kbn/kibana-react-plugin/public'; import { generateEncodedPath } from '../../../shared/encode_path_params'; import { KibanaLogic } from '../../../shared/kibana'; @@ -20,6 +31,8 @@ import { COLLECTION_CREATION_PATH, COLLECTION_VIEW_PATH } from '../../routes'; import { EnterpriseSearchAnalyticsPageTemplate } from '../layout/page_template'; +import { AnalyticsCollectionDataViewIdLogic } from './analytics_collection_data_view_id_logic'; + import { AnalyticsCollectionEvents } from './analytics_collection_events'; import { AnalyticsCollectionIntegrate } from './analytics_collection_integrate/analytics_collection_integrate'; import { AnalyticsCollectionSettings } from './analytics_collection_settings'; @@ -34,9 +47,11 @@ export const collectionViewBreadcrumbs = [ export const AnalyticsCollectionView: React.FC = () => { const { fetchAnalyticsCollection } = useActions(FetchAnalyticsCollectionLogic); + const { fetchAnalyticsCollectionDataViewId } = useActions(AnalyticsCollectionDataViewIdLogic); const { analyticsCollection, isLoading } = useValues(FetchAnalyticsCollectionLogic); + const { dataViewId } = useValues(AnalyticsCollectionDataViewIdLogic); const { id, section } = useParams<{ id: string; section: string }>(); - const { navigateToUrl } = useValues(KibanaLogic); + const { navigateToUrl, application } = useValues(KibanaLogic); const collectionViewTabs = [ { id: 'events', @@ -84,6 +99,7 @@ export const AnalyticsCollectionView: React.FC = () => { useEffect(() => { fetchAnalyticsCollection(id); + fetchAnalyticsCollectionDataViewId(id); }, []); return ( @@ -101,6 +117,28 @@ export const AnalyticsCollectionView: React.FC = () => { } ), pageTitle: analyticsCollection?.name, + rightSideItems: dataViewId + ? [ + + + + } + type="inspect" + /> + + , + ] + : undefined, tabs: [...collectionViewTabs], }} > diff --git a/x-pack/plugins/enterprise_search/public/applications/index.tsx b/x-pack/plugins/enterprise_search/public/applications/index.tsx index 2b25fabe056f0..11250d05a845e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/index.tsx @@ -57,6 +57,7 @@ export const renderApp = ( const store = getContext().store; const unmountKibanaLogic = mountKibanaLogic({ + application: core.application, capabilities: core.application.capabilities, config, productAccess, diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts index db80e75fbcf20..070c273884772 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts @@ -30,6 +30,7 @@ type RequiredFieldsOnly = { [K in keyof T as T[K] extends Required[K] ? K : never]: T[K]; }; interface KibanaLogicProps { + application: ApplicationStart; config: { host?: string }; productAccess: ProductAccess; // Kibana core @@ -57,6 +58,7 @@ export interface KibanaValues extends Omit { export const KibanaLogic = kea>({ path: ['enterprise_search', 'kibana_logic'], reducers: ({ props }) => ({ + application: [props.application || {}, {}], capabilities: [props.capabilities || {}, {}], config: [props.config || {}, {}], charts: [props.charts, {}], diff --git a/x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.test.ts b/x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.test.ts new file mode 100644 index 0000000000000..1db6ccedfd920 --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.test.ts @@ -0,0 +1,84 @@ +/* + * Copyright 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 { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; + +import { DataViewsService } from '@kbn/data-views-plugin/common'; + +import { ErrorCode } from '../../../common/types/error_codes'; + +import { fetchAnalyticsCollectionById } from './fetch_analytics_collection'; +import { fetchAnalyticsCollectionDataViewId } from './fetch_analytics_collection_data_view_id'; + +jest.mock('./fetch_analytics_collection', () => ({ + fetchAnalyticsCollectionById: jest.fn(), +})); + +describe('fetch analytics collection data view id', () => { + const mockClient = {}; + const dataViewService = { find: jest.fn() }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return data view id of analytics collection by Id', async () => { + const mockCollectionId = 'collectionId'; + const mockDataViewId = 'dataViewId'; + const mockCollection = { events_datastream: 'log-collection-data-stream' }; + (fetchAnalyticsCollectionById as jest.Mock).mockImplementationOnce(() => + Promise.resolve(mockCollection) + ); + + dataViewService.find.mockImplementationOnce(() => Promise.resolve([{ id: mockDataViewId }])); + + await expect( + fetchAnalyticsCollectionDataViewId( + mockClient as unknown as IScopedClusterClient, + dataViewService as unknown as DataViewsService, + mockCollectionId + ) + ).resolves.toEqual({ data_view_id: mockDataViewId }); + expect(fetchAnalyticsCollectionById).toHaveBeenCalledWith(mockClient, mockCollectionId); + expect(dataViewService.find).toHaveBeenCalledWith(mockCollection.events_datastream, 1); + }); + + it('should return null when data view not found', async () => { + const mockCollectionId = 'collectionId'; + const mockCollection = { events_datastream: 'log-collection-data-stream' }; + (fetchAnalyticsCollectionById as jest.Mock).mockImplementationOnce(() => + Promise.resolve(mockCollection) + ); + + dataViewService.find.mockImplementationOnce(() => Promise.resolve([])); + + await expect( + fetchAnalyticsCollectionDataViewId( + mockClient as unknown as IScopedClusterClient, + dataViewService as unknown as DataViewsService, + mockCollectionId + ) + ).resolves.toEqual({ data_view_id: null }); + expect(fetchAnalyticsCollectionById).toHaveBeenCalledWith(mockClient, mockCollectionId); + expect(dataViewService.find).toHaveBeenCalledWith(mockCollection.events_datastream, 1); + }); + + it('should throw an error when analytics collection not found', async () => { + const mockCollectionId = 'collectionId'; + (fetchAnalyticsCollectionById as jest.Mock).mockImplementationOnce(() => Promise.resolve(null)); + + await expect( + fetchAnalyticsCollectionDataViewId( + mockClient as unknown as IScopedClusterClient, + dataViewService as unknown as DataViewsService, + mockCollectionId + ) + ).rejects.toThrowError(ErrorCode.ANALYTICS_COLLECTION_NOT_FOUND); + expect(fetchAnalyticsCollectionById).toHaveBeenCalledWith(mockClient, mockCollectionId); + expect(dataViewService.find).not.toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.ts b/x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.ts new file mode 100644 index 0000000000000..0ec07139d7b41 --- /dev/null +++ b/x-pack/plugins/enterprise_search/server/lib/analytics/fetch_analytics_collection_data_view_id.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import { DataViewsService } from '@kbn/data-views-plugin/common'; + +import { AnalyticsCollectionDataViewId } from '../../../common/types/analytics'; + +import { ErrorCode } from '../../../common/types/error_codes'; + +import { fetchAnalyticsCollectionById } from './fetch_analytics_collection'; + +export const fetchAnalyticsCollectionDataViewId = async ( + elasticsearchClient: IScopedClusterClient, + dataViewsService: DataViewsService, + collectionId: string +): Promise => { + const collection = await fetchAnalyticsCollectionById(elasticsearchClient, collectionId); + + if (!collection) { + throw new Error(ErrorCode.ANALYTICS_COLLECTION_NOT_FOUND); + } + + const collectionDataView = await dataViewsService.find(collection.events_datastream, 1); + + return { data_view_id: collectionDataView?.[0]?.id || null }; +}; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.test.ts index 09195df9768dc..f216a23e58e0a 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.test.ts @@ -14,8 +14,18 @@ import { DataPluginStart } from '@kbn/data-plugin/server/plugin'; jest.mock('../../lib/analytics/fetch_analytics_collection', () => ({ fetchAnalyticsCollectionById: jest.fn(), })); -import { AnalyticsCollection } from '../../../common/types/analytics'; + +jest.mock('../../lib/analytics/fetch_analytics_collection_data_view_id', () => ({ + fetchAnalyticsCollectionDataViewId: jest.fn(), +})); + +import { + AnalyticsCollection, + AnalyticsCollectionDataViewId, +} from '../../../common/types/analytics'; +import { ErrorCode } from '../../../common/types/error_codes'; import { fetchAnalyticsCollectionById } from '../../lib/analytics/fetch_analytics_collection'; +import { fetchAnalyticsCollectionDataViewId } from '../../lib/analytics/fetch_analytics_collection_data_view_id'; import { registerAnalyticsRoutes } from './analytics'; @@ -23,36 +33,36 @@ describe('Enterprise Search Analytics API', () => { let mockRouter: MockRouter; const mockClient = {}; - beforeEach(() => { - const context = { - core: Promise.resolve({ elasticsearch: { client: mockClient } }), - } as jest.Mocked; + describe('GET /internal/enterprise_search/analytics/collections/{id}', () => { + beforeEach(() => { + const context = { + core: Promise.resolve({ elasticsearch: { client: mockClient } }), + } as jest.Mocked; - mockRouter = new MockRouter({ - context, - method: 'get', - path: '/internal/enterprise_search/analytics/collections/{id}', - }); + mockRouter = new MockRouter({ + context, + method: 'get', + path: '/internal/enterprise_search/analytics/collections/{id}', + }); - const mockDataPlugin = { - indexPatterns: { - dataViewsServiceFactory: jest.fn(), - }, - }; - - const mockedSavedObjects = { - getScopedClient: jest.fn(), - }; - - registerAnalyticsRoutes({ - ...mockDependencies, - data: mockDataPlugin as unknown as DataPluginStart, - savedObjects: mockedSavedObjects as unknown as SavedObjectsServiceStart, - router: mockRouter.router, + const mockDataPlugin = { + indexPatterns: { + dataViewsServiceFactory: jest.fn(), + }, + }; + + const mockedSavedObjects = { + getScopedClient: jest.fn(), + }; + + registerAnalyticsRoutes({ + ...mockDependencies, + data: mockDataPlugin as unknown as DataPluginStart, + savedObjects: mockedSavedObjects as unknown as SavedObjectsServiceStart, + router: mockRouter.router, + }); }); - }); - describe('GET /internal/enterprise_search/analytics/collections/{id}', () => { it('fetches a defined analytics collection name', async () => { const mockData: AnalyticsCollection = { event_retention_day_length: 30, @@ -90,4 +100,69 @@ describe('Enterprise Search Analytics API', () => { }); }); }); + + describe('GET /internal/enterprise_search/analytics/collections/{id}/data_view_id', () => { + beforeEach(() => { + const context = { + core: Promise.resolve({ elasticsearch: { client: mockClient } }), + } as jest.Mocked; + + mockRouter = new MockRouter({ + context, + method: 'get', + path: '/internal/enterprise_search/analytics/collections/{id}/data_view_id', + }); + + const mockDataPlugin = { + indexPatterns: { + dataViewsServiceFactory: jest.fn(), + }, + }; + + const mockedSavedObjects = { + getScopedClient: jest.fn(), + }; + + registerAnalyticsRoutes({ + ...mockDependencies, + data: mockDataPlugin as unknown as DataPluginStart, + savedObjects: mockedSavedObjects as unknown as SavedObjectsServiceStart, + router: mockRouter.router, + }); + }); + + it('fetches a defined data view id by collection id', async () => { + const mockData: AnalyticsCollectionDataViewId = { + data_view_id: '03fca-1234-5678-9abc-1234', + }; + + (fetchAnalyticsCollectionDataViewId as jest.Mock).mockImplementationOnce(() => { + return Promise.resolve(mockData); + }); + await mockRouter.callRoute({ params: { id: '1' } }); + + expect(mockRouter.response.ok).toHaveBeenCalledWith({ + body: mockData, + }); + }); + + it('throws a 404 error if collection not found by id', async () => { + (fetchAnalyticsCollectionDataViewId as jest.Mock).mockImplementationOnce(() => { + throw new Error(ErrorCode.ANALYTICS_COLLECTION_NOT_FOUND); + }); + await mockRouter.callRoute({ + params: { id: '1' }, + }); + + expect(mockRouter.response.customError).toHaveBeenCalledWith({ + body: { + attributes: { + error_code: 'analytics_collection_not_found', + }, + message: 'Analytics collection not found', + }, + statusCode: 404, + }); + }); + }); }); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts index 1e84a1b81845e..9306a1958956a 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts @@ -20,6 +20,7 @@ import { fetchAnalyticsCollectionById, fetchAnalyticsCollections, } from '../../lib/analytics/fetch_analytics_collection'; +import { fetchAnalyticsCollectionDataViewId } from '../../lib/analytics/fetch_analytics_collection_data_view_id'; import { RouteDependencies } from '../../plugin'; import { createError } from '../../utils/create_error'; import { elasticsearchErrorHandler } from '../../utils/elasticsearch_error_handler'; @@ -180,4 +181,40 @@ export function registerAnalyticsRoutes({ return response.ok({ body: { exists: true } }); }) ); + + router.get( + { + path: '/internal/enterprise_search/analytics/collections/{id}/data_view_id', + validate: { + params: schema.object({ + id: schema.string(), + }), + }, + }, + elasticsearchErrorHandler(log, async (context, request, response) => { + const core = await context.core; + const elasticsearchClient = core.elasticsearch.client; + const dataViewsService = await data.indexPatterns.dataViewsServiceFactory( + savedObjects.getScopedClient(request), + elasticsearchClient.asCurrentUser, + request + ); + + try { + const dataViewId = await fetchAnalyticsCollectionDataViewId( + elasticsearchClient, + dataViewsService, + request.params.id + ); + + return response.ok({ body: dataViewId }); + } catch (error) { + if ((error as Error).message === ErrorCode.ANALYTICS_COLLECTION_NOT_FOUND) { + return createIndexNotFoundError(error, response); + } + + throw error; + } + }) + ); } From c6dc97a80a8176fdad81080c71a2104e2c9995fc Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 15 Feb 2023 13:51:47 +0000 Subject: [PATCH 013/210] [ML] Fix module setup apply to all spaces (#151270) The shared module setup function is not passing across the `applyToAllSpaces` parameter. This only affects plugins calling `setup` via the server side shared function, not the ML plugin itself or any plugins calling the kibana endpoint. --- x-pack/plugins/ml/server/shared_services/providers/modules.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/ml/server/shared_services/providers/modules.ts b/x-pack/plugins/ml/server/shared_services/providers/modules.ts index 7180e0c0094e6..a9672b2ffdc67 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/modules.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/modules.ts @@ -112,7 +112,8 @@ export function getModulesProvider( payload.end, payload.jobOverrides, payload.datafeedOverrides, - payload.estimateModelMemory + payload.estimateModelMemory, + payload.applyToAllSpaces ); }); }, From d04dc43513d747a8f64ea42168e5537486b95ef3 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 15 Feb 2023 13:52:12 +0000 Subject: [PATCH 014/210] [ML] AIOPs: Improve log categorization discover filter label (#151036) Fixes the Discover filters generated by the Log Categorisation page, adding an alias so the whole query isn't displayed. Label is `Categorization - ` Before: ![image](https://user-images.githubusercontent.com/22172091/218516903-2831e416-1b7f-42ee-b296-601d4bb99825.png) After: ![image](https://user-images.githubusercontent.com/22172091/218516727-a7327a20-332f-45bd-907d-40595dfec945.png) --- .../log_categorization/use_discover_links.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts b/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts index a56d5c0cdfc6e..2bc63415f9b95 100644 --- a/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts +++ b/x-pack/plugins/aiops/public/components/log_categorization/use_discover_links.ts @@ -9,6 +9,7 @@ import rison from '@kbn/rison'; import moment from 'moment'; import type { TimeRangeBounds } from '@kbn/data-plugin/common'; +import { i18n } from '@kbn/i18n'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import type { Category } from './use_categorize_request'; import type { QueryMode } from './category_table'; @@ -55,6 +56,16 @@ export function useDiscoverLinks() { })), }, }, + meta: { + alias: i18n.translate('xpack.aiops.logCategorization.filterAliasLabel', { + defaultMessage: 'Categorization - {field}', + values: { + field, + }, + }), + index, + disabled: false, + }, }, ], index, From cab487d7c8fa8c12373e11efa6281dff84b9c1f8 Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Wed, 15 Feb 2023 09:00:00 -0500 Subject: [PATCH 015/210] [RAM] Uptime allow rac api (#151207) ## Summary Allow `rac` api for uptime privileges and to avoid that image --- x-pack/plugins/synthetics/server/feature.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/synthetics/server/feature.ts b/x-pack/plugins/synthetics/server/feature.ts index f68b97668841d..4026bbdb19fb9 100644 --- a/x-pack/plugins/synthetics/server/feature.ts +++ b/x-pack/plugins/synthetics/server/feature.ts @@ -30,7 +30,7 @@ export const uptimeFeature = { all: { app: ['uptime', 'kibana', 'synthetics'], catalogue: ['uptime'], - api: ['uptime-read', 'uptime-write', 'lists-all'], + api: ['uptime-read', 'uptime-write', 'lists-all', 'rac'], savedObject: { all: [ umDynamicSettings.name, From 5fa79fc9b364058464603f527eb30ab1f5d376b4 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 15 Feb 2023 15:03:37 +0100 Subject: [PATCH 016/210] Remove @loaders.gl/polyfills dev-dependency (#151287) --- package.json | 2 - renovate.json | 1 - .../geojson_importer/geojson_importer.test.js | 1 - yarn.lock | 230 +----------------- 4 files changed, 9 insertions(+), 225 deletions(-) diff --git a/package.json b/package.json index bbd67fbd89633..66dd8cb08e49f 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,6 @@ "**/hoist-non-react-statics": "^3.3.2", "**/isomorphic-fetch/node-fetch": "^2.6.7", "**/istanbul-lib-coverage": "^3.2.0", - "**/json-schema": "^0.4.0", "**/minimatch": "^3.1.2", "**/minimist": "^1.2.6", "**/pdfkit/crypto-js": "4.0.0", @@ -1108,7 +1107,6 @@ "@kbn/web-worker-stub": "link:packages/kbn-web-worker-stub", "@kbn/whereis-pkg-cli": "link:packages/kbn-whereis-pkg-cli", "@kbn/yarn-lock-validator": "link:packages/kbn-yarn-lock-validator", - "@loaders.gl/polyfills": "^2.3.5", "@mapbox/vector-tile": "1.3.1", "@octokit/rest": "^16.35.0", "@openpgp/web-stream-tools": "^0.0.10", diff --git a/renovate.json b/renovate.json index ce12b9dd5a248..c72e955dde18d 100644 --- a/renovate.json +++ b/renovate.json @@ -88,7 +88,6 @@ "groupName": "polyfills", "matchPackageNames": ["core-js"], "matchPackagePatterns": ["polyfill"], - "excludePackageNames": ["@loaders.gl/polyfills"], "reviewers": ["team:kibana-operations"], "matchBaseBranches": ["main"], "labels": ["Team:Operations", "release_note:skip"], diff --git a/x-pack/plugins/file_upload/public/importer/geo/geojson_importer/geojson_importer.test.js b/x-pack/plugins/file_upload/public/importer/geo/geojson_importer/geojson_importer.test.js index 7b621c4ccbcad..eb6594422fb10 100644 --- a/x-pack/plugins/file_upload/public/importer/geo/geojson_importer/geojson_importer.test.js +++ b/x-pack/plugins/file_upload/public/importer/geo/geojson_importer/geojson_importer.test.js @@ -6,7 +6,6 @@ */ import { GeoJsonImporter } from './geojson_importer'; -import '@loaders.gl/polyfills'; const FEATURE_COLLECTION = { type: 'FeatureCollection', diff --git a/yarn.lock b/yarn.lock index 99e9088e676e4..188c3c05eec83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5571,19 +5571,6 @@ "@babel/runtime" "^7.3.1" "@probe.gl/stats" "^3.3.0" -"@loaders.gl/polyfills@^2.3.5": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@loaders.gl/polyfills/-/polyfills-2.3.5.tgz#5f32b732c8f2a7e80c221f19ee2d01725f09b5c3" - integrity sha512-sSoeqtH2UJ1eqyM18AnYppLb5dapvWxt4hEv7xXmhXfVXxjBzUonLEg8d3UxfGEsxtxVmbS5DXHyL+uhYcLarw== - dependencies: - "@babel/runtime" "^7.3.1" - get-pixels "^3.3.2" - ndarray "^1.0.18" - save-pixels "^2.3.2" - stream-to-async-iterator "^0.2.0" - through "^2.3.8" - web-streams-polyfill "^3.0.0" - "@loaders.gl/shapefile@^2.3.1": version "2.3.13" resolved "https://registry.yarnpkg.com/@loaders.gl/shapefile/-/shapefile-2.3.13.tgz#5c6c9cc4a113c2f6739c0eb553ae9ceb9d1840ae" @@ -9960,7 +9947,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.11.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.11.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -12371,13 +12358,6 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -contentstream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/contentstream/-/contentstream-1.0.0.tgz#0bdcfa46da30464a86ce8fa7ece565410dc6f9a5" - integrity sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU= - dependencies: - readable-stream "~1.0.33-1" - convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -12900,13 +12880,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cwise-compiler@^1.0.0, cwise-compiler@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" - integrity sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU= - dependencies: - uniq "^1.0.0" - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -13390,11 +13363,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz#18ae979a6a0ca994b0625853916d2662bbae0b1a" - integrity sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo= - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -16302,23 +16270,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pixels@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/get-pixels/-/get-pixels-3.3.2.tgz#3f62fb8811932c69f262bba07cba72b692b4ff03" - integrity sha512-6ar+8yPxRd1pskEcl2GSEu1La0+xYRjjnkby6AYiRDDwZ0tJbPQmHnSeH9fGLskT8kvR0OukVgtZLcsENF9YKQ== - dependencies: - data-uri-to-buffer "0.0.3" - jpeg-js "^0.3.2" - mime-types "^2.0.1" - ndarray "^1.0.13" - ndarray-pack "^1.1.1" - node-bitmap "0.0.1" - omggif "^1.0.5" - parse-data-uri "^0.2.0" - pngjs "^3.3.3" - request "^2.44.0" - through "^2.3.4" - get-port@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" @@ -16390,13 +16341,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gif-encoder@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/gif-encoder/-/gif-encoder-0.4.3.tgz#8a2b4fe8ca895a48e3a0b6cbb340a0a6a3571899" - integrity sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk= - dependencies: - readable-stream "~1.1.9" - git-hooks-list@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-1.0.3.tgz#be5baaf78203ce342f2f844a9d2b03dba1b45156" @@ -16803,19 +16747,6 @@ handlebars@4.7.7, handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -17367,15 +17298,6 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" @@ -17715,11 +17637,6 @@ io-ts@^2.0.5: resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.0.5.tgz#e6e3db9df8b047f9cbd6b69e7d2ad3e6437a0b13" integrity sha512-pL7uUptryanI5Glv+GUv7xh+aLBjxGEDmLwmEYNSx0yOD3djK0Nw5Bt0N6BAkv9LadOUU7QKpRsLcqnTh3UlLA== -iota-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" - integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc= - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -17829,7 +17746,7 @@ is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.0" -is-buffer@^1.0.2, is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -19252,16 +19169,6 @@ joi@^17.3.0, joi@^17.7.1: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -jpeg-js@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.0.4.tgz#06aaf47efec7af0b1924a59cd695a6d2b5ed870e" - integrity sha1-Bqr0fv7HrwsZJKWc1pWm0rXthw4= - -jpeg-js@^0.3.2: - version "0.3.7" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d" - integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== - jquery@^3.5.0: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" @@ -19443,7 +19350,7 @@ json-schema-typed@^8.0.1: resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-8.0.1.tgz#826ee39e3b6cef536f85412ff048d3ff6f19dfa0" integrity sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg== -json-schema@0.2.3, json-schema@0.4.0, json-schema@^0.4.0: +json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -19538,16 +19445,6 @@ jsonwebtoken@^9.0.0: ms "^2.1.1" semver "^7.3.8" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - jsprim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" @@ -20928,7 +20825,7 @@ mime-db@1.51.0, mime-db@1.x.x, "mime-db@>= 1.40.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== -mime-types@^2.0.1, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.34" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== @@ -21468,29 +21365,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -ndarray-ops@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e" - integrity sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4= - dependencies: - cwise-compiler "^1.0.0" - -ndarray-pack@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a" - integrity sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo= - dependencies: - cwise-compiler "^1.1.2" - ndarray "^1.0.13" - -ndarray@^1.0.13, ndarray@^1.0.18: - version "1.0.19" - resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e" - integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ== - dependencies: - iota-array "^1.0.0" - is-buffer "^1.0.2" - nearley@^2.7.10: version "2.16.0" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz#77c297d041941d268290ec84b739d0ee297e83a7" @@ -21591,11 +21465,6 @@ node-addon-api@^5.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501" integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== -node-bitmap@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/node-bitmap/-/node-bitmap-0.0.1.tgz#180eac7003e0c707618ef31368f62f84b2a69091" - integrity sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE= - node-cache@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" @@ -21931,11 +21800,6 @@ nyc@15.1.0, nyc@^15.1.0: test-exclude "^6.0.0" yargs "^15.0.2" -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - object-assign@4.X, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -22087,11 +21951,6 @@ octokit-pagination-methods@^1.1.0: resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== -omggif@^1.0.5: - version "1.0.10" - resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" - integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -22502,13 +22361,6 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" -parse-data-uri@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/parse-data-uri/-/parse-data-uri-0.2.0.tgz#bf04d851dd5c87b0ab238e5d01ace494b604b4c9" - integrity sha1-vwTYUd1ch7CrI45dAazklLYEtMk= - dependencies: - data-uri-to-buffer "0.0.3" - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" @@ -22926,12 +22778,7 @@ png-js@^1.0.0: resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== -pngjs-nozlib@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz#9e64d602cfe9cce4d9d5997d0687429a73f0b7d7" - integrity sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c= - -pngjs@^3.3.3, pngjs@^3.4.0: +pngjs@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== @@ -24592,7 +24439,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.27-1, readable-stream@~1.0.33-1: +readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.27-1: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= @@ -24611,16 +24458,6 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0 string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdir-glob@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" @@ -25117,32 +24954,6 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" -request@^2.44.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -25540,19 +25351,6 @@ sass-loader@^10.4.1: schema-utils "^3.0.0" semver "^7.3.2" -save-pixels@^2.3.2: - version "2.3.4" - resolved "https://registry.yarnpkg.com/save-pixels/-/save-pixels-2.3.4.tgz#49d349c06b8d7c0127dbf0da24b44aca5afb59fe" - integrity sha1-SdNJwGuNfAEn2/DaJLRKylr7Wf4= - dependencies: - contentstream "^1.0.0" - gif-encoder "~0.4.1" - jpeg-js "0.0.4" - ndarray "^1.0.18" - ndarray-ops "^1.2.2" - pngjs-nozlib "^1.0.0" - through "^2.3.4" - sax@>=0.6.0, sax@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -26398,7 +26196,7 @@ sql-summary@^1.0.1: resolved "https://registry.yarnpkg.com/sql-summary/-/sql-summary-1.0.1.tgz#a2dddb5435bae294eb11424a7330dc5bafe09c2b" integrity sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww== -sshpk@^1.14.1, sshpk@^1.7.0: +sshpk@^1.14.1: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== @@ -26599,11 +26397,6 @@ stream-slicer@0.0.6: resolved "https://registry.yarnpkg.com/stream-slicer/-/stream-slicer-0.0.6.tgz#f86b2ac5c2440b7a0a87b71f33665c0788046138" integrity sha1-+GsqxcJEC3oKh7cfM2ZcB4gEYTg= -stream-to-async-iterator@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-to-async-iterator/-/stream-to-async-iterator-0.2.0.tgz#bef5c885e9524f98b2fa5effecc357bd58483780" - integrity sha1-vvXIhelST5iy+l7/7MNXvVhIN4A= - streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" @@ -27379,7 +27172,7 @@ through2@~0.4.1: readable-stream "~1.0.17" xtend "~2.1.1" -"through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4: +"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -28025,11 +27818,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -29042,7 +28830,7 @@ web-namespaces@^1.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== -web-streams-polyfill@^3.0.0, web-streams-polyfill@^3.2.0: +web-streams-polyfill@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965" integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA== From 24efb8597e8ed598f930373a32238e4b54c7309c Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Wed, 15 Feb 2023 08:23:59 -0600 Subject: [PATCH 017/210] [Lens] better support for user messages on embeddable (#149458) --- ...et_application_user_messages.test.tsx.snap | 3 +- .../get_application_user_messages.tsx | 2 +- .../lens/public/embeddable/embeddable.tsx | 229 +++++++++++++----- .../public/embeddable/expression_wrapper.tsx | 143 ++++------- .../kbn_archiver/lens/missing_fields.json | 2 +- 5 files changed, 211 insertions(+), 168 deletions(-) diff --git a/x-pack/plugins/lens/public/app_plugin/__snapshots__/get_application_user_messages.test.tsx.snap b/x-pack/plugins/lens/public/app_plugin/__snapshots__/get_application_user_messages.test.tsx.snap index 0219edefe4b23..437d331f5bdec 100644 --- a/x-pack/plugins/lens/public/app_plugin/__snapshots__/get_application_user_messages.test.tsx.snap +++ b/x-pack/plugins/lens/public/app_plugin/__snapshots__/get_application_user_messages.test.tsx.snap @@ -77,7 +77,8 @@ Array [ href="fake/url" style={ Object { - "display": "block", + "textAlign": "center", + "width": "100%", } } > diff --git a/x-pack/plugins/lens/public/app_plugin/get_application_user_messages.tsx b/x-pack/plugins/lens/public/app_plugin/get_application_user_messages.tsx index f5190ec334157..b56736eabe7ac 100644 --- a/x-pack/plugins/lens/public/app_plugin/get_application_user_messages.tsx +++ b/x-pack/plugins/lens/public/app_plugin/get_application_user_messages.tsx @@ -153,7 +153,7 @@ function getMissingIndexPatternsErrors( href={core.application.getUrlForApp('management', { path: '/kibana/indexPatterns/create', })} - style={{ display: 'block' }} + style={{ width: '100%', textAlign: 'center' }} data-test-subj="configuration-failure-reconfigure-indexpatterns" > {i18n.translate('xpack.lens.editorFrame.dataViewReconfigure', { diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index e89e8c61e3185..a430f8ab66e1e 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -73,6 +73,8 @@ import { MultiClickTriggerEvent, } from '@kbn/charts-plugin/public'; import { DataViewSpec } from '@kbn/data-views-plugin/common'; +import { FormattedMessage, I18nProvider } from '@kbn/i18n-react'; +import { EuiEmptyPrompt } from '@elastic/eui'; import { useEuiFontSize, useEuiTheme } from '@elastic/eui'; import { getExecutionContextEvents, trackUiCounterEvents } from '../lens_ui_telemetry'; import { Document } from '../persistence'; @@ -96,6 +98,7 @@ import { AddUserMessages, isMessageRemovable, UserMessagesGetter, + UserMessagesDisplayLocationId, } from '../types'; import { getEditPath, DOC_TYPE } from '../../common'; @@ -194,6 +197,52 @@ export interface ViewUnderlyingDataArgs { columns: string[]; } +function VisualizationErrorPanel({ errors, canEdit }: { errors: UserMessage[]; canEdit: boolean }) { + const showMore = errors.length > 1; + const canFixInLens = canEdit && errors.some(({ fixableInEditor }) => fixableInEditor); + return ( +
+ + {errors.length ? ( + <> +

{errors[0].longMessage}

+ {showMore && !canFixInLens ? ( +

+ +

+ ) : null} + {canFixInLens ? ( +

+ +

+ ) : null} + + ) : ( +

+ +

+ )} + + } + /> +
+ ); +} + const getExpressionFromDocument = async ( document: Document, documentToExpression: LensEmbeddableDeps['documentToExpression'] @@ -296,6 +345,27 @@ const EmbeddableMessagesPopover = ({ messages }: { messages: UserMessage[] }) => ); }; +const blockingMessageDisplayLocations: UserMessagesDisplayLocationId[] = [ + 'visualization', + 'visualizationOnEmbeddable', +]; + +const MessagesBadge = ({ onMount }: { onMount: (el: HTMLDivElement) => void }) => ( +
{ + if (el) { + onMount(el); + } + }} + /> +); + export class Embeddable extends AbstractEmbeddable implements @@ -311,7 +381,6 @@ export class Embeddable private savedVis: Document | undefined; private expression: string | undefined | null; private domNode: HTMLElement | Element | undefined; - private badgeDomNode: HTMLElement | Element | undefined; private subscription: Subscription; private isInitialized = false; private inputReloadSubscriptions: Subscription[]; @@ -503,10 +572,6 @@ export class Embeddable ); }; - private get hasAnyErrors() { - return this.getUserMessages(undefined, { severity: 'error' }).length > 0; - } - private _userMessages: UserMessage[] = []; // loads all available user messages @@ -583,7 +648,7 @@ export class Embeddable if (addedMessageIds.length) { this.additionalUserMessages = newMessageMap; - this.renderBadgeMessages(); + this.renderUserMessages(); } return () => { @@ -837,22 +902,22 @@ export class Embeddable this.domNode.setAttribute('data-shared-item', ''); - const errors = this.getUserMessages(['visualization', 'visualizationOnEmbeddable'], { + const blockingErrors = this.getUserMessages(blockingMessageDisplayLocations, { severity: 'error', }); this.updateOutput({ loading: true, - error: errors.length + error: blockingErrors.length ? new Error( - typeof errors[0].longMessage === 'string' - ? errors[0].longMessage - : errors[0].shortMessage + typeof blockingErrors[0].longMessage === 'string' + ? blockingErrors[0].longMessage + : blockingErrors[0].shortMessage ) : undefined, }); - if (errors.length) { + if (blockingErrors.length) { this.renderComplete.dispatchError(); } else { this.renderComplete.dispatchInProgress(); @@ -860,59 +925,94 @@ export class Embeddable const input = this.getInput(); - render( - - { - this.updateOutput({ error: new Error(message) }); - this.logError('runtime'); - }} - noPadding={this.visDisplayOptions.noPadding} - /> -
{ - if (el) { + if (this.expression && !blockingErrors.length) { + render( + <> + + this.addUserMessages(messages)} + onRuntimeError={(message) => { + this.updateOutput({ error: new Error(message) }); + this.logError('runtime'); + }} + noPadding={this.visDisplayOptions.noPadding} + /> + + { this.badgeDomNode = el; this.renderBadgeMessages(); - } - }} - /> - , - domNode - ); + }} + /> + , + domNode + ); + } + + this.renderUserMessages(); + } + + private renderUserMessages() { + const errors = this.getUserMessages(['visualization', 'visualizationOnEmbeddable'], { + severity: 'error', + }); + + if (errors.length && this.domNode) { + render( + <> + + + + + + { + this.badgeDomNode = el; + this.renderBadgeMessages(); + }} + /> + , + this.domNode + ); + } + + this.renderBadgeMessages(); } - private renderBadgeMessages() { + badgeDomNode?: HTMLDivElement; + + /** + * This method is called on every render, and also whenever the badges dom node is created + * That happens after either the expression renderer or the visualization error panel is rendered. + * + * You should not call this method on its own. Use renderUserMessages instead. + */ + private renderBadgeMessages = () => { const messages = this.getUserMessages('embeddableBadge'); if (messages.length && this.badgeDomNode) { @@ -923,7 +1023,7 @@ export class Embeddable this.badgeDomNode ); } - } + }; private readonly hasCompatibleActions = async ( event: ExpressionRendererEvent @@ -1186,7 +1286,10 @@ export class Embeddable ]); } - if (this.hasAnyErrors) { + const blockingErrors = this.getUserMessages(blockingMessageDisplayLocations, { + severity: 'error', + }); + if (blockingErrors.length) { this.logError('validation'); } diff --git a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx index 717e28d94ab7a..dbe950661b2fa 100644 --- a/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx +++ b/x-pack/plugins/lens/public/embeddable/expression_wrapper.tsx @@ -7,8 +7,6 @@ import React from 'react'; import { I18nProvider } from '@kbn/i18n-react'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiFlexGroup, EuiFlexItem, EuiText, EuiIcon, EuiEmptyPrompt } from '@elastic/eui'; import { ExpressionRendererEvent, ReactExpressionRendererProps, @@ -20,12 +18,11 @@ import { DefaultInspectorAdapters, RenderMode } from '@kbn/expressions-plugin/co import classNames from 'classnames'; import { getOriginalRequestErrorMessages } from '../editor_frame_service/error_helper'; import { LensInspector } from '../lens_inspector_service'; -import { UserMessage } from '../types'; +import { AddUserMessages } from '../types'; export interface ExpressionWrapperProps { ExpressionRenderer: ReactExpressionRendererType; expression: string | null; - errors: UserMessage[]; variables?: Record; interactive?: boolean; searchContext: ExecutionContextSearch; @@ -44,64 +41,13 @@ export interface ExpressionWrapperProps { getCompatibleCellValueActions?: ReactExpressionRendererProps['getCompatibleCellValueActions']; style?: React.CSSProperties; className?: string; - canEdit: boolean; + addUserMessages: AddUserMessages; onRuntimeError: (message?: string) => void; executionContext?: KibanaExecutionContext; lensInspector: LensInspector; noPadding?: boolean; } -interface VisualizationErrorProps { - errors: ExpressionWrapperProps['errors']; - canEdit: boolean; -} - -export function VisualizationErrorPanel({ errors, canEdit }: VisualizationErrorProps) { - const showMore = errors.length > 1; - const canFixInLens = canEdit && errors.some(({ fixableInEditor }) => fixableInEditor); - return ( -
- - {errors.length ? ( - <> -

{errors[0].longMessage}

- {showMore && !canFixInLens ? ( -

- -

- ) : null} - {canFixInLens ? ( -

- -

- ) : null} - - ) : ( -

- -

- )} - - } - /> -
- ); -} - export function ExpressionWrapper({ ExpressionRenderer: ExpressionRendererComponent, expression, @@ -120,60 +66,53 @@ export function ExpressionWrapper({ getCompatibleCellValueActions, style, className, - errors, - canEdit, onRuntimeError, + addUserMessages, executionContext, lensInspector, noPadding, }: ExpressionWrapperProps) { + if (!expression) return null; return ( - {errors.length || expression === null || expression === '' ? ( - - ) : ( -
- { - const messages = getOriginalRequestErrorMessages(error); - onRuntimeError(messages[0] ?? errorMessage); +
+ { + const messages = getOriginalRequestErrorMessages(error); + addUserMessages( + messages.map((message) => ({ + uniqueId: message, + severity: 'error', + displayLocations: [{ id: 'visualizationOnEmbeddable' }], + longMessage: message, + shortMessage: message, + fixableInEditor: false, + })) + ); + onRuntimeError(messages[0] ?? errorMessage); - return ( -
- - - - - - {messages.map((message) => ( - {message} - ))} - - -
- ); - }} - onEvent={handleEvent} - hasCompatibleActions={hasCompatibleActions} - getCompatibleCellValueActions={getCompatibleCellValueActions} - /> -
- )} + return <>; // the embeddable will take care of displaying the messages + }} + onEvent={handleEvent} + hasCompatibleActions={hasCompatibleActions} + getCompatibleCellValueActions={getCompatibleCellValueActions} + /> +
); } diff --git a/x-pack/test/functional/fixtures/kbn_archiver/lens/missing_fields.json b/x-pack/test/functional/fixtures/kbn_archiver/lens/missing_fields.json index 5668dea137400..20f8c90f92ec0 100644 --- a/x-pack/test/functional/fixtures/kbn_archiver/lens/missing_fields.json +++ b/x-pack/test/functional/fixtures/kbn_archiver/lens/missing_fields.json @@ -289,4 +289,4 @@ "type": "dashboard", "updated_at": "2023-02-07T14:59:20.822Z", "version": "WzM5MCwxXQ==" -} +} \ No newline at end of file From 10c2f4ae5af85f040c47ba2e310b570d230ee567 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Wed, 15 Feb 2023 15:33:15 +0100 Subject: [PATCH 018/210] [Logs and Metrics UI] Make spaces optional plugin (#151053) Closes #149973 # Summary This PR makes `spaces` an optional plugin. In Logs UI we use only the space id and there we want to fallback to the default space id when the space plugin is disabled. The difference to the changes in the other PRs is that we will consider the default space as "active" space if the space plugin is disabled: so in this case we will return the default space id as this is the only property we need from the `getActiveSpace` response. # Testing 1. In the `kibana.dev.yaml` add `xpack.spaces.enabled: false` 2. Before we have this [PR](https://github.com/elastic/kibana/pull/151147) merged you should do [this change](https://github.com/elastic/kibana/pull/151147/files#diff-1b17eae66f358505fae8d86df37e155a25e8db996fce93ee6016582fb341092e) on the branch while testing 3. Inside Logs the `Anomalies` and `Categories` pages should load the default space --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/infra/kibana.jsonc | 2 +- .../plugins/infra/public/hooks/use_kibana_space.ts | 14 ++++++++++++-- x-pack/plugins/infra/public/types.ts | 2 +- .../adapters/framework/kibana_framework_adapter.ts | 13 ++----------- x-pack/plugins/infra/server/plugin.ts | 3 ++- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/infra/kibana.jsonc b/x-pack/plugins/infra/kibana.jsonc index 4e0845922ad8c..bb0e19db45e97 100644 --- a/x-pack/plugins/infra/kibana.jsonc +++ b/x-pack/plugins/infra/kibana.jsonc @@ -15,7 +15,6 @@ "share", "features", "usageCollection", - "spaces", "embeddable", "data", "dataViews", @@ -28,6 +27,7 @@ "unifiedSearch" ], "optionalPlugins": [ + "spaces", "ml", "home", "embeddable", diff --git a/x-pack/plugins/infra/public/hooks/use_kibana_space.ts b/x-pack/plugins/infra/public/hooks/use_kibana_space.ts index 5a90327ff0581..1b468c2b76c11 100644 --- a/x-pack/plugins/infra/public/hooks/use_kibana_space.ts +++ b/x-pack/plugins/infra/public/hooks/use_kibana_space.ts @@ -5,8 +5,8 @@ * 2.0. */ -import useAsync from 'react-use/lib/useAsync'; import type { Space } from '@kbn/spaces-plugin/public'; +import useAsync from 'react-use/lib/useAsync'; import { useKibanaContextForPlugin } from './use_kibana'; export type ActiveSpace = @@ -14,10 +14,20 @@ export type ActiveSpace = | { isLoading: false; error: Error; space: undefined } | { isLoading: false; error: undefined; space: Space }; +// Fallback to default if spaces plugin is not available +const getDefaultSpaceAsPromise = () => + Promise.resolve({ + id: 'default', + name: 'Default', + disabledFeatures: [], + }); + export const useActiveKibanaSpace = (): ActiveSpace => { const kibana = useKibanaContextForPlugin(); + const getActiveSpaceOrDefault = + kibana.services?.spaces?.getActiveSpace ?? getDefaultSpaceAsPromise; - const asyncActiveSpace = useAsync(kibana.services.spaces.getActiveSpace); + const asyncActiveSpace = useAsync(getActiveSpaceOrDefault); if (asyncActiveSpace.loading) { return { diff --git a/x-pack/plugins/infra/public/types.ts b/x-pack/plugins/infra/public/types.ts index cf4f3a0c8b934..97bf31d102558 100644 --- a/x-pack/plugins/infra/public/types.ts +++ b/x-pack/plugins/infra/public/types.ts @@ -71,7 +71,7 @@ export interface InfraClientStartDeps { unifiedSearch: UnifiedSearchPublicPluginStart; dataViews: DataViewsPublicPluginStart; observability: ObservabilityPublicStart; - spaces: SpacesPluginStart; + spaces?: SpacesPluginStart; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; usageCollection: UsageCollectionStart; ml: MlPluginStart; diff --git a/x-pack/plugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts b/x-pack/plugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts index 5c6cde7480c7f..7080a513da82c 100644 --- a/x-pack/plugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts +++ b/x-pack/plugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts @@ -11,6 +11,7 @@ import { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/serve import { CoreSetup, IRouter, KibanaRequest, RequestHandler, RouteMethod } from '@kbn/core/server'; import { UI_SETTINGS } from '@kbn/data-plugin/server'; import { TimeseriesVisData } from '@kbn/vis-type-timeseries-plugin/server'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { TSVBMetricModel } from '../../../../common/inventory_models/types'; import { InfraConfig } from '../../../plugin'; import type { InfraPluginRequestHandlerContext } from '../../../types'; @@ -213,17 +214,7 @@ export class KibanaFramework { } public getSpaceId(request: KibanaRequest): string { - const spacesPlugin = this.plugins.spaces; - - if ( - spacesPlugin && - spacesPlugin.spacesService && - typeof spacesPlugin.spacesService.getSpaceId === 'function' - ) { - return spacesPlugin.spacesService.getSpaceId(request); - } else { - return 'default'; - } + return this.plugins.spaces?.spacesService?.getSpaceId(request) ?? DEFAULT_SPACE_ID; } public async makeTSVBRequest( diff --git a/x-pack/plugins/infra/server/plugin.ts b/x-pack/plugins/infra/server/plugin.ts index a7fa9ceacd3c9..67563f857aedb 100644 --- a/x-pack/plugins/infra/server/plugin.ts +++ b/x-pack/plugins/infra/server/plugin.ts @@ -16,6 +16,7 @@ import { import { handleEsError } from '@kbn/es-ui-shared-plugin/server'; import { i18n } from '@kbn/i18n'; import { Logger } from '@kbn/logging'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { LOGS_FEATURE_ID, METRICS_FEATURE_ID } from '../common/constants'; import { defaultLogViewsStaticConfig } from '../common/log_views'; import { publicConfigKeys } from '../common/plugin_config_types'; @@ -196,7 +197,7 @@ export class InfraServerPlugin const soClient = (await context.core).savedObjects.client; const mlSystem = plugins.ml?.mlSystemProvider(request, soClient); const mlAnomalyDetectors = plugins.ml?.anomalyDetectorsProvider(request, soClient); - const spaceId = plugins.spaces?.spacesService.getSpaceId(request) || 'default'; + const spaceId = plugins.spaces?.spacesService.getSpaceId(request) ?? DEFAULT_SPACE_ID; return { mlAnomalyDetectors, From d579b2fa9c75b76c82572c1c1e7817efdbcc245d Mon Sep 17 00:00:00 2001 From: Tim Grein Date: Wed, 15 Feb 2023 15:36:23 +0100 Subject: [PATCH 019/210] [Enterprise Search] Fix sync flyout (#151175) --- x-pack/plugins/enterprise_search/common/types/connectors.ts | 2 +- .../components/search_index/sync_jobs/sync_job_flyout.tsx | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/enterprise_search/common/types/connectors.ts b/x-pack/plugins/enterprise_search/common/types/connectors.ts index d400259cc56ce..5869d19ae42dc 100644 --- a/x-pack/plugins/enterprise_search/common/types/connectors.ts +++ b/x-pack/plugins/enterprise_search/common/types/connectors.ts @@ -170,7 +170,7 @@ export interface ConnectorSyncJob { completed_at: string | null; connector: { configuration: ConnectorConfiguration; - filtering: FilteringRules[] | null; + filtering: FilteringRules | FilteringRules[] | null; id: string; index_name: string; language: string; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_job_flyout.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_job_flyout.tsx index 13a89d7d4eedd..95fbefa8c773b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_job_flyout.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/sync_jobs/sync_job_flyout.tsx @@ -33,7 +33,11 @@ interface SyncJobFlyoutProps { } export const SyncJobFlyout: React.FC = ({ onClose, syncJob }) => { - const filtering = syncJob?.connector.filtering ? syncJob.connector.filtering[0] : null; + const filtering = syncJob?.connector.filtering + ? Array.isArray(syncJob?.connector.filtering) + ? syncJob?.connector.filtering?.[0] + : syncJob?.connector.filtering + : null; const visible = !!syncJob; return visible ? ( From de87ac12c83e933eabe8334849ea1d580dfa3e91 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 15 Feb 2023 09:56:21 -0500 Subject: [PATCH 020/210] [Fleet] Deleting a FleetProxy should bump related agent policies (#151205) --- .../server/routes/fleet_proxies/handler.ts | 87 ++++++---- .../server/services/fleet_proxies.test.ts | 155 ++++++++++++++++++ .../fleet/server/services/fleet_proxies.ts | 75 ++++++++- .../apis/fleet_proxies/crud.ts | 74 +++++++++ 4 files changed, 353 insertions(+), 38 deletions(-) create mode 100644 x-pack/plugins/fleet/server/services/fleet_proxies.test.ts diff --git a/x-pack/plugins/fleet/server/routes/fleet_proxies/handler.ts b/x-pack/plugins/fleet/server/routes/fleet_proxies/handler.ts index ed77dddb4bf88..5b00baf9bf2c1 100644 --- a/x-pack/plugins/fleet/server/routes/fleet_proxies/handler.ts +++ b/x-pack/plugins/fleet/server/routes/fleet_proxies/handler.ts @@ -6,7 +6,11 @@ */ import type { RequestHandler } from '@kbn/core/server'; -import { SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { + SavedObjectsErrorHelpers, + type SavedObjectsClientContract, + type ElasticsearchClient, +} from '@kbn/core/server'; import type { TypeOf } from '@kbn/config-schema'; import pMap from 'p-map'; @@ -16,15 +20,51 @@ import { deleteFleetProxy, getFleetProxy, updateFleetProxy, + getFleetProxyRelatedSavedObjects, } from '../../services/fleet_proxies'; import { defaultFleetErrorHandler } from '../../errors'; import type { GetOneFleetProxyRequestSchema, PostFleetProxyRequestSchema, PutFleetProxyRequestSchema, + FleetServerHost, + Output, } from '../../types'; -import { listFleetServerHostsForProxyId } from '../../services/fleet_server_host'; -import { agentPolicyService, outputService } from '../../services'; +import { agentPolicyService } from '../../services'; + +async function bumpRelatedPolicies( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + fleetServerHosts: FleetServerHost[], + outputs: Output[] +) { + if ( + fleetServerHosts.some((host) => host.is_default) || + outputs.some((output) => output.is_default || output.is_default_monitoring) + ) { + await agentPolicyService.bumpAllAgentPolicies(soClient, esClient); + } else { + await pMap( + outputs, + (output) => agentPolicyService.bumpAllAgentPoliciesForOutput(soClient, esClient, output.id), + { + concurrency: 20, + } + ); + await pMap( + fleetServerHosts, + (fleetServerHost) => + agentPolicyService.bumpAllAgentPoliciesForFleetServerHosts( + soClient, + esClient, + fleetServerHost.id + ), + { + concurrency: 20, + } + ); + } +} export const postFleetProxyHandler: RequestHandler< undefined, @@ -64,36 +104,8 @@ export const putFleetProxyHandler: RequestHandler< }; // Bump all the agent policy that use that proxy - const [{ items: fleetServerHosts }, { items: outputs }] = await Promise.all([ - listFleetServerHostsForProxyId(soClient, proxyId), - outputService.listAllForProxyId(soClient, proxyId), - ]); - if ( - fleetServerHosts.some((host) => host.is_default) || - outputs.some((output) => output.is_default || output.is_default_monitoring) - ) { - await agentPolicyService.bumpAllAgentPolicies(soClient, esClient); - } else { - await pMap( - outputs, - (output) => agentPolicyService.bumpAllAgentPoliciesForOutput(soClient, esClient, output.id), - { - concurrency: 20, - } - ); - await pMap( - fleetServerHosts, - (fleetServerHost) => - agentPolicyService.bumpAllAgentPoliciesForFleetServerHosts( - soClient, - esClient, - fleetServerHost.id - ), - { - concurrency: 20, - } - ); - } + const { fleetServerHosts, outputs } = await getFleetProxyRelatedSavedObjects(soClient, proxyId); + await bumpRelatedPolicies(soClient, esClient, fleetServerHosts, outputs); return response.ok({ body }); } catch (error) { @@ -109,6 +121,7 @@ export const putFleetProxyHandler: RequestHandler< export const getAllFleetProxyHandler: RequestHandler = async (context, request, response) => { const soClient = (await context.core).savedObjects.client; + try { const res = await listFleetProxies(soClient); const body = { @@ -128,9 +141,17 @@ export const deleteFleetProxyHandler: RequestHandler< TypeOf > = async (context, request, response) => { try { + const proxyId = request.params.itemId; const coreContext = await context.core; const soClient = coreContext.savedObjects.client; + const esClient = coreContext.elasticsearch.client.asInternalUser; + + const { fleetServerHosts, outputs } = await getFleetProxyRelatedSavedObjects(soClient, proxyId); + await deleteFleetProxy(soClient, request.params.itemId); + + await bumpRelatedPolicies(soClient, esClient, fleetServerHosts, outputs); + const body = { id: request.params.itemId, }; diff --git a/x-pack/plugins/fleet/server/services/fleet_proxies.test.ts b/x-pack/plugins/fleet/server/services/fleet_proxies.test.ts new file mode 100644 index 0000000000000..024860e0b6490 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/fleet_proxies.test.ts @@ -0,0 +1,155 @@ +/* + * Copyright 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 { savedObjectsClientMock } from '@kbn/core/server/mocks'; + +import { FLEET_PROXY_SAVED_OBJECT_TYPE } from '../constants'; + +import { deleteFleetProxy } from './fleet_proxies'; +import { listFleetServerHostsForProxyId, updateFleetServerHost } from './fleet_server_host'; +import { outputService } from './output'; + +jest.mock('./output'); +jest.mock('./fleet_server_host'); + +const mockedListFleetServerHostsForProxyId = listFleetServerHostsForProxyId as jest.MockedFunction< + typeof listFleetServerHostsForProxyId +>; + +const mockedUpdateFleetServerHost = updateFleetServerHost as jest.MockedFunction< + typeof updateFleetServerHost +>; + +const mockedOutputService = outputService as jest.Mocked; + +const PROXY_IDS = { + PRECONFIGURED: 'test-preconfigured', + RELATED_PRECONFIGURED: 'test-related-preconfigured', +}; + +describe('Fleet proxies service', () => { + const soClientMock = savedObjectsClientMock.create(); + + beforeEach(() => { + mockedOutputService.update.mockReset(); + soClientMock.delete.mockReset(); + mockedUpdateFleetServerHost.mockReset(); + mockedOutputService.listAllForProxyId.mockImplementation(async (_, proxyId) => { + if (proxyId === PROXY_IDS.RELATED_PRECONFIGURED) { + return { + items: [ + { + id: 'test', + is_preconfigured: true, + type: 'elasticsearch', + name: 'test', + proxy_id: proxyId, + is_default: false, + is_default_monitoring: false, + }, + ], + total: 1, + page: 1, + perPage: 10, + }; + } + + return { + items: [], + total: 0, + page: 1, + perPage: 10, + }; + }); + mockedListFleetServerHostsForProxyId.mockImplementation(async (_, proxyId) => { + if (proxyId === PROXY_IDS.RELATED_PRECONFIGURED) { + return { + items: [ + { + id: 'test', + is_preconfigured: true, + host_urls: ['http://test.fr'], + is_default: false, + name: 'test', + proxy_id: proxyId, + }, + ], + total: 1, + page: 1, + perPage: 10, + }; + } + + return { + items: [], + total: 0, + page: 1, + perPage: 10, + }; + }); + soClientMock.get.mockImplementation(async (type, id) => { + if (type !== FLEET_PROXY_SAVED_OBJECT_TYPE) { + throw new Error(`${type} not mocked in SO client`); + } + + if (id === PROXY_IDS.PRECONFIGURED) { + return { + id, + type, + attributes: { + is_preconfigured: true, + }, + references: [], + }; + } + + if (id === PROXY_IDS.RELATED_PRECONFIGURED) { + return { + id, + type, + attributes: { + is_preconfigured: false, + }, + references: [], + }; + } + + throw new Error(`${id} not found`); + }); + }); + + describe('delete', () => { + it('should not allow to delete preconfigured proxy', async () => { + await expect(() => + deleteFleetProxy(soClientMock, PROXY_IDS.PRECONFIGURED) + ).rejects.toThrowError(/Cannot delete test-preconfigured preconfigured proxy/); + }); + + it('should allow to delete preconfigured proxy with option fromPreconfiguration:true', async () => { + await deleteFleetProxy(soClientMock, PROXY_IDS.PRECONFIGURED, { fromPreconfiguration: true }); + + expect(soClientMock.delete).toBeCalled(); + }); + + it('should not allow to delete proxy wiht related preconfigured saved object', async () => { + await expect(() => + deleteFleetProxy(soClientMock, PROXY_IDS.RELATED_PRECONFIGURED) + ).rejects.toThrowError( + /Cannot delete a proxy used in a preconfigured fleet server hosts or output./ + ); + }); + + it('should allow to delete proxy wiht related preconfigured saved object option fromPreconfiguration:true', async () => { + await deleteFleetProxy(soClientMock, PROXY_IDS.RELATED_PRECONFIGURED, { + fromPreconfiguration: true, + }); + expect(mockedOutputService.update).toBeCalled(); + expect(mockedUpdateFleetServerHost).toBeCalled(); + expect(soClientMock.delete).toBeCalled(); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/fleet_proxies.ts b/x-pack/plugins/fleet/server/services/fleet_proxies.ts index 17ab88a889034..09868568e84a8 100644 --- a/x-pack/plugins/fleet/server/services/fleet_proxies.ts +++ b/x-pack/plugins/fleet/server/services/fleet_proxies.ts @@ -6,10 +6,21 @@ */ import type { SavedObjectsClientContract, SavedObject } from '@kbn/core/server'; +import { omit } from 'lodash'; +import pMap from 'p-map'; import { FLEET_PROXY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../constants'; import { FleetProxyUnauthorizedError } from '../errors'; -import type { FleetProxy, FleetProxySOAttributes, NewFleetProxy } from '../types'; +import type { + FleetProxy, + FleetProxySOAttributes, + FleetServerHost, + NewFleetProxy, + Output, +} from '../types'; + +import { listFleetServerHostsForProxyId, updateFleetServerHost } from './fleet_server_host'; +import { outputService } from './output'; function savedObjectToFleetProxy(so: SavedObject): FleetProxy { const { proxy_headers: proxyHeaders, ...rest } = so.attributes; @@ -79,14 +90,25 @@ export async function deleteFleetProxy( id: string, options?: { fromPreconfiguration?: boolean } ) { - const fleetServerHost = await getFleetProxy(soClient, id); + const fleetProxy = await getFleetProxy(soClient, id); - if (fleetServerHost.is_preconfigured && !options?.fromPreconfiguration) { + if (fleetProxy.is_preconfigured && !options?.fromPreconfiguration) { throw new FleetProxyUnauthorizedError(`Cannot delete ${id} preconfigured proxy`); } + const { outputs, fleetServerHosts } = await getFleetProxyRelatedSavedObjects(soClient, id); + + if ( + [...fleetServerHosts, ...outputs].some( + (fleetServerHostOrOutput) => fleetServerHostOrOutput.is_preconfigured + ) && + !options?.fromPreconfiguration + ) { + throw new FleetProxyUnauthorizedError( + 'Cannot delete a proxy used in a preconfigured fleet server hosts or output.' + ); + } - // TODO remove from all outputs and fleet server - // await agentPolicyService.removeFleetServerHostFromAll(soClient, esClient, id); + await updateRelatedSavedObject(soClient, fleetServerHosts, outputs); return await soClient.delete(FLEET_PROXY_SAVED_OBJECT_TYPE, id); } @@ -147,3 +169,46 @@ export async function bulkGetFleetProxies( typeof fleetProxyOrUndefined !== 'undefined' ); } + +async function updateRelatedSavedObject( + soClient: SavedObjectsClientContract, + fleetServerHosts: FleetServerHost[], + outputs: Output[] +) { + await pMap( + fleetServerHosts, + (fleetServerHost) => { + updateFleetServerHost(soClient, fleetServerHost.id, { + ...omit(fleetServerHost, 'id'), + proxy_id: null, + }); + }, + { concurrency: 20 } + ); + + await pMap( + outputs, + (output) => { + outputService.update(soClient, output.id, { + ...omit(output, 'id'), + proxy_id: null, + }); + }, + { concurrency: 20 } + ); +} + +export async function getFleetProxyRelatedSavedObjects( + soClient: SavedObjectsClientContract, + proxyId: string +) { + const [{ items: fleetServerHosts }, { items: outputs }] = await Promise.all([ + listFleetServerHostsForProxyId(soClient, proxyId), + outputService.listAllForProxyId(soClient, proxyId), + ]); + + return { + fleetServerHosts, + outputs, + }; +} diff --git a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts index 91895867404be..b769b9fdb2618 100644 --- a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts @@ -15,6 +15,21 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const es = getService('es'); + + async function getLatestFleetPolicies(policyId: string): Promise { + const policyDocRes = await es.search({ + index: '.fleet-policies', + query: { + term: { + policy_id: policyId, + }, + }, + sort: [{ '@timestamp': 'desc' }], + }); + + return policyDocRes.hits.hits[0]?._source; + } describe('fleet_proxies_crud', async function () { skipIfNoDockerRegistry(providerContext); @@ -25,6 +40,9 @@ export default function (providerContext: FtrProviderContext) { setupFleetAndAgents(providerContext); const existingId = 'test-default-123'; + const fleetServerHostId = 'test-fleetserver-123'; + const policyId = 'test-policy-123'; + const outputId = 'test-output-123'; before(async function () { await kibanaServer.savedObjects.clean({ @@ -39,10 +57,46 @@ export default function (providerContext: FtrProviderContext) { url: 'https://test.fr:3232', }) .expect(200); + await supertest + .post(`/api/fleet/fleet_server_hosts`) + .set('kbn-xsrf', 'xxxx') + .send({ + id: fleetServerHostId, + name: 'Test 123', + host_urls: ['https://fleetserverhost.fr:3232'], + proxy_id: existingId, + }) + .expect(200); + await supertest + .post(`/api/fleet/outputs`) + .set('kbn-xsrf', 'xxxx') + .send({ + id: outputId, + name: 'Test 123', + type: 'elasticsearch', + hosts: ['http://es:9200'], + proxy_id: existingId, + }) + .expect(200); + + await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + id: policyId, + name: 'Test 123', + namespace: 'default', + fleet_server_host_id: fleetServerHostId, + data_output_id: outputId, + }) + .expect(200); }); after(async () => { await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.clean({ + types: ['fleet-proxy'], + }); await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); }); @@ -82,6 +136,7 @@ export default function (providerContext: FtrProviderContext) { .set('kbn-xsrf', 'xxxx') .send({ name: 'Test 123 updated', + url: 'https://testupdated.fr:3232', }) .expect(200); @@ -90,6 +145,12 @@ export default function (providerContext: FtrProviderContext) { } = await supertest.get(`/api/fleet/proxies/${existingId}`).expect(200); expect(fleetServerHost.name).to.eql('Test 123 updated'); + + const fleetPolicyAfter = await getLatestFleetPolicies(policyId); + expect(fleetPolicyAfter?.data?.fleet?.proxy_url).to.be('https://testupdated.fr:3232'); + expect(fleetPolicyAfter?.data?.outputs?.[outputId].proxy_url).to.be( + 'https://testupdated.fr:3232' + ); }); it('should return a 404 when updating a non existing fleet proxy', async function () { @@ -102,5 +163,18 @@ export default function (providerContext: FtrProviderContext) { .expect(404); }); }); + + describe('DELETE /proxies/{itemId}', () => { + it('should allow to delete an existing fleet proxy', async function () { + await supertest + .delete(`/api/fleet/proxies/${existingId}`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + + const fleetPolicyAfter = await getLatestFleetPolicies(policyId); + expect(fleetPolicyAfter?.data?.fleet?.proxy_url).to.be(undefined); + expect(fleetPolicyAfter?.data?.outputs?.[outputId].proxy_url).to.be(undefined); + }); + }); }); } From d37a4d6fbed4b490c9d5753679dcc8eb3b57f89e Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 15 Feb 2023 08:02:38 -0700 Subject: [PATCH 021/210] [Maps] fix Map crashes on field edit when hitting backspace key (#151203) Fixes https://github.com/elastic/kibana/issues/151121 There were 2 issues 1) user could delete right field, putting layer in non-working state. To fix this, update handler is not called when selected value is undefined 2) createJoinTermSource guard was not working for `{ term: undefined }`. PR updated guard to properly handle this case. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../public/classes/joins/inner_join.test.js | 60 +++++++++++++++++-- .../maps/public/classes/joins/inner_join.ts | 6 +- .../sources/es_term_source/es_term_source.ts | 5 +- .../join_editor/resources/join_expression.tsx | 10 +++- 4 files changed, 68 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/maps/public/classes/joins/inner_join.test.js b/x-pack/plugins/maps/public/classes/joins/inner_join.test.js index f8ca092e9a164..b01d977972a68 100644 --- a/x-pack/plugins/maps/public/classes/joins/inner_join.test.js +++ b/x-pack/plugins/maps/public/classes/joins/inner_join.test.js @@ -5,7 +5,7 @@ * 2.0. */ -import { InnerJoin } from './inner_join'; +import { createJoinTermSource, InnerJoin } from './inner_join'; import { SOURCE_TYPES } from '../../../common/constants'; jest.mock('../../kibana_services', () => {}); @@ -38,8 +38,56 @@ const leftJoin = new InnerJoin( ); const COUNT_PROPERTY_NAME = '__kbnjoin__count__d3625663-5b34-4d50-a784-0d743f676a0c'; +describe('createJoinTermSource', () => { + test('Should return undefined when descriptor is not provided', () => { + expect(createJoinTermSource(undefined)).toBe(undefined); + }); + + test('Should return undefined with unmatched source type', () => { + expect( + createJoinTermSource({ + type: SOURCE_TYPES.WMS, + }) + ).toBe(undefined); + }); + + describe('EsTermSource', () => { + test('Should return EsTermSource', () => { + expect(createJoinTermSource(rightSource).constructor.name).toBe('ESTermSource'); + }); + + test('Should return undefined when indexPatternId is undefined', () => { + expect( + createJoinTermSource({ + ...rightSource, + indexPatternId: undefined, + }) + ).toBe(undefined); + }); + + test('Should return undefined when term is undefined', () => { + expect( + createJoinTermSource({ + ...rightSource, + term: undefined, + }) + ).toBe(undefined); + }); + }); + + describe('TableSource', () => { + test('Should return TableSource', () => { + expect( + createJoinTermSource({ + type: SOURCE_TYPES.TABLE_SOURCE, + }).constructor.name + ).toBe('TableSource'); + }); + }); +}); + describe('joinPropertiesToFeature', () => { - it('Should add join property to features in feature collection', () => { + test('Should add join property to features in feature collection', () => { const feature = { properties: { iso2: 'CN', @@ -59,7 +107,7 @@ describe('joinPropertiesToFeature', () => { }); }); - it('Should delete previous join property values from feature', () => { + test('Should delete previous join property values from feature', () => { const feature = { properties: { iso2: 'CN', @@ -79,7 +127,7 @@ describe('joinPropertiesToFeature', () => { }); }); - it('Should coerce to string before joining', () => { + test('Should coerce to string before joining', () => { const leftJoin = new InnerJoin( { leftField: 'zipcode', @@ -107,7 +155,7 @@ describe('joinPropertiesToFeature', () => { }); }); - it('Should handle undefined values', () => { + test('Should handle undefined values', () => { const feature = { //this feature does not have the iso2 field properties: { @@ -127,7 +175,7 @@ describe('joinPropertiesToFeature', () => { }); }); - it('Should handle falsy values', () => { + test('Should handle falsy values', () => { const leftJoin = new InnerJoin( { leftField: 'code', diff --git a/x-pack/plugins/maps/public/classes/joins/inner_join.ts b/x-pack/plugins/maps/public/classes/joins/inner_join.ts index b8b96352625fc..b3a55ea55decd 100644 --- a/x-pack/plugins/maps/public/classes/joins/inner_join.ts +++ b/x-pack/plugins/maps/public/classes/joins/inner_join.ts @@ -26,7 +26,7 @@ import { PropertiesMap } from '../../../common/elasticsearch_util'; import { ITermJoinSource } from '../sources/term_join_source'; import { TableSource } from '../sources/table_source'; -function createJoinTermSource( +export function createJoinTermSource( descriptor: Partial | undefined ): ITermJoinSource | undefined { if (!descriptor) { @@ -35,8 +35,8 @@ function createJoinTermSource( if ( descriptor.type === SOURCE_TYPES.ES_TERM_SOURCE && - 'indexPatternId' in descriptor && - 'term' in descriptor + descriptor.indexPatternId !== undefined && + descriptor.term !== undefined ) { return new ESTermSource(descriptor as ESTermSourceDescriptor); } else if (descriptor.type === SOURCE_TYPES.TABLE_SOURCE) { diff --git a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts index 71ce42be22ab0..a8a756eeb3aed 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_term_source/es_term_source.ts @@ -5,7 +5,6 @@ * 2.0. */ -import _ from 'lodash'; import { i18n } from '@kbn/i18n'; import type { Query } from '@kbn/es-query'; import { ISearchSource } from '@kbn/data-plugin/public'; @@ -42,7 +41,7 @@ type ESTermSourceSyncMeta = Pick(); - const buckets: any[] = _.get(rawEsData, ['aggregations', TERMS_AGG_NAME, 'buckets'], []); + const buckets: any[] = rawEsData?.aggregations?.[TERMS_AGG_NAME]?.buckets ?? []; buckets.forEach((termBucket: any) => { const properties = extractPropertiesFromBucket(termBucket, TERMS_BUCKET_KEYS_TO_IGNORE); if (countPropertyName) { @@ -83,7 +82,7 @@ export class ESTermSource extends AbstractESAggSource implements ITermJoinSource } hasCompleteConfig(): boolean { - return _.has(this._descriptor, 'indexPatternId') && _.has(this._descriptor, 'term'); + return this._descriptor.indexPatternId !== undefined && this._descriptor.term !== undefined; } getTermField(): ESDocField { diff --git a/x-pack/plugins/maps/public/connected_components/edit_layer_panel/join_editor/resources/join_expression.tsx b/x-pack/plugins/maps/public/connected_components/edit_layer_panel/join_editor/resources/join_expression.tsx index 9e55833698c7d..c70730c0f3f62 100644 --- a/x-pack/plugins/maps/public/connected_components/edit_layer_panel/join_editor/resources/join_expression.tsx +++ b/x-pack/plugins/maps/public/connected_components/edit_layer_panel/join_editor/resources/join_expression.tsx @@ -84,6 +84,14 @@ export class JoinExpression extends Component { this.props.onLeftFieldChange(_.get(selectedFields, '[0].value.name', null)); }; + _onRightFieldChange = (term?: string) => { + if (!term || term.length === 0) { + return; + } + + this.props.onRightFieldChange(term); + }; + _renderLeftFieldSelect() { const { leftValue, leftFields } = this.props; @@ -167,7 +175,7 @@ export class JoinExpression extends Component { From 56d64544bbb683cd380c18c6bbdf64f199c41567 Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Wed, 15 Feb 2023 16:05:15 +0100 Subject: [PATCH 022/210] [SecuritySolutions] Fix show-top-n not rendered for some security fields (#151257) I went through every usage of `CellActions` and added the `aggregatable` prop back to fields that previously had it. ### Why? When I created CellActions I removed `isAgreggatable` from some fields because every field with an aggregatable type would automatically display `showTopN`. But later, I discovered that this approach didn't work for some edge cases. I reintroduced the `isAgreggatable` prop but forgot to add `isAgreggatable` back to those fields I had previously removed it. ### Extra It also fixes the network page country flag type from`geo_point` to `keyword` to fix a bug. It also adds an extra check to add_to_timeline `isCompatible` function so it doesn't show for `geo_point` and `message` fields. ![Screenshot 2023-02-15 at 11 53 35](https://user-images.githubusercontent.com/1490444/219011030-c3be4cc4-c095-4b89-8a64-5e29d0b3ba1b.png) ### 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 --- .../actions/add_to_timeline/cell_action/add_to_timeline.ts | 5 +++-- .../public/actions/add_to_timeline/data_provider.ts | 5 ++++- .../hosts/components/host_risk_score_table/columns.tsx | 1 + .../public/explore/hosts/components/hosts_table/columns.tsx | 1 + .../explore/network/components/network_dns_table/columns.tsx | 1 + .../components/network_top_countries_table/columns.tsx | 1 + .../network/components/network_top_n_flow_table/columns.tsx | 4 +++- .../users/components/user_risk_score_table/columns.tsx | 1 + 8 files changed, 15 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts index c444a46cd6407..1fb2f5cee22f9 100644 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/cell_action/add_to_timeline.ts @@ -18,7 +18,7 @@ import { ADD_TO_TIMELINE_ICON, ADD_TO_TIMELINE_SUCCESS_TITLE, } from '../constants'; -import { createDataProviders } from '../data_provider'; +import { createDataProviders, isValidDataProviderField } from '../data_provider'; import { SecurityCellActionType } from '../../constants'; import type { StartServices } from '../../../types'; import type { SecurityCellAction } from '../../types'; @@ -38,7 +38,8 @@ export const createAddToTimelineCellActionFactory = createCellActionFactory( getIconType: () => ADD_TO_TIMELINE_ICON, getDisplayName: () => ADD_TO_TIMELINE, getDisplayNameTooltip: () => ADD_TO_TIMELINE, - isCompatible: async ({ field }) => fieldHasCellActions(field.name), + isCompatible: async ({ field }) => + fieldHasCellActions(field.name) && isValidDataProviderField(field.name, field.type), execute: async ({ field, metadata }) => { const dataProviders = createDataProviders({ diff --git a/x-pack/plugins/security_solution/public/actions/add_to_timeline/data_provider.ts b/x-pack/plugins/security_solution/public/actions/add_to_timeline/data_provider.ts index a7593a93849de..e7c6cfcbe46be 100644 --- a/x-pack/plugins/security_solution/public/actions/add_to_timeline/data_provider.ts +++ b/x-pack/plugins/security_solution/public/actions/add_to_timeline/data_provider.ts @@ -85,7 +85,7 @@ export const createDataProviders = ({ value ? `-${value}` : '' }`; - if (fieldType === GEO_FIELD_TYPE || field === MESSAGE_FIELD_NAME) { + if (!isValidDataProviderField(field, fieldType)) { return dataProviders; } @@ -131,6 +131,9 @@ export const createDataProviders = ({ }, []); }; +export const isValidDataProviderField = (fieldName: string, fieldType: string | undefined) => + fieldType !== GEO_FIELD_TYPE && fieldName !== MESSAGE_FIELD_NAME; + const getIdForField = ({ field, fieldFormat, diff --git a/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx index 3d7729a5e9ac7..557dcff247a6b 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/components/host_risk_score_table/columns.tsx @@ -44,6 +44,7 @@ export const getHostRiskScoreColumns = ({ name: 'host.name', value: hostName, type: 'keyword', + aggregatable: true, }} > diff --git a/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx index 1dcff6fbb0afd..9078a103b389d 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/components/hosts_table/columns.tsx @@ -44,6 +44,7 @@ export const getHostsColumns = ( name: 'host.name', value: hostName[0], type: 'keyword', + aggregatable: true, }} > diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx index c343742143ac2..ee87bab1208fd 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_dns_table/columns.tsx @@ -50,6 +50,7 @@ export const getNetworkDnsColumns = (): NetworkDnsColumns => [ name: 'dns.question.registered_domain', value: dnsName, type: 'keyword', + aggregatable: true, }} > {defaultToEmptyTag(dnsName)} diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx index d7b443e1ab326..314bd13042dc6 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_top_countries_table/columns.tsx @@ -68,6 +68,7 @@ export const getNetworkTopCountriesColumns = ( name: geoAttr, value: geo, type: 'keyword', + aggregatable: true, }} > diff --git a/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx index 6d11df641286b..9ece66b14df97 100644 --- a/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/components/network_top_n_flow_table/columns.tsx @@ -76,6 +76,7 @@ export const getNetworkTopNFlowColumns = ( name: ipAttr, value: ip, type: 'keyword', + aggregatable: true, }} > @@ -91,7 +92,8 @@ export const getNetworkTopNFlowColumns = ( field={{ name: geoAttrName, value: geo, - type: 'geo_point', + type: 'keyword', + aggregatable: true, }} > {' '} diff --git a/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx b/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx index 3fd6d86cc0b92..86a57109ac431 100644 --- a/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/components/user_risk_score_table/columns.tsx @@ -47,6 +47,7 @@ export const getUserRiskScoreColumns = ({ name: 'user.name', value: userName, type: 'keyword', + aggregatable: true, }} > From 8244a9f71362a49af0c3fe2a9da0b7f206c5b5fc Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 15 Feb 2023 16:20:46 +0100 Subject: [PATCH 023/210] Remove unused minimist resolution (#151291) --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 66dd8cb08e49f..996b65f226ccb 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "**/isomorphic-fetch/node-fetch": "^2.6.7", "**/istanbul-lib-coverage": "^3.2.0", "**/minimatch": "^3.1.2", - "**/minimist": "^1.2.6", "**/pdfkit/crypto-js": "4.0.0", "**/react-syntax-highlighter": "^15.3.1", "**/react-syntax-highlighter/**/highlight.js": "^10.4.1", From 5de13d49acb69977d92498cc08e5bf03a7b365ff Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Wed, 15 Feb 2023 10:25:05 -0500 Subject: [PATCH 024/210] [Saved Objects] Migrates authorization logic from repository to security extension (#148165) Closes #147049 Closes #149897 Migrates authorization and audit logic from the Saved Objects Repository to the Saved Objects Security Extension. This is achieved by implementing action-specific authorization methods within the security extension. The SO repository is no longer responsible for making any authorization decisions, but It is still responsible to know how to call the extension methods. I've tried to make this as straightforward as possible such that there is a clear ownership delineation between the repository and the extension, by keeping the interface simple and (hopefully) obvious. ### Security Extension Interface New Public Extension Methods: - authorizeCreate - authorizeBulkCreate - authorizeUpdate - authorizeBulkUpdate - authorizeDelete - authorizeBulkDelete - authorizeGet - authorizeBulkGet - authorizeCheckConflicts - authorizeRemoveReferences - authorizeOpenPointInTime - auditClosePointInTime - authorizeAndRedactMultiNamespaceReferences - authorizeAndRedactInternalBulkResolve - authorizeUpdateSpaces - authorizeFind - getFindRedactTypeMap - authorizeDisableLegacyUrlAliases (for secure spaces client) - auditObjectsForSpaceDeletion (for secure spaces client) Removed from public interface: - authorize - enforceAuthorization - addAuditEvent ### Tests - Most test coverage moved from `repository.security_extension.test.ts` to `saved_objects_security_extension.test.ts` - `repository.security_extension.test.ts` tests extension call, parameters, and return - Updates repository unit tests to check that all security extension calls are made with the current space when the spaces extension is also enabled --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: gchaps <33642766+gchaps@users.noreply.github.com> --- docs/user/security/audit-logging.asciidoc | 14 +- .../src/saved_objects_client.ts | 1 - .../tsconfig.json | 2 +- ...collect_multi_namespace_references.test.ts | 190 +- .../lib/collect_multi_namespace_references.ts | 211 +- .../src/lib/decorate_es_error.test.ts | 2 +- .../src/lib/decorate_es_error.ts | 2 +- .../src/lib/filter_utils.ts | 2 +- .../src/lib/internal_bulk_resolve.test.ts | 140 +- .../src/lib/internal_bulk_resolve.ts | 119 +- .../src/lib/internal_utils.ts | 15 +- .../src/lib/preflight_check_for_create.ts | 12 +- .../lib/repository.security_extension.test.ts | 1477 ++-- .../lib/repository.spaces_extension.test.ts | 313 +- .../src/lib/repository.test.ts | 13 +- .../src/lib/repository.ts | 450 +- .../src/lib/repository_es_client.test.ts | 2 +- .../src/lib/update_objects_spaces.test.ts | 401 +- .../src/lib/update_objects_spaces.ts | 76 +- .../mocks/saved_objects_extensions.mock.ts | 22 +- .../src/saved_objects_client.ts | 3 +- .../test_helpers/repository.test.common.ts | 92 +- .../src/saved_objects_client.mock.ts | 2 +- .../src/saved_objects_extensions.mock.ts | 22 +- .../tsconfig.json | 1 - .../src/version/decode_version.ts | 2 +- .../src/saved_objects_client.ts | 1 - .../core-saved-objects-common/index.ts | 2 +- .../src/server_types.ts | 5 + .../core-saved-objects-common/src/types.ts | 19 + .../export/collect_exported_objects.test.ts | 2 +- .../src/export/collect_exported_objects.ts | 2 +- .../src/export/saved_objects_exporter.ts | 2 +- .../src/import/import_saved_objects.test.ts | 2 +- .../src/import/lib/check_conflicts.test.ts | 7 +- .../src/import/lib/collect_saved_objects.ts | 1 - .../import/lib/create_saved_objects.test.ts | 3 +- .../src/import/lib/create_saved_objects.ts | 3 +- .../import/lib/execute_import_hooks.test.ts | 3 +- .../src/import/lib/execute_import_hooks.ts | 3 +- .../src/import/lib/extract_errors.test.ts | 7 +- .../src/import/lib/extract_errors.ts | 3 +- .../get_import_state_map_for_retries.test.ts | 1 + .../lib/get_import_state_map_for_retries.ts | 1 + .../import/lib/validate_references.test.ts | 2 +- .../src/import/resolve_import_errors.test.ts | 3 +- .../src/import/resolve_import_errors.ts | 2 +- .../tsconfig.json | 1 - .../src/routes/utils.ts | 4 +- .../tsconfig.json | 1 - .../core-saved-objects-server/index.ts | 30 +- .../src/extensions/extensions.ts | 3 + .../src/extensions/security.ts | 526 +- .../src/saved_objects_error_helpers.test.ts | 0 .../src/saved_objects_error_helpers.ts | 448 ++ .../src/saved_objects_management.ts | 2 +- .../core-saved-objects-server/tsconfig.json | 1 - .../core-saved-objects-utils-server/index.ts | 1 - .../src/saved_objects_error_helpers.ts | 217 - .../src/clients/ui_settings_client_common.ts | 2 +- .../create_or_upgrade_saved_config.test.ts | 2 +- .../create_or_upgrade_saved_config.ts | 2 +- .../src/routes/delete.ts | 2 +- .../src/routes/get.ts | 2 +- .../src/routes/set.ts | 2 +- .../src/routes/set_many.ts | 2 +- .../src/saved_objects/transforms.test.ts | 2 +- .../src/saved_objects/transforms.ts | 2 +- .../tsconfig.json | 1 - src/core/server/index.ts | 6 +- .../saved_objects/routes/import.test.ts | 2 +- .../get_telemetry_saved_object.ts | 2 +- src/plugins/telemetry/tsconfig.json | 1 - .../services/epm/archive/storage.test.ts | 2 +- x-pack/plugins/fleet/tsconfig.json | 1 - .../server/services/slo/slo_repository.ts | 2 +- x-pack/plugins/observability/tsconfig.json | 1 - .../server/audit/audit_events.test.ts | 2 +- .../security/server/audit/audit_events.ts | 8 +- .../saved_objects_security_extension.test.ts | 6213 ++++++++++++++++- .../saved_objects_security_extension.ts | 1190 +++- .../secure_spaces_client_wrapper.test.ts | 92 +- .../spaces/secure_spaces_client_wrapper.ts | 62 +- x-pack/plugins/security/tsconfig.json | 4 + .../server/__mocks__/core.mock.ts | 3 +- x-pack/plugins/spaces/common/index.ts | 8 +- x-pack/plugins/spaces/common/types.ts | 18 - .../components/types.ts | 2 +- .../public/spaces_manager/spaces_manager.ts | 8 +- x-pack/plugins/spaces/server/index.ts | 8 +- .../server/spaces_client/spaces_client.ts | 9 +- x-pack/plugins/spaces/tsconfig.json | 1 + 92 files changed, 9507 insertions(+), 3051 deletions(-) rename packages/core/saved-objects/{core-saved-objects-utils-server => core-saved-objects-server}/src/saved_objects_error_helpers.test.ts (100%) create mode 100644 packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts delete mode 100644 packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts diff --git a/docs/user/security/audit-logging.asciidoc b/docs/user/security/audit-logging.asciidoc index e4fd9111b216a..61ecb7aee11bb 100644 --- a/docs/user/security/audit-logging.asciidoc +++ b/docs/user/security/audit-logging.asciidoc @@ -123,18 +123,18 @@ Refer to the corresponding {es} logs for potential write errors. | `unknown` | User is updating a saved object. | `failure` | User is not authorized to update a saved object. -.2+| `saved_object_add_to_spaces` -| `unknown` | User is adding a saved object to other spaces. -| `failure` | User is not authorized to add a saved object to other spaces. - -.2+| `saved_object_delete_from_spaces` -| `unknown` | User is removing a saved object from other spaces. -| `failure` | User is not authorized to remove a saved object from other spaces. +.2+| `saved_object_update_objects_spaces` +| `unknown` | User is adding and/or removing a saved object to/from other spaces. +| `failure` | User is not authorized to add or remove a saved object to or from other spaces. .2+| `saved_object_remove_references` | `unknown` | User is removing references to a saved object. | `failure` | User is not authorized to remove references to a saved object. +.2+| `saved_object_collect_multinamespace_references` +| `success` | User has accessed references to a multi-space saved object. +| `failure` | User is not authorized to access references to a multi-space saved object. + .2+| `connector_update` | `unknown` | User is updating a connector. | `failure` | User is not authorized to update a connector. diff --git a/packages/core/saved-objects/core-saved-objects-api-browser/src/saved_objects_client.ts b/packages/core/saved-objects/core-saved-objects-api-browser/src/saved_objects_client.ts index d92b39f6c15a6..9a3d5f1e23317 100644 --- a/packages/core/saved-objects/core-saved-objects-api-browser/src/saved_objects_client.ts +++ b/packages/core/saved-objects/core-saved-objects-api-browser/src/saved_objects_client.ts @@ -22,7 +22,6 @@ import type { SavedObjectsBulkDeleteResponse, SavedObjectsBulkDeleteOptions, } from './apis'; - import type { SimpleSavedObject } from './simple_saved_object'; /** diff --git a/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json b/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json index 271f341183fce..5d64239e4a8f3 100644 --- a/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-api-browser/tsconfig.json @@ -12,7 +12,7 @@ ], "kbn_references": [ "@kbn/core-saved-objects-common", - "@kbn/core-saved-objects-api-server" + "@kbn/core-saved-objects-api-server", ], "exclude": [ "target/**/*", diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.test.ts index c9529a6828d7a..b4e788dd2973a 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.test.ts @@ -17,11 +17,6 @@ import type { SavedObjectsCollectMultiNamespaceReferencesObject, SavedObjectsCollectMultiNamespaceReferencesOptions, } from '@kbn/core-saved-objects-api-server'; -import { - setMapsAreEqual, - SavedObjectsErrorHelpers, - setsAreEqual, -} from '@kbn/core-saved-objects-utils-server'; import { SavedObjectsSerializer } from '@kbn/core-saved-objects-base-server-internal'; import { typeRegistryMock } from '@kbn/core-saved-objects-base-server-mocks'; import { @@ -30,16 +25,16 @@ import { } from './collect_multi_namespace_references'; import { collectMultiNamespaceReferences } from './collect_multi_namespace_references'; import type { CreatePointInTimeFinderFn } from './point_in_time_finder'; -import { AuditAction, type ISavedObjectsSecurityExtension } from '@kbn/core-saved-objects-server'; - import { - authMap, enforceError, - setupPerformAuthFullyAuthorized, - setupPerformAuthEnforceFailure, - setupRedactPassthrough, + setupAuthorizeAndRedactMultiNamespaceReferenencesFailure, + setupAuthorizeAndRedactMultiNamespaceReferenencesSuccess, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; +import { + type ISavedObjectsSecurityExtension, + SavedObjectsErrorHelpers, +} from '@kbn/core-saved-objects-server'; const SPACES = ['default', 'another-space']; const VERSION_PROPS = { _seq_no: 1, _primary_term: 1 }; @@ -474,8 +469,38 @@ describe('collectMultiNamespaceReferences', () => { const obj1LegacySpaces = ['space-1', 'space-2', 'space-3', 'space-4']; let params: CollectMultiNamespaceReferencesParams; + const expectedObjects = [ + { + id: 'id-1', + inboundReferences: [], + originId: undefined, + spaces: ['default', 'another-space'], + spacesWithMatchingAliases: ['space-1', 'space-2', 'space-3', 'space-4'], + spacesWithMatchingOrigins: undefined, + type: 'type-a', + }, + { + id: 'id-2', + inboundReferences: [], + originId: undefined, + spaces: ['default', 'another-space'], + spacesWithMatchingAliases: undefined, + spacesWithMatchingOrigins: undefined, + type: 'type-a', + }, + { + id: 'id-3', + inboundReferences: [{ id: 'id-1', name: 'ref-name', type: 'type-a' }], + originId: undefined, + spaces: ['default', 'another-space'], + spacesWithMatchingAliases: undefined, + spacesWithMatchingOrigins: undefined, + type: 'type-a', + }, + ]; + beforeEach(() => { - params = setup([obj1, obj2], {}, mockSecurityExt); + params = setup(objects, {}, mockSecurityExt); mockMgetResults({ found: true, references: [obj3] }, { found: true, references: [] }); // results for obj1 and obj2 mockMgetResults({ found: true, references: [] }); // results for obj3 mockFindLegacyUrlAliases.mockResolvedValue( @@ -487,71 +512,46 @@ describe('collectMultiNamespaceReferences', () => { }); afterEach(() => { - mockSecurityExt.performAuthorization.mockReset(); - mockSecurityExt.enforceAuthorization.mockReset(); - mockSecurityExt.redactNamespaces.mockReset(); - mockSecurityExt.addAuditEvent.mockReset(); + mockSecurityExt.authorizeAndRedactMultiNamespaceReferences.mockReset(); }); describe(`errors`, () => { test(`propagates decorated error when not authorized`, async () => { // Unlike other functions, it doesn't validate the level of authorization first, so we need to - // carry on and mock the enforce function as well to create an unauthorized condition - setupPerformAuthEnforceFailure(mockSecurityExt); + // carry on and mock the security function to create an unauthorized condition + setupAuthorizeAndRedactMultiNamespaceReferenencesFailure(mockSecurityExt); await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - }); - - test(`adds audit event per object when not successful`, async () => { - // Unlike other functions, it doesn't validate the level of authorization first, so we need to - // carry on and mock the enforce function as well to create an unauthorized condition - setupPerformAuthEnforceFailure(mockSecurityExt); - - await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, - savedObject: { type: obj.type, id: obj.id }, - error: enforceError, - }); - }); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toHaveBeenCalledTimes(1); }); }); - describe('checks privileges', () => { + describe('calls authorizeAndRedactMultiNamespaceReferences of the security extension', () => { beforeEach(() => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeAndRedactMultiNamespaceReferenencesFailure(mockSecurityExt); }); - test(`in the default state`, async () => { - await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedSpaces = new Set(['default', ...SPACES, ...obj1LegacySpaces]); - const expectedEnforceMap = new Map([[objects[0].type, new Set(['default'])]]); + test(`in the default space`, async () => { + await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toHaveBeenCalledTimes(1); - const { spaces: actualSpaces, enforceMap: actualEnforceMap } = - mockSecurityExt.performAuthorization.mock.calls[0][0]; - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeAndRedactMultiNamespaceReferences.mock.calls[0][0]; + expect(actualNamespace).toEqual('default'); + expect(actualObjects).toEqual(expectedObjects); }); - test(`in a non-default state`, async () => { + test(`in a non-default space`, async () => { const namespace = 'space-X'; await expect( collectMultiNamespaceReferences({ ...params, options: { namespace } }) ).rejects.toThrow(enforceError); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedSpaces = new Set([namespace, ...SPACES, ...obj1LegacySpaces]); - const expectedEnforceMap = new Map([[objects[0].type, new Set([namespace])]]); - const { spaces: actualSpaces, enforceMap: actualEnforceMap } = - mockSecurityExt.performAuthorization.mock.calls[0][0]; - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeAndRedactMultiNamespaceReferences.mock.calls[0][0]; + expect(actualNamespace).toEqual(namespace); + expect(actualObjects).toEqual(expectedObjects); }); test(`with purpose 'collectMultiNamespaceReferences'`, async () => { @@ -559,15 +559,13 @@ describe('collectMultiNamespaceReferences', () => { purpose: 'collectMultiNamespaceReferences', }; - setupPerformAuthEnforceFailure(mockSecurityExt); - await expect(collectMultiNamespaceReferences({ ...params, options })).rejects.toThrow( enforceError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.performAuthorization).toBeCalledWith( + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toBeCalledWith( expect.objectContaining({ - actions: new Set(['bulk_get']), + options: { purpose: 'collectMultiNamespaceReferences' }, }) ); }); @@ -577,15 +575,13 @@ describe('collectMultiNamespaceReferences', () => { purpose: 'updateObjectsSpaces', }; - setupPerformAuthEnforceFailure(mockSecurityExt); - await expect(collectMultiNamespaceReferences({ ...params, options })).rejects.toThrow( enforceError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.performAuthorization).toBeCalledWith( + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toBeCalledWith( expect.objectContaining({ - actions: new Set(['share_to_space']), + options: { purpose: 'updateObjectsSpaces' }, }) ); }); @@ -593,59 +589,21 @@ describe('collectMultiNamespaceReferences', () => { describe('success', () => { beforeEach(async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - await collectMultiNamespaceReferences(params); + setupAuthorizeAndRedactMultiNamespaceReferenencesSuccess(mockSecurityExt); }); - test(`calls redactNamespaces with type, spaces, and authorization map`, async () => { - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedSpaces = new Set(['default', ...SPACES, ...obj1LegacySpaces]); - const { spaces: actualSpaces } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - - const resultObjects = [obj1, obj2, obj3]; - - // enforce is called once for all objects/spaces, then once per object - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(resultObjects.length); - const expectedTypesAndSpaces = new Map([[objects[0].type, new Set(['default'])]]); - const { typesAndSpaces: actualTypesAndSpaces } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - expect(setMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - - // Redact is called once per object, but an additional time for object 1 because it has legacy URL aliases in another set of spaces - expect(mockSecurityExt.redactNamespaces).toBeCalledTimes(resultObjects.length + 1); - const expectedRedactParams = [ - { type: obj1.type, spaces: SPACES }, - { type: obj1.type, spaces: obj1LegacySpaces }, - { type: obj2.type, spaces: SPACES }, - { type: obj3.type, spaces: SPACES }, - ]; - - expectedRedactParams.forEach((expected, i) => { - const { savedObject, typeMap } = mockSecurityExt.redactNamespaces.mock.calls[i][0]; - expect(savedObject).toEqual( - expect.objectContaining({ - type: expected.type, - namespaces: expected.spaces, - }) - ); - expect(typeMap).toBe(authMap); - }); + // Note: this test doesn't seem particularly useful as it only verifies the mock passthrough, but + // I am not sure what else can be done at this level now that the extension handles everything + test(`returns a result when successful`, async () => { + const result = await collectMultiNamespaceReferences(params); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).toHaveBeenCalledTimes(1); + expect(result.objects).toEqual(expectedObjects); }); + test(`returns empty array when no objects are provided`, async () => { + setupAuthorizeAndRedactMultiNamespaceReferenencesSuccess(mockSecurityExt); - test(`adds audit event per object when successful`, async () => { - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - - const resultObjects = [obj1, obj2, obj3]; - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(resultObjects.length); - resultObjects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, - savedObject: { type: obj.type, id: obj.id }, - error: undefined, - }); - }); + const result = await collectMultiNamespaceReferences({ ...params, objects: [] }); + expect(result).toEqual({ objects: [] }); + expect(mockSecurityExt.authorizeAndRedactMultiNamespaceReferences).not.toHaveBeenCalled(); }); }); }); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.ts index 183d2509ad48d..d8b25dc886f20 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/collect_multi_namespace_references.ts @@ -7,7 +7,6 @@ */ import { isNotFoundFromUnsupportedServer } from '@kbn/core-elasticsearch-server-internal'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsCollectMultiNamespaceReferencesObject, SavedObjectsCollectMultiNamespaceReferencesOptions, @@ -15,11 +14,12 @@ import type { SavedObjectReferenceWithContext, } from '@kbn/core-saved-objects-api-server'; import { - AuditAction, type ISavedObjectsSecurityExtension, type ISavedObjectTypeRegistry, + type SavedObject, + SavedObjectsErrorHelpers, } from '@kbn/core-saved-objects-server'; -import { SavedObjectsErrorHelpers, SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; import { type SavedObjectsSerializer, getObjectKey, @@ -72,7 +72,7 @@ export interface CollectMultiNamespaceReferencesParams { export async function collectMultiNamespaceReferences( params: CollectMultiNamespaceReferencesParams ): Promise { - const { createPointInTimeFinder, objects } = params; + const { createPointInTimeFinder, objects, securityExtension, options } = params; if (!objects.length) { return { objects: [] }; } @@ -123,10 +123,16 @@ export async function collectMultiNamespaceReferences( return { ...obj, spacesWithMatchingAliases, spacesWithMatchingOrigins }; }); + if (!securityExtension) return { objects: results }; + // Now that we have *all* information for the object graph, if the Security extension is enabled, we can: check/enforce authorization, // write audit events, filter the object graph, and redact spaces from the objects. - const filteredAndRedactedResults = await optionallyUseSecurity(results, params); - + const filteredAndRedactedResults = + await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace: SavedObjectsUtils.namespaceIdToString(options?.namespace), + objects: results, + options: { purpose: options?.purpose }, + }); return { objects: filteredAndRedactedResults, }; @@ -220,196 +226,3 @@ async function getObjectsAndReferences({ return { objectMap, inboundReferencesMap }; } - -/** - * Checks/enforces authorization, writes audit events, filters the object graph, and redacts spaces from the share_to_space/bulk_get - * response. In other SavedObjectsRepository functions we do this before decrypting attributes. However, because of the - * share_to_space/bulk_get response logic involved in deciding between the exact match or alias match, it's cleaner to do authorization, - * auditing, filtering, and redaction all afterwards. - */ -async function optionallyUseSecurity( - objectsWithContext: SavedObjectReferenceWithContext[], - params: CollectMultiNamespaceReferencesParams -) { - const { securityExtension, objects, options = {} } = params; - const { purpose, namespace } = options; - const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); - if (!securityExtension) { - return objectsWithContext; - } - - // Check authorization based on all *found* object types / spaces - const typesToAuthorize = new Set(); - const spacesToAuthorize = new Set([namespaceString]); - const addSpacesToAuthorize = (spaces: string[] = []) => { - for (const space of spaces) spacesToAuthorize.add(space); - }; - for (const obj of objectsWithContext) { - typesToAuthorize.add(obj.type); - addSpacesToAuthorize(obj.spaces); - addSpacesToAuthorize(obj.spacesWithMatchingAliases); - addSpacesToAuthorize(obj.spacesWithMatchingOrigins); - } - const action = - purpose === 'updateObjectsSpaces' ? ('share_to_space' as const) : ('bulk_get' as const); - - // Enforce authorization based on all *requested* object types and the current space - const typesAndSpaces = objects.reduce( - (acc, { type }) => (acc.has(type) ? acc : acc.set(type, new Set([namespaceString]))), // Always enforce authZ for the active space - new Map>() - ); - - const { typeMap } = await securityExtension?.performAuthorization({ - actions: new Set([action]), - types: typesToAuthorize, - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - if (!error) return; // We will audit success results below, after redaction - for (const { type, id } of objects) { - securityExtension!.addAuditEvent({ - action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, - savedObject: { type, id }, - error, - }); - } - }, - }); - - // Now, filter/redact the results. Most SOR functions just redact the `namespaces` field from each returned object. However, this function - // will actually filter the returned object graph itself. - // This is done in two steps: (1) objects which the user can't access *in this space* are filtered from the graph, and the - // graph is rearranged to avoid leaking information. (2) any spaces that the user can't access are redacted from each individual object. - // After we finish filtering, we can write audit events for each object that is going to be returned to the user. - const requestedObjectsSet = objects.reduce( - (acc, { type, id }) => acc.add(`${type}:${id}`), - new Set() - ); - const retrievedObjectsSet = objectsWithContext.reduce( - (acc, { type, id }) => acc.add(`${type}:${id}`), - new Set() - ); - const traversedObjects = new Set(); - const filteredObjectsMap = new Map(); - const getIsAuthorizedForInboundReference = (inbound: { type: string; id: string }) => { - const found = filteredObjectsMap.get(`${inbound.type}:${inbound.id}`); - return found && !found.isMissing; // If true, this object can be linked back to one of the requested objects - }; - let objectsToProcess = [...objectsWithContext]; - while (objectsToProcess.length > 0) { - const obj = objectsToProcess.shift()!; - const { type, id, spaces, inboundReferences } = obj; - const objKey = `${type}:${id}`; - traversedObjects.add(objKey); - // Is the user authorized to access this object in this space? - let isAuthorizedForObject = true; - try { - // ToDo: this is the only remaining call to enforceAuthorization outside of the security extension - // This was a bit complicated to change now, but can ultimately be removed when authz logic is - // migrated from the repo level to the extension level. - securityExtension.enforceAuthorization({ - typesAndSpaces: new Map([[type, new Set([namespaceString])]]), - action, - typeMap, - }); - } catch (err) { - isAuthorizedForObject = false; - } - // Redact the inbound references so we don't leak any info about other objects that the user is not authorized to access - const redactedInboundReferences = inboundReferences.filter((inbound) => { - if (inbound.type === type && inbound.id === id) { - // circular reference, don't redact it - return true; - } - return getIsAuthorizedForInboundReference(inbound); - }); - // If the user is not authorized to access at least one inbound reference of this object, then we should omit this object. - const isAuthorizedForGraph = - requestedObjectsSet.has(objKey) || // If true, this is one of the requested objects, and we checked authorization above - redactedInboundReferences.some(getIsAuthorizedForInboundReference); - - if (isAuthorizedForObject && isAuthorizedForGraph) { - if (spaces.length) { - // Only generate success audit records for "non-empty results" with 1+ spaces - // ("empty result" means the object was a non-multi-namespace type, or hidden type, or not found) - securityExtension.addAuditEvent({ - action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, - savedObject: { type, id }, - }); - } - filteredObjectsMap.set(objKey, obj); - } else if (!isAuthorizedForObject && isAuthorizedForGraph) { - filteredObjectsMap.set(objKey, { ...obj, spaces: [], isMissing: true }); - } else if (isAuthorizedForObject && !isAuthorizedForGraph) { - const hasUntraversedInboundReferences = inboundReferences.some( - (ref) => - !traversedObjects.has(`${ref.type}:${ref.id}`) && - retrievedObjectsSet.has(`${ref.type}:${ref.id}`) - ); - - if (hasUntraversedInboundReferences) { - // this object has inbound reference(s) that we haven't traversed yet; bump it to the back of the list - objectsToProcess = [...objectsToProcess, obj]; - } else { - // There should never be a missing inbound reference. - // If there is, then something has gone terribly wrong. - const missingInboundReference = inboundReferences.find( - (ref) => - !traversedObjects.has(`${ref.type}:${ref.id}`) && - !retrievedObjectsSet.has(`${ref.type}:${ref.id}`) - ); - - if (missingInboundReference) { - throw new Error( - `Unexpected inbound reference to "${missingInboundReference.type}:${missingInboundReference.id}"` - ); - } - } - } - } - - const filteredAndRedactedObjects = [ - ...filteredObjectsMap.values(), - ].map((obj) => { - const { - type, - id, - spaces, - spacesWithMatchingAliases, - spacesWithMatchingOrigins, - inboundReferences, - } = obj; - // Redact the inbound references so we don't leak any info about other objects that the user is not authorized to access - const redactedInboundReferences = inboundReferences.filter((inbound) => { - if (inbound.type === type && inbound.id === id) { - // circular reference, don't redact it - return true; - } - return getIsAuthorizedForInboundReference(inbound); - }); - - /** Simple wrapper for the `redactNamespaces` function that expects a saved object in its params. */ - const getRedactedSpaces = (spacesArray: string[] | undefined) => { - if (!spacesArray) return; - const savedObject = { type, namespaces: spacesArray } as SavedObject; // Other SavedObject attributes aren't required - const result = securityExtension.redactNamespaces({ savedObject, typeMap }); - return result.namespaces; - }; - const redactedSpaces = getRedactedSpaces(spaces)!; - const redactedSpacesWithMatchingAliases = getRedactedSpaces(spacesWithMatchingAliases); - const redactedSpacesWithMatchingOrigins = getRedactedSpaces(spacesWithMatchingOrigins); - return { - ...obj, - spaces: redactedSpaces, - ...(redactedSpacesWithMatchingAliases && { - spacesWithMatchingAliases: redactedSpacesWithMatchingAliases, - }), - ...(redactedSpacesWithMatchingOrigins && { - spacesWithMatchingOrigins: redactedSpacesWithMatchingOrigins, - }), - inboundReferences: redactedInboundReferences, - }; - }); - - return filteredAndRedactedObjects; -} diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.test.ts index 8290f7345190d..6516fe39f016e 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.test.ts @@ -8,7 +8,7 @@ import { errors as esErrors } from '@elastic/elasticsearch'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { decorateEsError } from './decorate_es_error'; describe('savedObjectsClient/decorateEsError', () => { diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.ts index 9cfdffc13a5dd..cc1d18fc7aebd 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/decorate_es_error.ts @@ -10,7 +10,7 @@ import { get } from 'lodash'; import { errors as esErrors } from '@elastic/elasticsearch'; import type { ElasticsearchErrorDetails } from '@kbn/es-errors'; import { isSupportedEsServer } from '@kbn/core-elasticsearch-server-internal'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; const responseErrors = { isServiceUnavailable: (statusCode?: number) => statusCode === 503, diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/filter_utils.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/filter_utils.ts index ae7bb08039850..1cf27251a1549 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/filter_utils.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/filter_utils.ts @@ -9,7 +9,7 @@ import { set } from '@kbn/safer-lodash-set'; import { get, cloneDeep } from 'lodash'; import * as esKuery from '@kbn/es-query'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { IndexMapping } from '@kbn/core-saved-objects-base-server-internal'; type KueryNode = any; diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.test.ts index cd888ddb4c2e4..232c19fa7a840 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.test.ts @@ -13,17 +13,11 @@ import { } from './internal_bulk_resolve.test.mock'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsBulkResolveObject, SavedObjectsBaseOptions, } from '@kbn/core-saved-objects-api-server'; -import { - setMapsAreEqual, - SavedObjectsErrorHelpers, - SavedObjectsUtils, - setsAreEqual, -} from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; import { SavedObjectsSerializer, LEGACY_URL_ALIAS_TYPE, @@ -32,17 +26,16 @@ import { typeRegistryMock } from '@kbn/core-saved-objects-base-server-mocks'; import { internalBulkResolve, type InternalBulkResolveParams } from './internal_bulk_resolve'; import { normalizeNamespace } from './internal_utils'; import { - AuditAction, type ISavedObjectsEncryptionExtension, type ISavedObjectsSecurityExtension, type ISavedObjectTypeRegistry, + type SavedObject, + SavedObjectsErrorHelpers, } from '@kbn/core-saved-objects-server'; import { - authMap, enforceError, - setupPerformAuthFullyAuthorized, - setupPerformAuthEnforceFailure, - setupRedactPassthrough, + setupAuthorizeAndRedactInternalBulkResolveFailure, + setupAuthorizeAndRedactInternalBulkResolveSuccess, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; @@ -437,6 +430,17 @@ describe('internalBulkResolve', () => { let mockSecurityExt: jest.Mocked; let params: InternalBulkResolveParams; + const expectedObjects = [ + expect.objectContaining({ + outcome: 'exactMatch', + saved_object: expect.objectContaining({ id: objects[0].id }), + }), + expect.objectContaining({ + outcome: 'exactMatch', + saved_object: expect.objectContaining({ id: objects[1].id }), + }), + ]; + beforeEach(() => { mockGetSavedObjectFromSource.mockReset(); mockGetSavedObjectFromSource.mockImplementation((_registry, type, id) => { @@ -465,110 +469,58 @@ describe('internalBulkResolve', () => { }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - + setupAuthorizeAndRedactInternalBulkResolveFailure(mockSecurityExt); await expect(internalBulkResolve(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeAndRedactInternalBulkResolve).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); + test(`returns result when successful`, async () => { + setupAuthorizeAndRedactInternalBulkResolveSuccess(mockSecurityExt); const result = await internalBulkResolve(params); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeAndRedactInternalBulkResolve).toHaveBeenCalledTimes(1); const bulkIds = objects.map((obj) => obj.id); const expectedNamespaceString = SavedObjectsUtils.namespaceIdToString(namespace); expectBulkArgs(expectedNamespaceString, bulkIds); const mgetIds = bulkIds; expectMgetArgs(namespace, mgetIds); - expect(result.resolved_objects).toEqual([ - expect.objectContaining({ - outcome: 'exactMatch', - saved_object: expect.objectContaining({ id: objects[0].id }), - }), - expect.objectContaining({ - outcome: 'exactMatch', - saved_object: expect.objectContaining({ id: objects[1].id }), - }), - ]); + expect(result.resolved_objects).toEqual(expectedObjects); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns empty array when no objects are provided`, async () => { + setupAuthorizeAndRedactInternalBulkResolveSuccess(mockSecurityExt); - await internalBulkResolve(params); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_get']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([objects[0].type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(objects[0].type, new Set([namespace])); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + const result = await internalBulkResolve({ ...params, objects: [] }); + expect(result).toEqual({ resolved_objects: [] }); + expect(mockSecurityExt.authorizeAndRedactInternalBulkResolve).not.toHaveBeenCalled(); }); - test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - await internalBulkResolve(params); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - - expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj, i) => { - const { savedObject, typeMap } = mockSecurityExt.redactNamespaces.mock.calls[i][0]; - expect(savedObject).toEqual( - expect.objectContaining({ - type: obj.type, - id: obj.id, - namespaces: [namespace], - }) - ); - expect(typeMap).toBe(authMap); + describe('calls authorizeAndRedactInternalBulkResolve of the security extension', () => { + beforeEach(() => { + setupAuthorizeAndRedactInternalBulkResolveFailure(mockSecurityExt); }); - }); - test(`adds audit event per object when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`in the default space`, async () => { + await expect( + internalBulkResolve({ ...params, options: { namespace: 'default' } }) + ).rejects.toThrow(enforceError); + expect(mockSecurityExt.authorizeAndRedactInternalBulkResolve).toHaveBeenCalledTimes(1); - await internalBulkResolve(params); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.RESOLVE, - savedObject: { type: obj.type, id: obj.id }, - error: undefined, - }); + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeAndRedactInternalBulkResolve.mock.calls[0][0]; + expect(actualNamespace).toBeUndefined(); + expect(actualObjects).toEqual(expectedObjects); }); - }); - test(`adds audit event per object when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - await expect(internalBulkResolve(params)).rejects.toThrow(enforceError); + test(`in a non-default space`, async () => { + await expect(internalBulkResolve(params)).rejects.toThrow(enforceError); + expect(mockSecurityExt.authorizeAndRedactInternalBulkResolve).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.RESOLVE, - savedObject: { type: obj.type, id: obj.id }, - error: enforceError, - }); + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeAndRedactInternalBulkResolve.mock.calls[0][0]; + expect(actualNamespace).toEqual(namespace); + expect(actualObjects).toEqual(expectedObjects); }); }); }); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.ts index 2d4e75654b1fe..3b2e934854a52 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve.ts @@ -9,7 +9,6 @@ import type { MgetResponseItem } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isNotFoundFromUnsupportedServer } from '@kbn/core-elasticsearch-server-internal'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsBaseOptions, SavedObjectsBulkResolveObject, @@ -18,17 +17,14 @@ import type { SavedObjectsIncrementCounterOptions, } from '@kbn/core-saved-objects-api-server'; import { - AuditAction, type ISavedObjectsEncryptionExtension, type ISavedObjectsSecurityExtension, type ISavedObjectTypeRegistry, type SavedObjectsRawDocSource, -} from '@kbn/core-saved-objects-server'; -import { + type SavedObject, + type BulkResolveError, SavedObjectsErrorHelpers, - SavedObjectsUtils, - type DecoratedError, -} from '@kbn/core-saved-objects-utils-server'; +} from '@kbn/core-saved-objects-server'; import { LEGACY_URL_ALIAS_TYPE, type LegacyUrlAlias, @@ -83,25 +79,14 @@ export interface InternalBulkResolveParams { * @public */ export interface InternalSavedObjectsBulkResolveResponse { - resolved_objects: Array | InternalBulkResolveError>; -} - -/** - * Error result for the internal bulkResolve function. - * - * @internal - */ -export interface InternalBulkResolveError { - type: string; - id: string; - error: DecoratedError; + resolved_objects: Array | BulkResolveError>; } /** Type guard used in the repository. */ export function isBulkResolveError( - result: SavedObjectsResolveResponse | InternalBulkResolveError -): result is InternalBulkResolveError { - return !!(result as InternalBulkResolveError).error; + result: SavedObjectsResolveResponse | BulkResolveError +): result is BulkResolveError { + return !!(result as BulkResolveError).error; } type AliasInfo = Pick; @@ -201,9 +186,7 @@ export async function internalBulkResolve( } // map function for pMap below - const mapper = async ( - either: Either - ) => { + const mapper = async (either: Either) => { if (isLeft(either)) { return either.value; } @@ -271,92 +254,18 @@ export async function internalBulkResolve( { refresh: false } ).catch(() => {}); // if the call fails for some reason, intentionally swallow the error - const redacted = await authorizeAuditAndRedact(resolvedObjects, securityExtension, namespace); - return { resolved_objects: redacted }; -} - -/** - * Checks authorization, writes audit events, and redacts namespaces from the bulkResolve response. In other SavedObjectsRepository - * functions we do this before decrypting attributes. However, because of the bulkResolve logic involved in deciding between the exact match - * or alias match, it's cleaner to do authorization, auditing, and redaction all afterwards. - */ -async function authorizeAuditAndRedact( - resolvedObjects: Array | InternalBulkResolveError>, - securityExtension: ISavedObjectsSecurityExtension | undefined, - namespace: string | undefined -) { - if (!securityExtension) { - return resolvedObjects; - } - - const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); - const typesAndSpaces = new Map>(); - const spacesToAuthorize = new Set(); - const auditableObjects: Array<{ type: string; id: string }> = []; + if (!securityExtension) return { resolved_objects: resolvedObjects }; - for (const result of resolvedObjects) { - let auditableObject: { type: string; id: string } | undefined; - if (isBulkResolveError(result)) { - const { type, id, error } = result; - if (!SavedObjectsErrorHelpers.isBadRequestError(error)) { - // Only "not found" errors should show up as audit events (not "unsupported type" errors) - auditableObject = { type, id }; - } - } else { - const { type, id, namespaces = [] } = result.saved_object; - auditableObject = { type, id }; - for (const space of namespaces) { - spacesToAuthorize.add(space); - } - } - if (auditableObject) { - auditableObjects.push(auditableObject); - const spacesToEnforce = - typesAndSpaces.get(auditableObject.type) ?? new Set([namespaceString]); // Always enforce authZ for the active space - spacesToEnforce.add(namespaceString); - typesAndSpaces.set(auditableObject.type, spacesToEnforce); - spacesToAuthorize.add(namespaceString); - } - } - - if (typesAndSpaces.size === 0) { - // We only had "unsupported type" errors, there are no types to check privileges for, just return early - return resolvedObjects; - } - - const authorizationResult = await securityExtension?.performAuthorization({ - actions: new Set(['bulk_get']), - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - for (const { type, id } of auditableObjects) { - securityExtension.addAuditEvent({ - action: AuditAction.RESOLVE, - savedObject: { type, id }, - error, - }); - } - }, - }); - - return resolvedObjects.map((result) => { - if (isBulkResolveError(result)) { - return result; - } - return { - ...result, - saved_object: securityExtension.redactNamespaces({ - typeMap: authorizationResult.typeMap, - savedObject: result.saved_object, - }), - }; + const redactedObjects = await securityExtension?.authorizeAndRedactInternalBulkResolve({ + namespace, + objects: resolvedObjects, }); + return { resolved_objects: redactedObjects }; } /** Separates valid and invalid object types */ function validateObjectTypes(objects: SavedObjectsBulkResolveObject[], allowedTypes: string[]) { - return objects.map>((object) => { + return objects.map>((object) => { const { type, id } = object; if (!allowedTypes.includes(type)) { return { diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_utils.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_utils.ts index 37b29a6a94e66..7d1e8005b75ee 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_utils.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/internal_utils.ts @@ -7,17 +7,14 @@ */ import type { Payload } from '@hapi/boom'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; -import type { - ISavedObjectTypeRegistry, - SavedObjectsRawDoc, - SavedObjectsRawDocSource, -} from '@kbn/core-saved-objects-server'; import { + type ISavedObjectTypeRegistry, + type SavedObjectsRawDoc, + type SavedObjectsRawDocSource, + type SavedObject, SavedObjectsErrorHelpers, - SavedObjectsUtils, - ALL_NAMESPACES_STRING, -} from '@kbn/core-saved-objects-utils-server'; +} from '@kbn/core-saved-objects-server'; +import { SavedObjectsUtils, ALL_NAMESPACES_STRING } from '@kbn/core-saved-objects-utils-server'; import { decodeRequestVersion, encodeHitVersion, diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/preflight_check_for_create.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/preflight_check_for_create.ts index 1daa7b5f37ea4..ae09b0e1e4228 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/preflight_check_for_create.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/preflight_check_for_create.ts @@ -8,15 +8,13 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { isNotFoundFromUnsupportedServer } from '@kbn/core-elasticsearch-server-internal'; -import type { - ISavedObjectTypeRegistry, - SavedObjectsRawDoc, - SavedObjectsRawDocSource, -} from '@kbn/core-saved-objects-server'; import { + type ISavedObjectTypeRegistry, + type SavedObjectsRawDoc, + type SavedObjectsRawDocSource, SavedObjectsErrorHelpers, - ALL_NAMESPACES_STRING, -} from '@kbn/core-saved-objects-utils-server'; +} from '@kbn/core-saved-objects-server'; +import { ALL_NAMESPACES_STRING } from '@kbn/core-saved-objects-utils-server'; import { LEGACY_URL_ALIAS_TYPE, getObjectKey, diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.security_extension.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.security_extension.test.ts index bd30f9a10eeb1..71788876b4309 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.security_extension.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.security_extension.test.ts @@ -20,18 +20,12 @@ import { estypes } from '@elastic/elasticsearch'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { SavedObjectsBulkUpdateObject } from '@kbn/core-saved-objects-api-server'; import { SavedObjectsSerializer } from '@kbn/core-saved-objects-base-server-internal'; -import { SavedObject } from '@kbn/core-saved-objects-server'; import { ISavedObjectsSecurityExtension, - AuditAction, SavedObjectsRawDocSource, AuthorizationTypeEntry, + SavedObject, } from '@kbn/core-saved-objects-server'; -import { - setMapsAreEqual, - arrayMapsAreEqual, - setsAreEqual, -} from '@kbn/core-saved-objects-utils-server'; import { kibanaMigratorMock } from '../mocks'; import { createRegistry, @@ -48,7 +42,6 @@ import { updateSuccess, deleteSuccess, removeReferencesToSuccess, - REMOVE_REFS_COUNT, checkConflictsSuccess, findSuccess, mockTimestampFields, @@ -63,12 +56,14 @@ import { expectUpdateResult, bulkDeleteSuccess, createBulkDeleteSuccessStatus, - setupPerformAuthFullyAuthorized, - setupPerformAuthPartiallyAuthorized, - setupPerformAuthUnauthorized, - setupPerformAuthEnforceFailure, + REMOVE_REFS_COUNT, + setupGetFindRedactTypeMap, + generateIndexPatternSearchResults, + setupAuthorizeFunc, + setupAuthorizeFind, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; +import { arrayMapsAreEqual } from '@kbn/core-saved-objects-utils-server'; // BEWARE: The SavedObjectClient depends on the implementation details of the SavedObjectsRepository // so any breaking changes to this repository are considered breaking changes to the SavedObjectsClient. @@ -124,45 +119,56 @@ describe('SavedObjectsRepository Security Extension', () => { mockSecurityExt = savedObjectsExtensionsMock.createSecurityExtension(); mockGetCurrentTime.mockReturnValue(mockTimestamp); repository = instantiateRepository(); + setupGetFindRedactTypeMap(mockSecurityExt); }); afterEach(() => { - mockSecurityExt.performAuthorization.mockClear(); mockSecurityExt.redactNamespaces.mockClear(); mockGetSearchDsl.mockClear(); }); describe('#get', () => { - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeGet rejects promise`, async () => { + mockSecurityExt.authorizeGet.mockRejectedValueOnce(checkAuthError); await expect( getSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeGet, 'unauthorized'); await expect( getSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeGet, 'partially_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const result = await getSuccess(client, repository, registry, type, id, { namespace }); + + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); + expect(client.get).toHaveBeenCalledTimes(1); + expect(result).toEqual(expect.objectContaining({ type, id, namespaces: [namespace] })); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeGet, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await getSuccess(client, repository, registry, type, id, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); expect(client.get).toHaveBeenCalledTimes(1); expect(result).toEqual(expect.objectContaining({ type, id, namespaces: [namespace] })); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { + test(`calls authorizeGet with correct parameters`, async () => { await getSuccess( client, repository, @@ -176,35 +182,25 @@ describe('SavedObjectsRepository Security Extension', () => { multiNamespaceObjNamespaces // all of the object's namespaces from preflight check are added to the auth check call ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['get']); - const expectedSpaces = new Set(multiNamespaceObjNamespaces); - const expectedTypes = new Set([MULTI_NAMESPACE_CUSTOM_INDEX_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, new Set([namespace])); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledWith({ + namespace, + object: { + existingNamespaces: multiNamespaceObjNamespaces, + id, + type: MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, + }, + objectNotFound: false, + }); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeGet, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); await getSuccess(client, repository, registry, type, id, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledWith( expect.objectContaining({ @@ -213,71 +209,57 @@ describe('SavedObjectsRepository Security Extension', () => { }) ); }); - - test(`adds audit event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - await getSuccess(client, repository, registry, type, id, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.GET, - savedObject: { type, id }, - }); - }); - - test(`adds audit event when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - await expect( - getSuccess(client, repository, registry, type, id, { namespace }) - ).rejects.toThrow(enforceError); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.GET, - savedObject: { type, id }, - error: enforceError, - }); - }); }); describe('#update', () => { - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeUpdate rejects promise`, async () => { + mockSecurityExt.authorizeUpdate.mockRejectedValueOnce(checkAuthError); await expect( updateSuccess(client, repository, registry, type, id, attributes, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'unauthorized'); await expect( updateSuccess(client, repository, registry, type, id, attributes, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'partially_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const result = await updateSuccess(client, repository, registry, type, id, attributes, { + namespace, + }); + + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); + expect(client.update).toHaveBeenCalledTimes(1); + expect(result).toEqual( + expect.objectContaining({ id, type, attributes, namespaces: [namespace] }) + ); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await updateSuccess(client, repository, registry, type, id, attributes, { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); expect(client.update).toHaveBeenCalledTimes(1); expect(result).toEqual( expect.objectContaining({ id, type, attributes, namespaces: [namespace] }) ); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { + test(`calls authorizeUpdate with correct parameters`, async () => { await updateSuccess( client, repository, @@ -292,35 +274,28 @@ describe('SavedObjectsRepository Security Extension', () => { multiNamespaceObjNamespaces // all of the object's namespaces from preflight check are added to the auth check call ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['update']); - const expectedSpaces = new Set(multiNamespaceObjNamespaces); - const expectedTypes = new Set([MULTI_NAMESPACE_CUSTOM_INDEX_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, new Set([namespace])); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); + const expectedNamespace = namespace; + const expectedObject = { + type: 'multiNamespaceTypeCustomIndex', + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + existingNamespaces: multiNamespaceObjNamespaces, + }; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, object: actualObject } = + mockSecurityExt.authorizeUpdate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(actualNamespace).toEqual(expectedNamespace); + expect(actualObject).toEqual(expectedObject); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); await updateSuccess(client, repository, registry, type, id, attributes, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledWith( expect.objectContaining({ @@ -329,65 +304,35 @@ describe('SavedObjectsRepository Security Extension', () => { }) ); }); - - test(`adds audit event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - await updateSuccess(client, repository, registry, type, id, attributes, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE, - savedObject: { type, id }, - error: undefined, - outcome: 'unknown', - }); - }); - test(`adds audit event when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - await expect( - updateSuccess(client, repository, registry, type, id, { namespace }) - ).rejects.toThrow(enforceError); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE, - savedObject: { type, id }, - error: enforceError, - }); - }); }); describe('#create', () => { - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeCreate rejects promise`, async () => { + mockSecurityExt.authorizeCreate.mockRejectedValueOnce(checkAuthError); await expect(repository.create(type, attributes, { namespace })).rejects.toThrow( checkAuthError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - + setupAuthorizeFunc(mockSecurityExt.authorizeCreate, 'unauthorized'); await expect(repository.create(type, attributes, { namespace })).rejects.toThrow( enforceError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeCreate, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await repository.create(type, attributes, { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); expect(client.create).toHaveBeenCalledTimes(1); expect(result).toEqual( expect.objectContaining({ @@ -399,71 +344,75 @@ describe('SavedObjectsRepository Security Extension', () => { ); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - await repository.create(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, attributes, { + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeCreate as jest.Mock, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const result = await repository.create(type, attributes, { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['create']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([MULTI_NAMESPACE_CUSTOM_INDEX_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, new Set([namespace])); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); + expect(client.create).toHaveBeenCalledTimes(1); + expect(result).toEqual( + expect.objectContaining({ + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + type, + attributes, + namespaces: [namespace], + }) + ); + }); - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + test(`calls authorizeCreate with correct parameters`, async () => { + await repository.create(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, attributes, { + namespace, + }); - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); + const expectedNamespace = namespace; + const expectedObject = { + type: 'multiNamespaceTypeCustomIndex', + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: undefined, + existingNamespaces: [], + }; + const { namespace: actualNamespace, object: actualObject } = + mockSecurityExt.authorizeCreate.mock.calls[0][0]; + + expect(actualNamespace).toEqual(expectedNamespace); + expect(actualObject).toEqual(expectedObject); }); - test(`calls performAuthorization with initial namespaces`, async () => { + test(`calls authorizeCreate with initial namespaces`, async () => { await repository.create(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, attributes, { namespace, initialNamespaces: multiNamespaceObjNamespaces, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['create']); - const expectedSpaces = new Set(multiNamespaceObjNamespaces); - const expectedTypes = new Set([MULTI_NAMESPACE_CUSTOM_INDEX_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set( - MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, - new Set(multiNamespaceObjNamespaces) - ); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); + const expectedNamespace = namespace; + const expectedObject = { + type: 'multiNamespaceTypeCustomIndex', + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: multiNamespaceObjNamespaces, + existingNamespaces: [], + }; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, object: actualObject } = + mockSecurityExt.authorizeCreate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + expect(actualNamespace).toEqual(expectedNamespace); + expect(actualObject).toEqual(expectedObject); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeCreate as jest.Mock, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); await repository.create(type, attributes, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledWith( @@ -477,42 +426,6 @@ describe('SavedObjectsRepository Security Extension', () => { }) ); }); - - test(`adds audit event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - await repository.create(type, attributes, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.CREATE, - savedObject: { - type, - id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), - }, - error: undefined, - outcome: 'unknown', - }); - }); - - test(`adds audit event when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - await expect(repository.create(type, attributes, { namespace })).rejects.toThrow( - enforceError - ); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.CREATE, - savedObject: { - type, - id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), - }, - error: enforceError, - }); - }); }); describe('#delete', () => { @@ -524,178 +437,115 @@ describe('SavedObjectsRepository Security Extension', () => { mockDeleteLegacyUrlAliases.mockClear(); }); - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeDelete rejects promise`, async () => { + mockSecurityExt.authorizeDelete.mockRejectedValueOnce(checkAuthError); await expect( deleteSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeDelete, 'unauthorized'); await expect( deleteSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledTimes(1); }); - test(`returns empty object result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns empty object result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeDelete, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await deleteSuccess(client, repository, registry, type, id, { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledTimes(1); expect(client.delete).toHaveBeenCalledTimes(1); expect(result).toEqual({}); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - await deleteSuccess(client, repository, registry, MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, id, { - namespace, - force: true, - }); - - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['delete']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([MULTI_NAMESPACE_CUSTOM_INDEX_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, new Set([namespace])); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); - }); - - test(`adds audit event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns empty object result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeDelete, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); - await deleteSuccess(client, repository, registry, type, id, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.DELETE, - savedObject: { type, id }, - error: undefined, - outcome: 'unknown', + const result = await deleteSuccess(client, repository, registry, type, id, { + namespace, }); - }); - test(`adds audit event when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledTimes(1); + expect(client.delete).toHaveBeenCalledTimes(1); + expect(result).toEqual({}); + }); - await expect( - deleteSuccess(client, repository, registry, type, id, { namespace }) - ).rejects.toThrow(enforceError); + test(`calls authorizeDelete with correct parameters`, async () => { + await deleteSuccess(client, repository, registry, type, id, { + namespace, + force: true, + }); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.DELETE, - savedObject: { type, id }, - error: enforceError, + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledWith({ + namespace, + object: { type, id }, }); }); }); describe('#removeReferencesTo', () => { - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeRemoveReferences rejects promise`, async () => { + mockSecurityExt.authorizeRemoveReferences.mockRejectedValueOnce(checkAuthError); await expect( removeReferencesToSuccess(client, repository, type, id, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeRemoveReferences, 'unauthorized'); await expect( removeReferencesToSuccess(client, repository, type, id, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeRemoveReferences, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await removeReferencesToSuccess(client, repository, type, id, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledTimes(1); expect(client.updateByQuery).toHaveBeenCalledTimes(1); expect(result).toEqual(expect.objectContaining({ updated: REMOVE_REFS_COUNT })); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - await removeReferencesToSuccess(client, repository, type, id, { namespace }); - - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['delete']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(type, new Set([namespace])); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); - }); - - test(`adds audit event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeRemoveReferences, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); - await removeReferencesToSuccess(client, repository, type, id, { namespace }); + const result = await removeReferencesToSuccess(client, repository, type, id, { namespace }); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.REMOVE_REFERENCES, - savedObject: { type, id }, - error: undefined, - outcome: 'unknown', - }); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledTimes(1); + expect(client.updateByQuery).toHaveBeenCalledTimes(1); + expect(result).toEqual(expect.objectContaining({ updated: REMOVE_REFS_COUNT })); }); - test(`adds audit event when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - await expect( - removeReferencesToSuccess(client, repository, type, id, { namespace }) - ).rejects.toThrow(enforceError); + test(`calls authorizeRemoveReferences with correct parameters`, async () => { + await removeReferencesToSuccess(client, repository, type, id, { namespace }); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.REMOVE_REFERENCES, - savedObject: { type, id }, - error: enforceError, + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledWith({ + namespace, + object: { + id, + type, + }, }); }); }); @@ -704,159 +554,128 @@ describe('SavedObjectsRepository Security Extension', () => { const obj1 = { type, id: 'one' }; const obj2 = { type, id: 'two' }; - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + const expectedResult = { + errors: [ + { + error: { + error: 'Conflict', + message: `Saved object [${obj1.type}/${obj1.id}] conflict`, + statusCode: 409, + }, + id: obj1.id, + type: obj1.type, + }, + { + error: { + error: 'Conflict', + message: `Saved object [${obj2.type}/${obj2.id}] conflict`, + statusCode: 409, + }, + id: obj2.id, + type: obj2.type, + }, + ], + }; + + test(`propagates decorated error when authorizeCheckConflicts rejects promise`, async () => { + mockSecurityExt.authorizeCheckConflicts.mockRejectedValueOnce(checkAuthError); await expect( checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeCheckConflicts, 'unauthorized'); await expect( checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeCheckConflicts, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledTimes(1); expect(client.mget).toHaveBeenCalledTimes(1); - // Default mock mget makes each object found - expect(result).toEqual( - expect.objectContaining({ - errors: [ - { - error: { - error: 'Conflict', - message: `Saved object [${obj1.type}/${obj1.id}] conflict`, - statusCode: 409, - }, - id: obj1.id, - type: obj1.type, - }, - { - error: { - error: 'Conflict', - message: `Saved object [${obj2.type}/${obj2.id}] conflict`, - statusCode: 409, - }, - id: obj2.id, - type: obj2.type, - }, - ], - }) - ); + expect(result).toEqual(expectedResult); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeCheckConflicts, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_create']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([obj1.type, obj2.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(obj1.type, new Set([namespace])); - expectedEnforceMap.set(obj2.type, new Set([namespace])); + const result = await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { + namespace, + }); - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledTimes(1); + expect(client.mget).toHaveBeenCalledTimes(1); + expect(result).toEqual(expectedResult); + }); + + test(`calls authorizeCheckConflicts with correct parameters`, async () => { + await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }); + + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledWith({ + namespace, + objects: [obj1, obj2], + }); }); }); describe('#openPointInTimeForType', () => { - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeOpenPointInTime rejects promise`, async () => { + mockSecurityExt.authorizeOpenPointInTime.mockRejectedValueOnce(checkAuthError); await expect(repository.openPointInTimeForType(type)).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeOpenPointInTime, 'partially_authorized'); client.openPointInTime.mockResponseOnce({ id }); const result = await repository.openPointInTimeForType(type); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledTimes(1); expect(client.openPointInTime).toHaveBeenCalledTimes(1); expect(result).toEqual(expect.objectContaining({ id })); }); - test(`adds audit event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeOpenPointInTime, 'fully_authorized'); client.openPointInTime.mockResponseOnce({ id }); - await repository.openPointInTimeForType(type); + const result = await repository.openPointInTimeForType(type); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.OPEN_POINT_IN_TIME, - outcome: 'unknown', - }); + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledTimes(1); + expect(client.openPointInTime).toHaveBeenCalledTimes(1); + expect(result).toEqual(expect.objectContaining({ id })); }); test(`throws an error when unauthorized`, async () => { - setupPerformAuthUnauthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeOpenPointInTime, 'unauthorized'); await expect(repository.openPointInTimeForType(type)).rejects.toThrowError(); }); - test(`adds audit event when unauthorized`, async () => { - setupPerformAuthUnauthorized(mockSecurityExt); - - await expect(repository.openPointInTimeForType(type)).rejects.toThrowError(); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.OPEN_POINT_IN_TIME, - error: new Error('User is unauthorized for any requested types/spaces.'), - }); - }); - - test(`calls performAuthorization with correct actions, types, and spaces`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`calls authorizeOpenPointInTime with correct parameters`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeOpenPointInTime, 'fully_authorized'); client.openPointInTime.mockResponseOnce({ id }); - await repository.openPointInTimeForType(type, { namespaces: [namespace] }); - - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['open_point_in_time']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([type]); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(actualEnforceMap).toBeUndefined(); - expect(actualOptions).toBeUndefined(); + const namespaces = [namespace, 'x', 'y', 'z']; + await repository.openPointInTimeForType(type, { namespaces }); + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledWith({ + namespaces: new Set(namespaces), + types: new Set([type]), + }); }); }); @@ -869,30 +688,32 @@ describe('SavedObjectsRepository Security Extension', () => { expect(result).toEqual(expectedResult); }); - test(`adds audit event`, async () => { + test(`calls auditClosePointInTime`, async () => { await repository.closePointInTime(id); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.CLOSE_POINT_IN_TIME, - outcome: 'unknown', - }); + expect(mockSecurityExt.auditClosePointInTime).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.auditClosePointInTime).toHaveBeenCalledWith(); }); }); describe('#find', () => { - test(`propagates decorated error when Authorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeFind rejects promise`, async () => { + mockSecurityExt.authorizeFind.mockRejectedValueOnce(checkAuthError); + await expect(findSuccess(client, repository, { type })).rejects.toThrow(checkAuthError); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledTimes(1); + }); + + test(`propagates decorated error when getFindRedactTypeMap rejects promise`, async () => { + mockSecurityExt.getFindRedactTypeMap.mockRejectedValueOnce(checkAuthError); await expect(findSuccess(client, repository, { type })).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.getFindRedactTypeMap).toHaveBeenCalledTimes(1); }); - test(`returns empty result when unauthorized`, async () => { - setupPerformAuthUnauthorized(mockSecurityExt); + test(`returns empty result when preauthorization is unauthorized`, async () => { + setupAuthorizeFind(mockSecurityExt, 'unauthorized'); const result = await repository.find({ type }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledTimes(1); expect(result).toEqual( expect.objectContaining({ saved_objects: [], @@ -901,18 +722,45 @@ describe('SavedObjectsRepository Security Extension', () => { ); }); + test(`returns result when getFindRedactTypeMap is unauthorized`, async () => { + setupAuthorizeFind(mockSecurityExt, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const generatedResults = generateIndexPatternSearchResults(namespace); + client.search.mockResponseOnce(generatedResults); + const result = await repository.find({ type }); + + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.getFindRedactTypeMap).toHaveBeenCalledTimes(1); + expect(result.total).toBe(4); + expect(result.saved_objects).toHaveLength(4); + generatedResults.hits.hits.forEach((doc, i) => { + expect(result.saved_objects[i]).toEqual({ + id: doc._id.replace(/(foo-namespace\:)?(index-pattern|config|globalType)\:/, ''), + type: doc._source!.type, + originId: doc._source!.originId, + ...mockTimestampFields, + version: mockVersion, + score: doc._score, + attributes: doc._source![doc._source!.type], + references: [], + namespaces: doc._source!.type === NAMESPACE_AGNOSTIC_TYPE ? undefined : [namespace], + }); + }); + }); + test(`calls es search with only authorized spaces when partially authorized`, async () => { // Setup partial authorization with the specific type and space of the current test definition const authRecord: Record = { find: { authorizedSpaces: [namespace] }, }; - mockSecurityExt.performAuthorization.mockResolvedValue({ + mockSecurityExt.authorizeFind.mockResolvedValue({ status: 'partially_authorized', typeMap: Object.freeze(new Map([[type, authRecord]])), }); await findSuccess(client, repository, { type, namespaces: [namespace, 'ns-1'] }); - expect(mockGetSearchDsl.mock.calls[0].length).toBe(3); // Find success verifies this is called once, this shouyld always pass + expect(mockGetSearchDsl.mock.calls[0].length).toBe(3); // Find success verifies this is called once, this should always pass const { typeToNamespacesMap: actualMap, }: { typeToNamespacesMap: Map } = @@ -925,7 +773,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`returns result of es find when fully authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFind(mockSecurityExt, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const { result, generatedResults } = await findSuccess( @@ -955,7 +803,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`uses the authorization map when partially authorized`, async () => { - setupPerformAuthPartiallyAuthorized(mockSecurityExt); + setupAuthorizeFind(mockSecurityExt, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); await findSuccess( @@ -979,7 +827,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`returns result of es find when partially authorized`, async () => { - setupPerformAuthPartiallyAuthorized(mockSecurityExt); + setupAuthorizeFind(mockSecurityExt, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const { result, generatedResults } = await findSuccess( @@ -1008,47 +856,45 @@ describe('SavedObjectsRepository Security Extension', () => { }); }); - test(`calls performAuthorization with correct actions, types, and spaces`, async () => { - setupPerformAuthPartiallyAuthorized(mockSecurityExt); + test(`calls authorizeFind with correct parameters`, async () => { + setupAuthorizeFind(mockSecurityExt, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); await findSuccess(client, repository, { type, namespaces: [namespace] }, 'ns-2'); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(2); - const expectedActions = new Set(['find']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([type]); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(actualEnforceMap).toBeUndefined(); - expect(actualOptions).toBeUndefined(); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledWith({ + namespaces: new Set([namespace]), + types: new Set(['index-pattern']), + }); + }); - const { - actions: actualActions2, - spaces: actualSpaces2, - types: actualTypes2, - enforceMap: actualEnforceMap2, - options: actualOptions2, - } = mockSecurityExt.performAuthorization.mock.calls[1][0]; + test(`calls GetFindRedactTypeMap with correct parameters`, async () => { + setupAuthorizeFind(mockSecurityExt, 'partially_authorized'); + setupRedactPassthrough(mockSecurityExt); + const { generatedResults } = await findSuccess( + client, + repository, + { type, namespaces: [namespace] }, + 'ns-2' + ); - expect(setsAreEqual(actualActions2, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces2, new Set([...expectedSpaces, 'ns-2']))).toBeTruthy(); - expect(setsAreEqual(actualTypes2, expectedTypes)).toBeTruthy(); - expect(actualEnforceMap2).toBeUndefined(); - expect(actualOptions2).toBeUndefined(); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.getFindRedactTypeMap).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.getFindRedactTypeMap).toHaveBeenCalledWith({ + previouslyCheckedNamespaces: new Set([namespace]), + objects: generatedResults.hits.hits.map((obj) => { + return { + type: obj._source?.type, + id: obj._id.slice(obj._id.lastIndexOf(':') + 1), // find removes the space/type from the ID in the original raw doc + existingNamespaces: + obj._source?.namespaces ?? obj._source?.namespace ? [obj._source?.namespace] : [], + }; + }), + }); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFind(mockSecurityExt, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const { generatedResults } = await findSuccess(client, repository, { @@ -1065,44 +911,6 @@ describe('SavedObjectsRepository Security Extension', () => { }) ); }); - - test(`adds audit per object event when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - const { generatedResults } = await findSuccess(client, repository, { - type, - namespaces: [namespace], - }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes( - generatedResults.hits.hits.length - ); - - generatedResults.hits.hits.forEach((doc, i) => { - expect(mockSecurityExt.addAuditEvent.mock.calls[i]).toEqual([ - { - action: AuditAction.FIND, - savedObject: { - type: doc._source!.type, - id: doc._id.replace(/(foo-namespace\:)?(index-pattern|config|globalType)\:/, ''), - }, - }, - ]); - }); - }); - - test(`adds audit event when not successful`, async () => { - setupPerformAuthUnauthorized(mockSecurityExt); - - await repository.find({ type }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.FIND, - error: new Error('User is unauthorized for any requested types/spaces.'), - }); - }); }); describe('#bulkGet', () => { @@ -1134,26 +942,43 @@ describe('SavedObjectsRepository Security Extension', () => { namespaces: [namespace], }; - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + const expectedAuthObjects = [ + { + error: true, + existingNamespaces: ['default'], + objectNamespaces: ['ns-1', 'ns-2', namespace], + id: '6.0.0-alpha1', + type: 'multiNamespaceTypeCustomIndex', + }, + { + error: false, + existingNamespaces: [], + objectNamespaces: ['ns-3'], + id: 'logstash-*', + type: 'index-pattern', + }, + ]; + + test(`propagates decorated error when authorizeBulkGet rejects promise`, async () => { + mockSecurityExt.authorizeBulkGet.mockRejectedValueOnce(checkAuthError); await expect( bulkGetSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkGet, 'unauthorized'); await expect( bulkGetSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkGet, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const { result, mockResponse } = await bulkGetSuccess( @@ -1164,7 +989,7 @@ describe('SavedObjectsRepository Security Extension', () => { { namespace } ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); expect(client.mget).toHaveBeenCalledTimes(1); expect(result).toEqual({ saved_objects: [ @@ -1180,7 +1005,35 @@ describe('SavedObjectsRepository Security Extension', () => { }); }); - test(`calls performAuthorization with correct parameters in default space`, async () => { + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkGet, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const { result, mockResponse } = await bulkGetSuccess( + client, + repository, + registry, + [obj1, obj2], + { namespace } + ); + + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); + expect(client.mget).toHaveBeenCalledTimes(1); + expect(result).toEqual({ + saved_objects: [ + expectBulkGetResult( + obj1, + mockResponse.docs[0] as estypes.GetGetResult + ), + expectBulkGetResult( + obj2, + mockResponse.docs[1] as estypes.GetGetResult + ), + ], + }); + }); + + test(`calls authorizeBulkGet with correct parameters in default space`, async () => { const objA = { ...obj1, type: MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, // replace the type to a mult-namespace type for this test to be thorough @@ -1190,30 +1043,14 @@ describe('SavedObjectsRepository Security Extension', () => { await bulkGetSuccess(client, repository, registry, [objA, objB]); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_get']); - const expectedSpaces = new Set(['default', ...objA.namespaces, ...objB.namespaces]); - const expectedTypes = new Set([objA.type, objB.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(objA.type, new Set(['default', ...objA.namespaces])); - expectedEnforceMap.set(objB.type, new Set(['default', ...objB.namespaces])); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledWith({ + namespace: undefined, + objects: expectedAuthObjects, + }); }); - test(`calls performAuthorization with correct parameters in non-default space`, async () => { + test(`calls authorize with correct parameters in non-default space`, async () => { const objA = { ...obj1, type: MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, // replace the type to a mult-namespace type for this test to be thorough @@ -1226,38 +1063,37 @@ describe('SavedObjectsRepository Security Extension', () => { namespace: optionsNamespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_get']); - const expectedSpaces = new Set([optionsNamespace, ...objA.namespaces, ...objB.namespaces]); - const expectedTypes = new Set([objA.type, objB.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(objA.type, new Set([optionsNamespace, ...objA.namespaces])); - expectedEnforceMap.set(objB.type, new Set([optionsNamespace, ...objB.namespaces])); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledWith({ + namespace: optionsNamespace, + objects: [ + { + error: true, + existingNamespaces: [optionsNamespace], + objectNamespaces: objA.namespaces, + id: objA.id, + type: objA.type, + }, + { + error: false, + existingNamespaces: [], + objectNamespaces: objB.namespaces, + id: objB.id, + type: objB.type, + }, + ], + }); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkGet, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; await bulkGetSuccess(client, repository, registry, objects, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(2); objects.forEach((obj, i) => { @@ -1272,40 +1108,6 @@ describe('SavedObjectsRepository Security Extension', () => { expect(typeMap).toBe(authMap); }); }); - - test(`adds audit event per object when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - const objects = [obj1, obj2]; - await bulkGetSuccess(client, repository, registry, objects, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.GET, - savedObject: { type: obj.type, id: obj.id }, - }); - }); - }); - - test(`adds audit event per object when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - const objects = [obj1, obj2]; - await expect( - bulkGetSuccess(client, repository, registry, objects, { namespace }) - ).rejects.toThrow(enforceError); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.GET, - savedObject: { type: obj.type, id: obj.id }, - error: enforceError, - }); - }); - }); }); describe('#bulkCreate', () => { @@ -1330,69 +1132,84 @@ describe('SavedObjectsRepository Security Extension', () => { references: [{ name: 'ref_0', type: 'test', id: '2' }], }; - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeCreate rejects promise`, async () => { + mockSecurityExt.authorizeBulkCreate.mockRejectedValueOnce(checkAuthError); await expect(bulkCreateSuccess(client, repository, [obj1, obj2])).rejects.toThrow( checkAuthError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'unauthorized'); await expect( bulkCreateSuccess(client, repository, [obj1, obj2], { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'partially_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const objects = [obj1, obj2]; + const result = await bulkCreateSuccess(client, repository, objects); + + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); + expect(client.bulk).toHaveBeenCalledTimes(1); + expect(result).toEqual({ + saved_objects: objects.map((obj) => expectCreateResult(obj)), + }); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; const result = await bulkCreateSuccess(client, repository, objects); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); expect(client.bulk).toHaveBeenCalledTimes(1); expect(result).toEqual({ saved_objects: objects.map((obj) => expectCreateResult(obj)), }); }); - test(`calls PerformAuthorization with correct actions, types, spaces, and enforce map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`calls authorizeCreate with correct parameters`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'fully_authorized'); await bulkCreateSuccess(client, repository, [obj1, obj2], { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_create']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([obj1.type, obj2.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(obj1.type, new Set([namespace])); - expectedEnforceMap.set(obj2.type, new Set([namespace])); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); + const expectedNamespace = namespace; + const expectedObjects = [ + { + type: obj1.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: undefined, + existingNamespaces: [], + }, + { + type: obj2.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: undefined, + existingNamespaces: [], + }, + ]; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeBulkCreate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + expect(expectedNamespace).toEqual(actualNamespace); + expect(expectedObjects).toEqual(actualObjects); }); - test(`calls performAuthorization with initial spaces for one type`, async () => { + test(`calls authorizeCreate with initial spaces for one type`, async () => { const objA = { ...obj1, type: MULTI_NAMESPACE_TYPE, @@ -1405,42 +1222,37 @@ describe('SavedObjectsRepository Security Extension', () => { }; const optionsNamespace = 'ns-5'; - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'fully_authorized'); await bulkCreateSuccess(client, repository, [objA, objB], { namespace: optionsNamespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_create']); - const expectedSpaces = new Set([ - optionsNamespace, - ...objA.initialNamespaces, - ...objB.initialNamespaces, - ]); - const expectedTypes = new Set([objA.type, objB.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set( - objA.type, - new Set([optionsNamespace, ...objA.initialNamespaces, ...objB.initialNamespaces]) - ); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); + const expectedNamespace = optionsNamespace; + const expectedObjects = [ + { + type: objA.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: objA.initialNamespaces, + existingNamespaces: [], + }, + { + type: objB.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: objB.initialNamespaces, + existingNamespaces: [], + }, + ]; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeBulkCreate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + expect(expectedNamespace).toEqual(actualNamespace); + expect(expectedObjects).toEqual(actualObjects); }); - test(`calls performAuthorization with initial spaces for multiple types`, async () => { + test(`calls authorizeCreate with initial spaces for multiple types`, async () => { const objA = { ...obj1, type: MULTI_NAMESPACE_TYPE, @@ -1453,48 +1265,45 @@ describe('SavedObjectsRepository Security Extension', () => { }; const optionsNamespace = 'ns-5'; - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'fully_authorized'); await bulkCreateSuccess(client, repository, [objA, objB], { namespace: optionsNamespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_create']); - const expectedSpaces = new Set([ - optionsNamespace, - ...objA.initialNamespaces, - ...objB.initialNamespaces, - ]); - const expectedTypes = new Set([objA.type, objB.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(objA.type, new Set([optionsNamespace, ...objA.initialNamespaces])); - expectedEnforceMap.set(objB.type, new Set([optionsNamespace, ...objB.initialNamespaces])); + const expectedNamespace = optionsNamespace; + const expectedObjects = [ + { + type: objA.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: objA.initialNamespaces, + existingNamespaces: [], + }, + { + type: objB.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + initialNamespaces: objB.initialNamespaces, + existingNamespaces: [], + }, + ]; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeBulkCreate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + expect(expectedNamespace).toEqual(actualNamespace); + expect(expectedObjects).toEqual(actualObjects); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate as jest.Mock, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; await bulkCreateSuccess(client, repository, [obj1, obj2], { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(2); objects.forEach((obj, i) => { @@ -1509,40 +1318,6 @@ describe('SavedObjectsRepository Security Extension', () => { expect(typeMap).toBe(authMap); }); }); - - test(`adds audit event per object when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - - const objects = [obj1, obj2]; - await bulkCreateSuccess(client, repository, objects, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.CREATE, - savedObject: { type: obj.type, id: obj.id }, - outcome: 'unknown', - }); - }); - }); - - test(`adds audit event per object when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - const objects = [obj1, obj2]; - await expect(bulkCreateSuccess(client, repository, objects, { namespace })).rejects.toThrow( - enforceError - ); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.CREATE, - savedObject: { type: obj.type, id: obj.id }, - error: enforceError, - }); - }); - }); }); describe('#bulkUpdate', () => { @@ -1557,69 +1332,82 @@ describe('SavedObjectsRepository Security Extension', () => { attributes: { title: 'Test Two' }, }; - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeUpdate rejects promise`, async () => { + mockSecurityExt.authorizeBulkUpdate.mockRejectedValueOnce(checkAuthError); await expect(bulkUpdateSuccess(client, repository, registry, [obj1, obj2])).rejects.toThrow( checkAuthError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkUpdate, 'unauthorized'); await expect(bulkUpdateSuccess(client, repository, registry, [obj1, obj2])).rejects.toThrow( enforceError ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'partially_authorized'); + setupRedactPassthrough(mockSecurityExt); + + const objects = [obj1, obj2]; + const result = await bulkUpdateSuccess(client, repository, registry, objects); + + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); + expect(client.bulk).toHaveBeenCalledTimes(1); + expect(result).toEqual({ + saved_objects: objects.map((obj) => expectUpdateResult(obj)), + }); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; const result = await bulkUpdateSuccess(client, repository, registry, objects); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); expect(client.bulk).toHaveBeenCalledTimes(1); expect(result).toEqual({ saved_objects: objects.map((obj) => expectUpdateResult(obj)), }); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`calls authorizeBulkUpdate with correct parameters`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'fully_authorized'); await bulkUpdateSuccess(client, repository, registry, [obj1, obj2], { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_update']); - const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([obj1.type, obj2.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(obj1.type, new Set([namespace])); - expectedEnforceMap.set(obj2.type, new Set([namespace])); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); + const expectedNamespace = namespace; + const expectedObjects = [ + { + type: obj1.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + existingNamespaces: [], + }, + { + type: obj2.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + existingNamespaces: [], + }, + ]; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeBulkUpdate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(actualNamespace).toEqual(expectedNamespace); + expect(actualObjects).toEqual(expectedObjects); }); - test(`calls performAuthorization with object spaces`, async () => { + test(`calls authorizeBulkUpdate with object spaces`, async () => { const objA = { ...obj1, namespace: 'ns-1', // object namespace @@ -1629,43 +1417,44 @@ describe('SavedObjectsRepository Security Extension', () => { namespace: 'ns-2', // object namespace }; - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeUpdate, 'fully_authorized'); await bulkUpdateSuccess(client, repository, registry, [objA, objB], { namespace, }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_update']); - const expectedSpaces = new Set([namespace, objA.namespace, objB.namespace]); - const expectedTypes = new Set([objA.type, objB.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(objA.type, new Set([namespace, objA.namespace])); - expectedEnforceMap.set(objB.type, new Set([namespace, objB.namespace])); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); + const expectedNamespace = namespace; + const expectedObjects = [ + { + type: obj1.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + objectNamespace: 'ns-1', + existingNamespaces: [], + }, + { + type: obj2.type, + id: expect.objectContaining(/index-pattern:[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}/), + objectNamespace: 'ns-2', + existingNamespaces: [], + }, + ]; - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; + const { namespace: actualNamespace, objects: actualObjects } = + mockSecurityExt.authorizeBulkUpdate.mock.calls[0][0]; - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(actualNamespace).toEqual(expectedNamespace); + expect(actualObjects).toEqual(expectedObjects); }); test(`calls redactNamespaces with authorization map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkUpdate, 'fully_authorized'); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; await bulkUpdateSuccess(client, repository, registry, objects, { namespace }); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(2); objects.forEach((obj, i) => { @@ -1680,40 +1469,6 @@ describe('SavedObjectsRepository Security Extension', () => { expect(typeMap).toBe(authMap); }); }); - - test(`adds audit event per object when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - - const objects = [obj1, obj2]; - await bulkUpdateSuccess(client, repository, registry, objects, { namespace }); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE, - savedObject: { type: obj.type, id: obj.id }, - outcome: 'unknown', - }); - }); - }); - - test(`adds audit event per object when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - const objects = [obj1, obj2]; - await expect( - bulkUpdateSuccess(client, repository, registry, objects, { namespace }) - ).rejects.toThrow(enforceError); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE, - savedObject: { type: obj.type, id: obj.id }, - error: enforceError, - }); - }); - }); }); describe('#bulkDelete', () => { @@ -1750,26 +1505,26 @@ describe('SavedObjectsRepository Security Extension', () => { ], }; - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when authorizeBulkDelete rejects promise`, async () => { + mockSecurityExt.authorizeBulkDelete.mockRejectedValueOnce(checkAuthError); await expect( bulkDeleteSuccess(client, repository, registry, testObjs, options) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + setupAuthorizeFunc(mockSecurityExt.authorizeBulkDelete, 'unauthorized'); await expect( bulkDeleteSuccess(client, repository, registry, testObjs, options) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledTimes(1); }); - test(`returns result when authorized`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + test(`returns result when partially authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkDelete, 'partially_authorized'); setupRedactPassthrough(mockSecurityExt); const result = await bulkDeleteSuccess( @@ -1781,70 +1536,44 @@ describe('SavedObjectsRepository Security Extension', () => { internalOptions ); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledTimes(1); expect(client.bulk).toHaveBeenCalledTimes(1); expect(result).toEqual({ statuses: testObjs.map((obj) => createBulkDeleteSuccessStatus(obj)), }); }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - - await bulkDeleteSuccess(client, repository, registry, testObjs, options, internalOptions); - - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['bulk_delete']); - const exptectedSpaces = new Set(internalOptions.mockMGetResponseObjects[1].initialNamespaces); - const expectedTypes = new Set([obj1.type, obj2.type]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set(obj1.type, new Set([namespace])); - expectedEnforceMap.set(obj2.type, new Set([namespace])); - - const { - actions: actualActions, - types: actualTypes, - spaces: actualSpaces, - enforceMap: actualEnforceMap, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, exptectedSpaces)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - }); + test(`returns result when fully authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkDelete, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); - test(`adds audit event per object when successful`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); + const result = await bulkDeleteSuccess( + client, + repository, + registry, + testObjs, + options, + internalOptions + ); - const objects = [obj1, obj2]; - await bulkDeleteSuccess(client, repository, registry, objects, options); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.DELETE, - savedObject: { type: obj.type, id: obj.id }, - outcome: 'unknown', - }); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledTimes(1); + expect(client.bulk).toHaveBeenCalledTimes(1); + expect(result).toEqual({ + statuses: testObjs.map((obj) => createBulkDeleteSuccessStatus(obj)), }); }); - test(`adds audit event per object when not successful`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); - - const objects = [obj1, obj2]; - await expect( - bulkDeleteSuccess(client, repository, registry, objects, options) - ).rejects.toThrow(enforceError); + test(`calls authorizeBulkDelete with correct actions, types, spaces, and enforce map`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkDelete, 'fully_authorized'); + await bulkDeleteSuccess(client, repository, registry, testObjs, options, internalOptions); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.DELETE, - savedObject: { type: obj.type, id: obj.id }, - error: enforceError, - }); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledWith({ + namespace, + objects: [ + { type: obj1.type, id: obj1.id, existingNamespaces: [] }, + { type: obj2.type, id: obj2.id, existingNamespaces: ['foo-namespace', 'NS-1', 'NS-2'] }, + ], }); }); }); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.spaces_extension.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.spaces_extension.test.ts index adfa75a48e986..bc9c5b6e7c581 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.spaces_extension.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.spaces_extension.test.ts @@ -27,13 +27,13 @@ import { SavedObjectsBulkUpdateObject, } from '@kbn/core-saved-objects-api-server'; import { SavedObjectsSerializer } from '@kbn/core-saved-objects-base-server-internal'; -import { SavedObject } from '@kbn/core-saved-objects-server'; import { ISavedObjectsSpacesExtension, ISavedObjectsSecurityExtension, ISavedObjectsEncryptionExtension, + SavedObject, + SavedObjectsErrorHelpers, } from '@kbn/core-saved-objects-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; import { kibanaMigratorMock } from '../mocks'; import { createRegistry, @@ -54,10 +54,11 @@ import { bulkCreateSuccess, bulkUpdateSuccess, findSuccess, - setupPerformAuthUnauthorized, generateIndexPatternSearchResults, bulkDeleteSuccess, ENCRYPTED_TYPE, + setupAuthorizeFunc, + setupAuthorizeFind, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; @@ -881,6 +882,11 @@ describe('SavedObjectsRepository Spaces Extension', () => { }); describe(`with security extension`, () => { + // Note: resolve, bulkResolve, and collectMultiNamespaceReferences are not tested here because they + // receive parameter arguments from internal methods (internalBulkResolve and the internal + // implementation of collectMultiNamespaceReferences). Arguments to these methods are tested above. + const currentSpace = 'current_space'; + beforeEach(() => { pointInTimeFinderMock.mockClear(); client = elasticsearchClientMock.createElasticsearchClient(); @@ -900,7 +906,7 @@ describe('SavedObjectsRepository Spaces Extension', () => { mockSpacesExt.getSearchableNamespaces.mockImplementation( (namespaces: string[] | undefined): Promise => { if (!namespaces) { - return Promise.resolve([] as string[]); + return Promise.resolve([currentSpace] as string[]); } else if (!namespaces.length) { return Promise.resolve(namespaces); } @@ -915,11 +921,17 @@ describe('SavedObjectsRepository Spaces Extension', () => { } } ); + mockSpacesExt.getCurrentNamespace.mockImplementation((namespace: string | undefined) => { + if (namespace) { + throw SavedObjectsErrorHelpers.createBadRequestError(ERROR_NAMESPACE_SPECIFIED); + } + return currentSpace; + }); }); describe(`#find`, () => { test(`returns empty result if user is unauthorized`, async () => { - setupPerformAuthUnauthorized(mockSecurityExt); + setupAuthorizeFind(mockSecurityExt, 'unauthorized'); const type = 'index-pattern'; const spaceOverride = 'ns-4'; const generatedResults = generateIndexPatternSearchResults(spaceOverride); @@ -927,6 +939,289 @@ describe('SavedObjectsRepository Spaces Extension', () => { const result = await repository.find({ type, namespaces: [spaceOverride] }); expect(result).toEqual(expect.objectContaining({ total: 0 })); }); + + test(`calls authorizeFind with the current namespace`, async () => { + const type = 'index-pattern'; + await findSuccess(client, repository, { type }); + expect(mockSpacesExt.getSearchableNamespaces).toBeCalledTimes(1); + expect(mockSpacesExt.getSearchableNamespaces).toBeCalledWith(undefined); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeFind).toHaveBeenCalledWith( + expect.objectContaining({ namespaces: new Set([currentSpace]) }) + ); + }); + }); + + describe(`#create`, () => { + test(`calls authorizeCreate with the current namespace`, async () => { + const type = CUSTOM_INDEX_TYPE; + setupAuthorizeFunc(mockSecurityExt.authorizeCreate as jest.Mock, 'fully_authorized'); + await repository.create(type, { attr: 'value' }); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCreate).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#bulkCreate`, () => { + const obj1 = { + type: 'config', + id: '6.0.0-alpha1', + attributes: { title: 'Test One' }, + references: [{ name: 'ref_0', type: 'test', id: '1' }], + }; + const obj2 = { + type: MULTI_NAMESPACE_TYPE, + id: 'logstash-*', + attributes: { title: 'Test Two' }, + references: [{ name: 'ref_0', type: 'test', id: '2' }], + }; + + beforeEach(() => { + mockPreflightCheckForCreate.mockReset(); + mockPreflightCheckForCreate.mockImplementation(({ objects }) => { + return Promise.resolve(objects.map(({ type, id }) => ({ type, id }))); // respond with no errors by default + }); + }); + + test(`calls authorizeBulkCreate with the current namespace`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkCreate, 'fully_authorized'); + await bulkCreateSuccess(client, repository, [obj1, obj2]); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkCreate).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#get`, () => { + test(`calls authorizeGet with the current namespace`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeGet, 'fully_authorized'); + const type = CUSTOM_INDEX_TYPE; + const id = 'some-id'; + + const response = getMockGetResponse(registry, { + type, + id, + }); + + client.get.mockResponseOnce(response); + await repository.get(type, id); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeGet).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#bulkGet`, () => { + const obj1: SavedObject = { + type: 'config', + id: '6.0.0-alpha1', + attributes: { title: 'Testing' }, + references: [ + { + name: 'ref_0', + type: 'test', + id: '1', + }, + ], + originId: 'some-origin-id', // only one of the results has an originId, this is intentional to test both a positive and negative case + }; + const obj2: SavedObject = { + type: MULTI_NAMESPACE_TYPE, + id: 'logstash-*', + attributes: { title: 'Testing' }, + references: [ + { + name: 'ref_0', + type: 'test', + id: '2', + }, + ], + }; + + test(`calls authorizeBulkGet with the current namespace`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkGet, 'fully_authorized'); + await bulkGetSuccess(client, repository, registry, [obj1, obj2]); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkGet).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#update`, () => { + test(`calls authorizeUpdate with the current namespace`, async () => { + const type = CUSTOM_INDEX_TYPE; + const id = 'some-id'; + + await updateSuccess( + client, + repository, + registry, + type, + id, + {}, + { upsert: true }, + { mockGetResponseValue: { found: false } as estypes.GetResponse } + ); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdate).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#bulkUpdate`, () => { + const obj1: SavedObjectsBulkUpdateObject = { + type: 'config', + id: '6.0.0-alpha1', + attributes: { title: 'Test One' }, + }; + const obj2: SavedObjectsBulkUpdateObject = { + type: MULTI_NAMESPACE_TYPE, + id: 'logstash-*', + attributes: { title: 'Test Two' }, + }; + + test(`calls authorizeBulkUpdate with the current namespace`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkUpdate, 'fully_authorized'); + await bulkUpdateSuccess( + client, + repository, + registry, + [obj1, obj2], + undefined, + undefined, + currentSpace + ); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkUpdate).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#delete`, () => { + test(`calls authorizeDelete with the current namespace`, async () => { + const type = CUSTOM_INDEX_TYPE; + const id = 'some-id'; + setupAuthorizeFunc(mockSecurityExt.authorizeBulkDelete, 'fully_authorized'); + await deleteSuccess(client, repository, registry, type, id); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeDelete).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#bulkDelete`, () => { + const obj1: SavedObjectsBulkUpdateObject = { + type: 'config', + id: '6.0.0-alpha1', + attributes: { title: 'Test One' }, + }; + const obj2: SavedObjectsBulkUpdateObject = { + type: MULTI_NAMESPACE_TYPE, + id: 'logstash-*', + attributes: { title: 'Test Two' }, + }; + + const testObjs = [obj1, obj2]; + const options = { + force: true, + }; + + const internalOptions = { + mockMGetResponseObjects: [ + { + ...obj1, + initialNamespaces: undefined, + }, + { + ...obj2, + initialNamespaces: [currentSpace, 'NS-1', 'NS-2'], + }, + ], + }; + + beforeEach(() => { + mockDeleteLegacyUrlAliases.mockClear(); + mockDeleteLegacyUrlAliases.mockResolvedValue(); + }); + + test(`calls authorizeBulkDelete with the current namespace`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeBulkDelete, 'fully_authorized'); + await bulkDeleteSuccess(client, repository, registry, testObjs, options, internalOptions); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeBulkDelete).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#checkConflicts`, () => { + test(`calls authorizeCheckConflicts with the current namespace`, async () => { + const obj1 = { type: CUSTOM_INDEX_TYPE, id: 'one' }; + const obj2 = { type: MULTI_NAMESPACE_ISOLATED_TYPE, id: 'two' }; + + await checkConflictsSuccess(client, repository, registry, [obj1, obj2]); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeCheckConflicts).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#removeReferencesTo`, () => { + test(`calls authorizeRemoveReferences with the current namespace`, async () => { + const type = CUSTOM_INDEX_TYPE; + const id = 'some-id'; + + const query = { query: 1, aggregations: 2 }; + mockGetSearchDsl.mockReturnValue(query); + + await removeReferencesToSuccess(client, repository, type, id); + expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); + expect(mockSpacesExt.getCurrentNamespace).toHaveBeenCalledWith(undefined); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeRemoveReferences).toHaveBeenCalledWith( + expect.objectContaining({ namespace: currentSpace }) + ); + }); + }); + + describe(`#openPointInTimeForType`, () => { + test(`calls authorizeOpenPointInTime with the current namespace`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeOpenPointInTime, 'fully_authorized'); + await repository.openPointInTimeForType(CUSTOM_INDEX_TYPE); + expect(mockSpacesExt.getSearchableNamespaces).toBeCalledTimes(1); + expect(mockSpacesExt.getSearchableNamespaces).toBeCalledWith(undefined); // will resolve current space + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeOpenPointInTime).toHaveBeenCalledWith( + expect.objectContaining({ namespaces: new Set([currentSpace]) }) + ); + }); }); }); @@ -972,7 +1267,7 @@ describe('SavedObjectsRepository Spaces Extension', () => { }); describe(`#create`, () => { - test(`calls encryptAttributes with the current namespace by default`, async () => { + test(`calls encryptAttributes with the current namespace`, async () => { mockEncryptionExt.isEncryptableType.mockReturnValue(true); await repository.create(encryptedSO.type, encryptedSO.attributes); expect(mockSpacesExt.getCurrentNamespace).toBeCalledTimes(1); @@ -1002,7 +1297,7 @@ describe('SavedObjectsRepository Spaces Extension', () => { references: [{ name: 'ref_0', type: 'test', id: '1' }], }; - test(`calls encryptAttributes with the current namespace by default`, async () => { + test(`calls encryptAttributes with the current namespace`, async () => { mockEncryptionExt.isEncryptableType.mockReturnValueOnce(false); mockEncryptionExt.isEncryptableType.mockReturnValueOnce(true); mockEncryptionExt.isEncryptableType.mockReturnValueOnce(false); @@ -1038,7 +1333,7 @@ describe('SavedObjectsRepository Spaces Extension', () => { }); describe(`#update`, () => { - it('calls encryptAttributes with the current namespace by default', async () => { + it('calls encryptAttributes with the current namespace', async () => { mockEncryptionExt.isEncryptableType.mockReturnValue(true); mockEncryptionExt.decryptOrStripResponseAttributes.mockResolvedValue({ ...encryptedSO, @@ -1085,7 +1380,7 @@ describe('SavedObjectsRepository Spaces Extension', () => { attributes: { title: 'Test Two' }, }; - it(`calls encryptAttributes with the current namespace by default`, async () => { + it(`calls encryptAttributes with the current namespace`, async () => { mockEncryptionExt.isEncryptableType.mockReturnValueOnce(false); mockEncryptionExt.isEncryptableType.mockReturnValueOnce(true); mockEncryptionExt.isEncryptableType.mockReturnValueOnce(false); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts index 1a0fbb2805daf..0b395b6154819 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.test.ts @@ -23,7 +23,6 @@ import { import type { Payload } from '@hapi/boom'; import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { SavedObject, SavedObjectReference } from '@kbn/core-saved-objects-server'; import type { SavedObjectsBaseOptions, SavedObjectsFindOptions, @@ -52,11 +51,12 @@ import type { SavedObjectsRawDoc, SavedObjectsRawDocSource, SavedObjectUnsanitizedDoc, + SavedObject, + SavedObjectReference, + BulkResolveError, } from '@kbn/core-saved-objects-server'; -import { - SavedObjectsErrorHelpers, - ALL_NAMESPACES_STRING, -} from '@kbn/core-saved-objects-utils-server'; +import { ALL_NAMESPACES_STRING } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { SavedObjectsRepository } from './repository'; import { PointInTimeFinder } from './point_in_time_finder'; import { loggerMock } from '@kbn/logging-mocks'; @@ -69,7 +69,6 @@ import { kibanaMigratorMock } from '../mocks'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import * as esKuery from '@kbn/es-query'; import { errors as EsErrors } from '@elastic/elasticsearch'; -import type { InternalBulkResolveError } from './internal_bulk_resolve'; import { CUSTOM_INDEX_TYPE, @@ -4069,7 +4068,7 @@ describe('SavedObjectsRepository', () => { it('throws when internalBulkResolve result is an error', async () => { const error = SavedObjectsErrorHelpers.decorateBadRequestError(new Error('Oh no!')); - const expectedResult: InternalBulkResolveError = { type: 'obj-type', id: 'obj-id', error }; + const expectedResult: BulkResolveError = { type: 'obj-type', id: 'obj-id', error }; mockInternalBulkResolve.mockResolvedValue({ resolved_objects: [expectedResult] }); await expect(repository.resolve('foo', '2')).rejects.toEqual(error); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.ts index 1c36ad1edc8b8..2e2525d3d3b8b 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository.ts @@ -17,7 +17,7 @@ import { isSupportedEsServer, isNotFoundFromUnsupportedServer, } from '@kbn/core-elasticsearch-server-internal'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; +import type { BulkResolveError } from '@kbn/core-saved-objects-server'; import type { SavedObjectsBaseOptions, SavedObjectsIncrementCounterOptions, @@ -69,15 +69,15 @@ import { type ISavedObjectsEncryptionExtension, type ISavedObjectsSecurityExtension, type ISavedObjectsSpacesExtension, - AuditAction, type CheckAuthorizationResult, type AuthorizationTypeMap, + AuthorizeCreateObject, + AuthorizeUpdateObject, + type AuthorizeBulkGetObject, + type SavedObject, } from '@kbn/core-saved-objects-server'; -import { - DEFAULT_NAMESPACE_STRING, - SavedObjectsErrorHelpers, - type DecoratedError, -} from '@kbn/core-saved-objects-utils-server'; +import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers, type DecoratedError } from '@kbn/core-saved-objects-server'; import { ALL_NAMESPACES_STRING, FIND_DEFAULT_PAGE, @@ -101,11 +101,7 @@ import { PointInTimeFinder } from './point_in_time_finder'; import { createRepositoryEsClient, type RepositoryEsClient } from './repository_es_client'; import { getSearchDsl } from './search_dsl'; import { includedFields } from './included_fields'; -import { - internalBulkResolve, - type InternalBulkResolveError, - isBulkResolveError, -} from './internal_bulk_resolve'; +import { internalBulkResolve, isBulkResolveError } from './internal_bulk_resolve'; import { validateConvertFilterToKueryNode } from './filter_utils'; import { validateAndConvertAggregations } from './aggregations'; import { @@ -351,28 +347,14 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { existingOriginId = preflightResult?.existingDocument?._source?.originId; } - const spacesToEnforce = new Set(initialNamespaces).add(namespaceString); // Always check/enforce authZ for the active space - const existingNamespaces = preflightResult?.existingDocument?._source?.namespaces || []; - const spacesToAuthorize = new Set(existingNamespaces); - spacesToAuthorize.delete(ALL_NAMESPACES_STRING); // Don't accidentally check for global privileges when the object exists in '*' - const authorizationResult = await this._securityExtension?.performAuthorization({ - // If a user tries to create an object with `initialNamespaces: ['*']`, they need to have 'create' privileges for the Global Resource - // (e.g., All privileges for All Spaces). - // Inversely, if a user tries to overwrite an object that already exists in '*', they don't need to 'create' privileges for the Global - // Resource, so in that case we have to filter out that string from spacesToAuthorize (because `allowGlobalResource: true` is used - // below.) - actions: new Set(['create']), - types: new Set([type]), - spaces: new Set([...spacesToEnforce, ...spacesToAuthorize]), // existing namespaces are included so we can later redact if necessary - enforceMap: new Map([[type, spacesToEnforce]]), - auditCallback: (error) => - this._securityExtension!.addAuditEvent({ - action: AuditAction.CREATE, - savedObject: { type, id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the create operation has not occurred yet - }), - options: { allowGlobalResource: true }, + const authorizationResult = await this._securityExtension?.authorizeCreate({ + namespace, + object: { + type, + id, + initialNamespaces, + existingNamespaces: preflightResult?.existingDocument?._source?.namespaces ?? [], + }, }); if (preflightResult?.error) { @@ -524,45 +506,20 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { objects: preflightCheckObjects, }); - const typesAndSpaces = new Map>(); - const spacesToAuthorize = new Set([namespaceString]); // Always check authZ for the active space - for (const { value } of validObjects) { - const { object, preflightCheckIndex: index } = value; + const authObjects: AuthorizeCreateObject[] = validObjects.map((element) => { + const { object, preflightCheckIndex: index } = element.value; const preflightResult = index !== undefined ? preflightCheckResponse[index] : undefined; + return { + type: object.type, + id: object.id, + initialNamespaces: object.initialNamespaces, + existingNamespaces: preflightResult?.existingDocument?._source.namespaces ?? [], + }; + }); - const spacesToEnforce = typesAndSpaces.get(object.type) ?? new Set([namespaceString]); // Always enforce authZ for the active space - for (const space of object.initialNamespaces ?? []) { - spacesToEnforce.add(space); - spacesToAuthorize.add(space); - } - typesAndSpaces.set(object.type, spacesToEnforce); - for (const space of preflightResult?.existingDocument?._source.namespaces ?? []) { - if (space === ALL_NAMESPACES_STRING) continue; // Don't accidentally check for global privileges when the object exists in '*' - spacesToAuthorize.add(space); // existing namespaces are included so we can later redact if necessary - } - } - - const authorizationResult = await this._securityExtension?.performAuthorization({ - // If a user tries to create an object with `initialNamespaces: ['*']`, they need to have 'bulk_create' privileges for the Global - // Resource (e.g., All privileges for All Spaces). - // Inversely, if a user tries to overwrite an object that already exists in '*', they don't need to have 'bulk_create' privileges for the Global - // Resource, so in that case we have to filter out that string from spacesToAuthorize (because `allowGlobalResource: true` is used - // below.) - actions: new Set(['bulk_create']), - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - for (const { value } of validObjects) { - this._securityExtension!.addAuditEvent({ - action: AuditAction.CREATE, - savedObject: { type: value.object.type, id: value.object.id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the create operation has not occurred yet - }); - } - }, - options: { allowGlobalResource: true }, + const authorizationResult = await this._securityExtension?.authorizeBulkCreate({ + namespace, + objects: authObjects, }); let bulkRequestIndexCounter = 0; @@ -759,21 +716,10 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { }; }); - const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); const validObjects = expectedBulkGetResults.filter(isRight); - const typesAndSpaces = new Map>(); - for (const { value } of validObjects) { - typesAndSpaces.set(value.type, new Set([namespaceString])); // Always enforce authZ for the active space - } - - await this._securityExtension?.performAuthorization({ - actions: new Set(['bulk_create']), - types: new Set(typesAndSpaces.keys()), - spaces: new Set([namespaceString]), // Always check authZ for the active space - enforceMap: typesAndSpaces, - // auditCallback is intentionally omitted, this function in the previous Security SOC wrapper implementation - // did not have audit logging. This is primarily because it is only used by Kibana and is not exposed in a - // public HTTP API + await this._securityExtension?.authorizeCheckConflicts({ + namespace, + objects: validObjects.map((element) => ({ type: element.value.type, id: element.value.id })), }); const bulkGetDocs = validObjects.map(({ value: { type, id } }) => ({ @@ -841,22 +787,11 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { const { refresh = DEFAULT_REFRESH_SETTING, force } = options; - const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); - const typesAndSpaces = new Map>([[type, new Set([namespaceString])]]); // Always enforce authZ for the active space - - await this._securityExtension?.performAuthorization({ - actions: new Set(['delete']), - types: new Set([type]), - spaces: new Set([namespaceString]), // Always check authZ for the active space - enforceMap: typesAndSpaces, - auditCallback: (error) => { - this._securityExtension!.addAuditEvent({ - action: AuditAction.DELETE, - savedObject: { type, id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the delete operation has not occurred yet - }); - }, + // we don't need to pass existing namespaces in because we're only concerned with authorizing + // the current space. This saves us from performing the preflight check if we're unauthorized + await this._securityExtension?.authorizeDelete({ + namespace, + object: { type, id }, }); const rawId = this._serializer.generateRawId(namespace, type, id); @@ -1123,42 +1058,25 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { force, }); - // Perform Auth Check (on both L/R, we'll deal with that later) - const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); - const typesAndSpaces = new Map>(); - const spacesToAuthorize = new Set([namespaceString]); // Always check authZ for the active space if (this._securityExtension) { - for (const { value } of expectedBulkDeleteMultiNamespaceDocsResults) { - const index = (value as { esRequestIndex: number }).esRequestIndex; - const { type } = value; - const preflightResult = - index !== undefined ? multiNamespaceDocsResponse?.body.docs[index] : undefined; - - const spacesToEnforce = typesAndSpaces.get(type) ?? new Set([namespaceString]); // Always enforce authZ for the active space - typesAndSpaces.set(type, spacesToEnforce); - // @ts-expect-error MultiGetHit._source is optional - for (const space of preflightResult?._source?.namespaces ?? []) { - spacesToAuthorize.add(space); // existing namespaces are included - } - } - } + // Perform Auth Check (on both L/R, we'll deal with that later) + const authObjects: AuthorizeUpdateObject[] = expectedBulkDeleteMultiNamespaceDocsResults.map( + (element) => { + const index = (element.value as { esRequestIndex: number }).esRequestIndex; + const { type, id } = element.value; + const preflightResult = + index !== undefined ? multiNamespaceDocsResponse?.body.docs[index] : undefined; - await this._securityExtension?.performAuthorization({ - actions: new Set(['bulk_delete']), - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - for (const { value } of expectedBulkDeleteMultiNamespaceDocsResults) { - this._securityExtension!.addAuditEvent({ - action: AuditAction.DELETE, - savedObject: { type: value.type, id: value.id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the delete operation has not occurred yet - }); + return { + type, + id, + // @ts-expect-error MultiGetHit._source is optional + existingNamespaces: preflightResult?._source?.namespaces ?? [], + }; } - }, - }); + ); + await this._securityExtension.authorizeBulkDelete({ namespace, objects: authObjects }); + } // Filter valid objects const validObjects = expectedBulkDeleteMultiNamespaceDocsResults.filter(isRight); @@ -1438,30 +1356,23 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { } } - // We have to first do a "pre-authorization" check so that we can construct the search DSL accordingly - const spacesToPreauthorize = new Set(namespaces); + // We have to first perform an initial authorization check so that we can construct the search DSL accordingly + const spacesToAuthorize = new Set(namespaces); + const typesToAuthorize = new Set(types); let typeToNamespacesMap: Map | undefined; - let preAuthorizationResult: CheckAuthorizationResult<'find'> | undefined; + let authorizationResult: CheckAuthorizationResult | undefined; if (!disableExtensions && this._securityExtension) { - preAuthorizationResult = await this._securityExtension.performAuthorization({ - actions: new Set(['find']), - types: new Set(types), - spaces: spacesToPreauthorize, + authorizationResult = await this._securityExtension.authorizeFind({ + namespaces: spacesToAuthorize, + types: typesToAuthorize, }); - if (preAuthorizationResult.status === 'unauthorized') { + if (authorizationResult?.status === 'unauthorized') { // If the user is unauthorized to find *anything* they requested, return an empty response - this._securityExtension.addAuditEvent({ - action: AuditAction.FIND, - error: new Error(`User is unauthorized for any requested types/spaces.`), - // TODO: include object type(s) that were requested? - // requestedTypes: types, - // requestedSpaces: namespaces, - }); return SavedObjectsUtils.createEmptyFindResponse(options); } - if (preAuthorizationResult.status === 'partially_authorized') { + if (authorizationResult?.status === 'partially_authorized') { typeToNamespacesMap = new Map(); - for (const [objType, entry] of preAuthorizationResult.typeMap) { + for (const [objType, entry] of authorizationResult.typeMap) { if (!entry.find) continue; // This ensures that the query DSL can filter only for object types that the user is authorized to access for a given space const { authorizedSpaces, isGloballyAuthorized } = entry.find; @@ -1542,30 +1453,22 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { return result; } - const spacesToAuthorize = new Set(spacesToPreauthorize); // only for namespace redaction - for (const { type: objType, id, namespaces: objectNamespaces = [] } of result.saved_objects) { - for (const space of objectNamespaces) { - spacesToAuthorize.add(space); - } - this._securityExtension?.addAuditEvent({ - action: AuditAction.FIND, - savedObject: { type: objType, id }, - }); - } - const authorizationResult = - spacesToAuthorize.size > spacesToPreauthorize.size - ? // If there are any namespaces in the object results that were not already checked during pre-authorization, we need *another* - // authorization check so we can correctly redact the object namespaces below. - await this._securityExtension?.performAuthorization({ - actions: new Set(['find']), - types: new Set(types), - spaces: spacesToAuthorize, - }) - : undefined; + // Now that we have a full set of results with all existing namespaces for each object, + // we need an updated authorization type map to pass on to the redact method + const redactTypeMap = await this._securityExtension?.getFindRedactTypeMap({ + previouslyCheckedNamespaces: spacesToAuthorize, + objects: result.saved_objects.map((obj) => { + return { + type: obj.type, + id: obj.id, + existingNamespaces: obj.namespaces ?? [], + }; + }), + }); return this.optionallyDecryptAndRedactBulkResult( result, - authorizationResult?.typeMap ?? preAuthorizationResult?.typeMap // If we made a second authorization check, use that one; otherwise, fall back to the pre-authorization check + redactTypeMap ?? authorizationResult?.typeMap // If the redact type map is valid, use that one; otherwise, fall back to the authorization check ); } @@ -1682,37 +1585,38 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { throw SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError(); } - const typesAndSpaces = new Map>(); - const spacesToAuthorize = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check authZ for the active space + const authObjects: AuthorizeBulkGetObject[] = []; const result = { saved_objects: expectedBulkGetResults.map((expectedResult) => { if (isLeft(expectedResult)) { + const { type, id } = expectedResult.value; + authObjects.push({ type, id, existingNamespaces: [], error: true }); return expectedResult.value as any; } const { type, id, - namespaces = [SavedObjectsUtils.namespaceIdToString(namespace)], // set to default value for `rawDocExistsInNamespaces` check below + // set to default namespaces value for `rawDocExistsInNamespaces` check below + namespaces = [SavedObjectsUtils.namespaceIdToString(namespace)], esRequestIndex, } = expectedResult.value; - const doc = bulkGetResponse?.body.docs[esRequestIndex]; - const spacesToEnforce = - typesAndSpaces.get(type) ?? new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always enforce authZ for the active space - for (const space of namespaces) { - spacesToEnforce.add(space); - typesAndSpaces.set(type, spacesToEnforce); - spacesToAuthorize.add(space); - } + const doc = bulkGetResponse?.body.docs[esRequestIndex]; // @ts-expect-error MultiGetHit._source is optional - for (const space of doc?._source?.namespaces ?? []) { - spacesToAuthorize.add(space); // existing namespaces are included so we can later redact if necessary - } + const docNotFound = !doc?.found || !this.rawDocExistsInNamespaces(doc, namespaces); - // @ts-expect-error MultiGetHit._source is optional - if (!doc?.found || !this.rawDocExistsInNamespaces(doc, namespaces)) { + authObjects.push({ + type, + id, + objectNamespaces: namespaces, + // @ts-expect-error MultiGetHit._source is optional + existingNamespaces: doc?._source?.namespaces ?? [], + error: docNotFound, + }); + + if (docNotFound) { return { id, type, @@ -1725,21 +1629,9 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { }), }; - const authorizationResult = await this._securityExtension?.performAuthorization({ - actions: new Set(['bulk_get']), - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - for (const { type, id, error: bulkError } of result.saved_objects) { - if (!error && !!bulkError) continue; // Only log success events for objects that were actually found (and are being returned to the user) - this._securityExtension!.addAuditEvent({ - action: AuditAction.GET, - savedObject: { type, id }, - error, - }); - } - }, + const authorizationResult = await this._securityExtension?.authorizeBulkGet({ + namespace, + objects: authObjects, }); return this.optionallyDecryptAndRedactBulkResult(result, authorizationResult?.typeMap); @@ -1768,7 +1660,7 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { const resolvedObjects = bulkResults.map>((result) => { // extract payloads from saved object errors if (isBulkResolveError(result)) { - const errorResult = result as InternalBulkResolveError; + const errorResult = result as BulkResolveError; const { type, id, error } = errorResult; return { saved_object: { type, id, error: errorContent(error) } as unknown as SavedObject, @@ -1806,39 +1698,23 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { throw SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError(type, id); } - const spacesToEnforce = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check/enforce authZ for the active space - const existingNamespaces = body?._source?.namespaces || []; + const objectNotFound = + !isFoundGetResponse(body) || indexNotFound || !this.rawDocExistsInNamespace(body, namespace); - const authorizationResult = await this._securityExtension?.performAuthorization({ - actions: new Set(['get']), - types: new Set([type]), - spaces: new Set([...spacesToEnforce, ...existingNamespaces]), // existing namespaces are included so we can later redact if necessary - enforceMap: new Map([[type, spacesToEnforce]]), - auditCallback: (error) => { - if (error) { - this._securityExtension!.addAuditEvent({ - action: AuditAction.GET, - savedObject: { type, id }, - error, - }); - } - // Audit event for success case is added separately below + const authorizationResult = await this._securityExtension?.authorizeGet({ + namespace, + object: { + type, + id, + existingNamespaces: body?._source?.namespaces ?? [], }, + objectNotFound, }); - if ( - !isFoundGetResponse(body) || - indexNotFound || - !this.rawDocExistsInNamespace(body, namespace) - ) { + if (objectNotFound) { // see "404s from missing index" above throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id); } - // Only log a success event if the object was actually found (and is being returned to the user) - this._securityExtension?.addAuditEvent({ - action: AuditAction.GET, - savedObject: { type, id }, - }); const result = getSavedObjectFromSource(this._registry, type, id, body); @@ -1908,21 +1784,11 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { }); } - const spacesToEnforce = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check/enforce authZ for the active space - const existingNamespaces = preflightResult?.savedObjectNamespaces || []; - - const authorizationResult = await this._securityExtension?.performAuthorization({ - actions: new Set(['update']), - types: new Set([type]), - spaces: new Set([...spacesToEnforce, ...existingNamespaces]), // existing namespaces are included so we can later redact if necessary - enforceMap: new Map([[type, spacesToEnforce]]), - auditCallback: (error) => - this._securityExtension!.addAuditEvent({ - action: AuditAction.UPDATE, - savedObject: { type, id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the update/upsert operation has not occurred yet - }), + const existingNamespaces = preflightResult?.savedObjectNamespaces ?? []; + + const authorizationResult = await this._securityExtension?.authorizeUpdate({ + namespace, + object: { type, id, existingNamespaces }, }); if ( @@ -2106,9 +1972,6 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { } } - // `objectNamespace` is a namespace string, while `namespace` is a namespace ID. - // The object namespace string, if defined, will supersede the operation's namespace ID. - if (error) { return { tag: 'Left', @@ -2148,6 +2011,8 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { }; } + // `objectNamespace` is a namespace string, while `namespace` is a namespace ID. + // The object namespace string, if defined, will supersede the operation's namespace ID. const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); const getNamespaceId = (objectNamespace?: string) => objectNamespace !== undefined @@ -2175,38 +2040,21 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { throw SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError(); } - const typesAndSpaces = new Map>(); - const spacesToAuthorize = new Set([namespaceString]); // Always check authZ for the active space - for (const { value } of validObjects) { - const { type, objectNamespace, esRequestIndex: index } = value; - const objectNamespaceString = getNamespaceString(objectNamespace); + const authObjects: AuthorizeUpdateObject[] = validObjects.map((element) => { + const { type, id, objectNamespace, esRequestIndex: index } = element.value; const preflightResult = index !== undefined ? bulkGetResponse?.body.docs[index] : undefined; + return { + type, + id, + objectNamespace, + // @ts-expect-error MultiGetHit._source is optional + existingNamespaces: preflightResult?._source?.namespaces ?? [], + }; + }); - const spacesToEnforce = typesAndSpaces.get(type) ?? new Set([namespaceString]); // Always enforce authZ for the active space - spacesToEnforce.add(objectNamespaceString); - typesAndSpaces.set(type, spacesToEnforce); - spacesToAuthorize.add(objectNamespaceString); - // @ts-expect-error MultiGetHit._source is optional - for (const space of preflightResult?._source?.namespaces ?? []) { - spacesToAuthorize.add(space); // existing namespaces are included so we can later redact if necessary - } - } - - const authorizationResult = await this._securityExtension?.performAuthorization({ - actions: new Set(['bulk_update']), - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - for (const { value } of validObjects) { - this._securityExtension!.addAuditEvent({ - action: AuditAction.UPDATE, - savedObject: { type: value.type, id: value.id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the update operation has not occurred yet - }); - } - }, + const authorizationResult = await this._securityExtension?.authorizeBulkUpdate({ + namespace, + objects: authObjects, }); let bulkUpdateRequestIndexCounter = 0; @@ -2363,22 +2211,7 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { const namespace = this.getCurrentNamespace(options.namespace); const { refresh = true } = options; - // TODO: Improve authorization and auditing (https://github.com/elastic/kibana/issues/135259) - - const spaces = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check/enforce authZ for the active space - await this._securityExtension?.performAuthorization({ - actions: new Set(['delete']), - types: new Set([type]), - spaces, - enforceMap: new Map([[type, spaces]]), - auditCallback: (error) => - this._securityExtension!.addAuditEvent({ - action: AuditAction.REMOVE_REFERENCES, - savedObject: { type, id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the updateByQuery operation has not occurred yet - }), - }); + await this._securityExtension?.authorizeRemoveReferences({ namespace, object: { type, id } }); const allTypes = this._registry.getAllTypes().map((t) => t.name); @@ -2650,29 +2483,9 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { } if (!disableExtensions && this._securityExtension) { - const spaces = new Set(namespaces); - const preAuthorizationResult = await this._securityExtension?.performAuthorization({ - actions: new Set(['open_point_in_time']), + await this._securityExtension.authorizeOpenPointInTime({ + namespaces: new Set(namespaces), types: new Set(types), - spaces, - }); - if (preAuthorizationResult.status === 'unauthorized') { - // If the user is unauthorized to find *anything* they requested, return an empty response - this._securityExtension.addAuditEvent({ - action: AuditAction.OPEN_POINT_IN_TIME, - error: new Error('User is unauthorized for any requested types/spaces.'), - // TODO: include object type(s) that were requested? - // requestedTypes: types, - // requestedSpaces: namespaces, - }); - throw SavedObjectsErrorHelpers.decorateForbiddenError(new Error('unauthorized')); - } - this._securityExtension.addAuditEvent({ - action: AuditAction.OPEN_POINT_IN_TIME, - outcome: 'unknown', - // TODO: include object type(s) that were requested? - // requestedTypes: types, - // requestedSpaces: namespaces, }); } @@ -2711,10 +2524,7 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { const { disableExtensions } = internalOptions; if (!disableExtensions && this._securityExtension) { - this._securityExtension.addAuditEvent({ - action: AuditAction.CLOSE_POINT_IN_TIME, - outcome: 'unknown', - }); + this._securityExtension.auditClosePointInTime(); } return await this.client.closePointInTime({ diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_es_client.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_es_client.test.ts index cbd8f81bfc0f5..a0afafa2582ff 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_es_client.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/repository_es_client.test.ts @@ -10,7 +10,7 @@ import { retryCallClusterMock } from './repository_es_client.test.mock'; import { createRepositoryEsClient, RepositoryEsClient } from './repository_es_client'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; describe('RepositoryEsClient', () => { let client: ReturnType; diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.test.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.test.ts index 6016ef84fdc40..7432b7ae3e6ae 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.test.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.test.ts @@ -17,23 +17,21 @@ import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-m import { loggerMock } from '@kbn/logging-mocks'; import type { SavedObjectsUpdateObjectsSpacesObject } from '@kbn/core-saved-objects-api-server'; -import { - SavedObjectsErrorHelpers, - ALL_NAMESPACES_STRING, - setsAreEqual, - setMapsAreEqual, -} from '@kbn/core-saved-objects-utils-server'; +import { ALL_NAMESPACES_STRING } from '@kbn/core-saved-objects-utils-server'; import { SavedObjectsSerializer } from '@kbn/core-saved-objects-base-server-internal'; import { typeRegistryMock } from '@kbn/core-saved-objects-base-server-mocks'; import type { UpdateObjectsSpacesParams } from './update_objects_spaces'; import { updateObjectsSpaces } from './update_objects_spaces'; -import { AuditAction, type ISavedObjectsSecurityExtension } from '@kbn/core-saved-objects-server'; +import { + ISavedObjectsSecurityExtension, + SavedObjectsErrorHelpers, +} from '@kbn/core-saved-objects-server'; import { checkAuthError, enforceError, - setupPerformAuthFullyAuthorized, - setupPerformAuthEnforceFailure, setupRedactPassthrough, + authMap, + setupAuthorizeFunc, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; @@ -651,246 +649,213 @@ describe('#updateObjectsSpaces', () => { let mockSecurityExt: jest.Mocked; let params: UpdateObjectsSpacesParams; + const otherSpace = 'space-to-add'; + const obj1 = { + type: SHAREABLE_OBJ_TYPE, + id: 'id-1', + spaces: [ALL_NAMESPACES_STRING, otherSpace], + }; + const obj2 = { type: SHAREABLE_OBJ_TYPE, id: 'id-2', spaces: [ALL_NAMESPACES_STRING] }; + const obj3 = { type: SHAREABLE_OBJ_TYPE, id: 'id-3', spaces: [EXISTING_SPACE, otherSpace] }; + const obj4 = { type: SHAREABLE_OBJ_TYPE, id: 'id-4', spaces: [EXISTING_SPACE] }; + + const objects = [obj1, obj2, obj3, obj4]; + const spacesToAdd = [otherSpace]; + const spacesToRemove = [EXISTING_SPACE]; + afterEach(() => { - mockSecurityExt.performAuthorization.mockClear(); mockSecurityExt.redactNamespaces.mockClear(); }); - describe(`errors`, () => { - beforeEach(() => { - const obj1 = { type: SHAREABLE_OBJ_TYPE, id: 'id-1' }; - const objects = [obj1]; - const spacesToAdd = ['foo-space']; - mockSecurityExt = savedObjectsExtensionsMock.createSecurityExtension(); - params = setup({ objects, spacesToAdd }, mockSecurityExt); - mockMgetResults({ found: true, namespaces: [EXISTING_SPACE] }); // result for obj1 - mockBulkResults({ error: false }); // result for obj1 - }); - - test(`propagates error from es client bulk get`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); + beforeEach(() => { + mockSecurityExt = savedObjectsExtensionsMock.createSecurityExtension(); + params = setup( + { objects, spacesToAdd, spacesToRemove, options: { namespace: 'foo-namespace' } }, + mockSecurityExt + ); + mockMgetResults( + { found: true, namespaces: [ALL_NAMESPACES_STRING, otherSpace] }, // result for obj1 -- will not be changed + { found: true, namespaces: [ALL_NAMESPACES_STRING] }, // result for obj2 -- will be updated to add otherSpace + { found: true, namespaces: [EXISTING_SPACE, otherSpace] }, // result for obj3 -- will be updated to remove EXISTING_SPACE + { found: true, namespaces: [EXISTING_SPACE] } // result for obj4 -- will be updated to remove EXISTING_SPACE and add otherSpace + ); + mockBulkResults({ error: false }, { error: false }, { error: false }); // results for obj2, obj3, and obj4 + }); - const error = SavedObjectsErrorHelpers.createBadRequestError('OOPS!'); + test(`propagates error from es client bulk get`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); - mockGetBulkOperationError.mockReset(); - client.bulk.mockReset(); - client.bulk.mockImplementationOnce(() => { - throw error; - }); + const error = SavedObjectsErrorHelpers.createBadRequestError('OOPS!'); - await expect(updateObjectsSpaces(params)).rejects.toThrow(error); + mockGetBulkOperationError.mockReset(); + client.bulk.mockReset(); + client.bulk.mockImplementationOnce(() => { + throw error; }); - test(`propagates decorated error when performAuthorization rejects promise`, async () => { - mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); + await expect(updateObjectsSpaces(params)).rejects.toThrow(error); + }); - await expect(updateObjectsSpaces(params)).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - }); + test(`propagates decorated error when authorizeUpdateSpaces rejects promise`, async () => { + mockSecurityExt.authorizeUpdateSpaces.mockRejectedValueOnce(checkAuthError); - test(`propagates decorated error when unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + await expect(updateObjectsSpaces(params)).rejects.toThrow(checkAuthError); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + }); - await expect(updateObjectsSpaces(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - }); + test(`propagates decorated error when unauthorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'unauthorized'); - test(`adds audit event when not unauthorized`, async () => { - setupPerformAuthEnforceFailure(mockSecurityExt); + await expect(updateObjectsSpaces(params)).rejects.toThrow(enforceError); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + }); - await expect(updateObjectsSpaces(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + test(`returns result when authorized`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE_OBJECTS_SPACES, - addToSpaces: params.spacesToAdd, - deleteFromSpaces: undefined, - savedObject: { type: params.objects[0].type, id: params.objects[0].id }, - error: enforceError, - }); - }); + const result = await updateObjectsSpaces(params); - test(`returns error from es client bulk operation`, async () => { - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - - mockGetBulkOperationError.mockReset(); - client.bulk.mockReset(); - mockBulkResults({ error: true }); - - const result = await updateObjectsSpaces(params); - expect(result).toEqual({ - objects: [ - { - error: BULK_ERROR, - id: params.objects[0].id, - spaces: [], - type: params.objects[0].type, - }, - ], - }); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + expect(client.bulk).toHaveBeenCalledTimes(1); + expect(result).toEqual({ + objects: [ + obj1, + { ...obj2, spaces: [...obj2.spaces, otherSpace] }, + { ...obj3, spaces: spacesToAdd }, + { ...obj4, spaces: spacesToAdd }, + ], }); }); - describe('success', () => { - const defaultSpace = 'default'; - const otherSpace = 'space-to-add'; - const obj1 = { type: SHAREABLE_OBJ_TYPE, id: 'id-1' }; - const obj2 = { type: SHAREABLE_OBJ_TYPE, id: 'id-2' }; - const obj3 = { type: SHAREABLE_OBJ_TYPE, id: 'id-3' }; - const obj4 = { type: SHAREABLE_OBJ_TYPE, id: 'id-4' }; + test(`calls authorizeUpdateSpaces with correct parameters`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); - const objects = [obj1, obj2, obj3, obj4]; - const spacesToAdd = [otherSpace]; - const spacesToRemove = [EXISTING_SPACE]; + await updateObjectsSpaces(params); - beforeEach(() => { - mockSecurityExt = savedObjectsExtensionsMock.createSecurityExtension(); - params = setup({ objects, spacesToAdd, spacesToRemove }, mockSecurityExt); - mockMgetResults( - { found: true, namespaces: [ALL_NAMESPACES_STRING, otherSpace] }, // result for obj1 -- will not be changed - { found: true, namespaces: [ALL_NAMESPACES_STRING] }, // result for obj2 -- will be updated to add otherSpace - { found: true, namespaces: [EXISTING_SPACE, otherSpace] }, // result for obj3 -- will be updated to remove EXISTING_SPACE - { found: true, namespaces: [EXISTING_SPACE] } // result for obj4 -- will be updated to remove EXISTING_SPACE and add otherSpace - ); - mockBulkResults({ error: false }, { error: false }, { error: false }); // results for obj2, obj3, and obj4 - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledWith({ + namespace: 'foo-namespace', + spacesToAdd, + spacesToRemove, + objects: [ + { + type: obj1.type, + id: obj1.id, + existingNamespaces: obj1.spaces, + }, + { + type: obj2.type, + id: obj2.id, + existingNamespaces: obj2.spaces, + }, + { + type: obj3.type, + id: obj3.id, + existingNamespaces: obj3.spaces, + }, + { + type: obj4.type, + id: obj4.id, + existingNamespaces: obj4.spaces, + }, + ], }); + }); - test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { - await updateObjectsSpaces(params); - - expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['share_to_space']); - const expectedSpaces = new Set([defaultSpace, otherSpace, EXISTING_SPACE]); - const expectedTypes = new Set([SHAREABLE_OBJ_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set( - SHAREABLE_OBJ_TYPE, - new Set([defaultSpace, otherSpace, EXISTING_SPACE]) - ); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + test(`calls authorizeUpdateSpaces with '*' when spacesToAdd includes '*'`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); + + await updateObjectsSpaces({ ...params, spacesToAdd: ['*'] }); + + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledWith({ + namespace: 'foo-namespace', + spacesToAdd: ['*'], + spacesToRemove, + objects: [ + { + type: obj1.type, + id: obj1.id, + existingNamespaces: obj1.spaces, + }, + { + type: obj2.type, + id: obj2.id, + existingNamespaces: obj2.spaces, + }, + { + type: obj3.type, + id: obj3.id, + existingNamespaces: obj3.spaces, + }, + { + type: obj4.type, + id: obj4.id, + existingNamespaces: obj4.spaces, + }, + ], }); + }); - test(`adds audit event per object when successful`, async () => { - await updateObjectsSpaces(params); - - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); - objects.forEach((obj) => { - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE_OBJECTS_SPACES, - savedObject: { type: obj.type, id: obj.id }, - outcome: 'unknown', - addToSpaces: spacesToAdd, - deleteFromSpaces: spacesToRemove, - error: undefined, - }); - }); + test(`calls authorizeUpdateSpaces with '*' when spacesToRemove includes '*'`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); + + await updateObjectsSpaces({ ...params, spacesToRemove: ['*'] }); + + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledWith({ + namespace: 'foo-namespace', + spacesToAdd, + spacesToRemove: ['*'], + objects: [ + { + type: obj1.type, + id: obj1.id, + existingNamespaces: obj1.spaces, + }, + { + type: obj2.type, + id: obj2.id, + existingNamespaces: obj2.spaces, + }, + { + type: obj3.type, + id: obj3.id, + existingNamespaces: obj3.spaces, + }, + { + type: obj4.type, + id: obj4.id, + existingNamespaces: obj4.spaces, + }, + ], }); }); - describe('all spaces', () => { - const defaultSpace = 'default'; - const otherSpace = 'space-to-add'; - const obj1 = { type: SHAREABLE_OBJ_TYPE, id: 'id-1' }; - const obj2 = { type: SHAREABLE_OBJ_TYPE, id: 'id-2' }; - const obj3 = { type: SHAREABLE_OBJ_TYPE, id: 'id-3' }; - const obj4 = { type: SHAREABLE_OBJ_TYPE, id: 'id-4' }; - const objects = [obj1, obj2, obj3, obj4]; - - const setupForAllSpaces = (spacesToAdd: string[], spacesToRemove: string[]) => { - mockSecurityExt = savedObjectsExtensionsMock.createSecurityExtension(); - params = setup({ objects, spacesToAdd, spacesToRemove }, mockSecurityExt); - mockMgetResults( - { found: true, namespaces: [ALL_NAMESPACES_STRING, otherSpace] }, // result for obj1 -- will not be changed - { found: true, namespaces: [ALL_NAMESPACES_STRING] }, // result for obj2 -- will be updated to add otherSpace - { found: true, namespaces: [EXISTING_SPACE, otherSpace] }, // result for obj3 -- will be updated to remove EXISTING_SPACE - { found: true, namespaces: [EXISTING_SPACE] } // result for obj4 -- will be updated to remove EXISTING_SPACE and add otherSpace - ); - mockBulkResults({ error: false }, { error: false }, { error: false }); // results for obj2, obj3, and obj4 - setupPerformAuthFullyAuthorized(mockSecurityExt); - setupRedactPassthrough(mockSecurityExt); - }; - - test(`calls performAuthorization with '*' when spacesToAdd includes '*'`, async () => { - const spacesToAdd = ['*']; - const spacesToRemove = [otherSpace]; - setupForAllSpaces(spacesToAdd, spacesToRemove); - await updateObjectsSpaces(params); + test(`calls redactNamespaces with authorization map`, async () => { + setupAuthorizeFunc(mockSecurityExt.authorizeUpdateSpaces, 'fully_authorized'); + setupRedactPassthrough(mockSecurityExt); - expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['share_to_space']); - const expectedSpaces = new Set(['*', defaultSpace, otherSpace, EXISTING_SPACE]); - const expectedTypes = new Set([SHAREABLE_OBJ_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set( - SHAREABLE_OBJ_TYPE, - new Set([defaultSpace, otherSpace, ...spacesToAdd]) - ); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); - }); - - test(`calls performAuthorization with '*' when spacesToRemove includes '*'`, async () => { - const spacesToAdd = [otherSpace]; - const spacesToRemove = ['*']; - setupForAllSpaces(spacesToAdd, spacesToRemove); - await updateObjectsSpaces(params); + await updateObjectsSpaces(params); - expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); - const expectedActions = new Set(['share_to_space']); - const expectedSpaces = new Set(['*', defaultSpace, otherSpace, EXISTING_SPACE]); - const expectedTypes = new Set([SHAREABLE_OBJ_TYPE]); - const expectedEnforceMap = new Map>(); - expectedEnforceMap.set( - SHAREABLE_OBJ_TYPE, - new Set([defaultSpace, otherSpace, ...spacesToRemove]) - ); + expect(mockSecurityExt.authorizeUpdateSpaces).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(4); - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); - expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); - expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); + objects.forEach((obj, i) => { + expect(mockSecurityExt.redactNamespaces).toHaveBeenNthCalledWith(i + 1, { + savedObject: { + type: obj.type, + namespaces: [...new Set(obj.spaces.concat(spacesToAdd))].filter( + (element) => !spacesToRemove.includes(element) + ), + }, + typeMap: authMap, + }); }); }); }); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.ts index 5eab945874309..dd6bdc5c3e17d 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/lib/update_objects_spaces.ts @@ -18,23 +18,19 @@ import type { SavedObjectsUpdateObjectsSpacesResponse, SavedObjectsUpdateObjectsSpacesResponseObject, } from '@kbn/core-saved-objects-api-server'; -import { - AuditAction, - type ISavedObjectsSecurityExtension, - type ISavedObjectTypeRegistry, - type SavedObjectsRawDocSource, +import type { + SavedObject, + AuthorizeObjectWithExistingSpaces, + ISavedObjectsSecurityExtension, + ISavedObjectTypeRegistry, + SavedObjectsRawDocSource, } from '@kbn/core-saved-objects-server'; -import { - SavedObjectsErrorHelpers, - ALL_NAMESPACES_STRING, - type DecoratedError, - SavedObjectsUtils, -} from '@kbn/core-saved-objects-utils-server'; +import { ALL_NAMESPACES_STRING } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers, type DecoratedError } from '@kbn/core-saved-objects-server'; import type { IndexMapping, SavedObjectsSerializer, } from '@kbn/core-saved-objects-base-server-internal'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import { getBulkOperationError, getExpectedVersionProperties, @@ -180,50 +176,22 @@ export async function updateObjectsSpaces({ throw SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError(); } - const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); - const addToSpaces = spacesToAdd.length ? spacesToAdd : undefined; - const deleteFromSpaces = spacesToRemove.length ? spacesToRemove : undefined; - const typesAndSpaces = new Map>(); - const spacesToAuthorize = new Set(); - for (const { value } of validObjects) { - const { type, esRequestIndex: index } = value; + const authObjects: AuthorizeObjectWithExistingSpaces[] = validObjects.map((element) => { + const { type, id, esRequestIndex: index } = element.value; const preflightResult = index !== undefined ? bulkGetResponse?.body.docs[index] : undefined; + return { + type, + id, + // @ts-expect-error MultiGetHit._source is optional + existingNamespaces: preflightResult?._source?.namespaces ?? [], + }; + }); - const spacesToEnforce = - typesAndSpaces.get(type) ?? new Set([...spacesToAdd, ...spacesToRemove, namespaceString]); // Always enforce authZ for the active space - typesAndSpaces.set(type, spacesToEnforce); - for (const space of spacesToEnforce) { - spacesToAuthorize.add(space); - } - // @ts-expect-error MultiGetHit._source is optional - for (const space of preflightResult?._source?.namespaces ?? []) { - // Existing namespaces are included so we can later redact if necessary - // If this is a specific space, add it to the spaces we'll check privileges for (don't accidentally check for global privileges) - if (space === ALL_NAMESPACES_STRING) continue; - spacesToAuthorize.add(space); - } - } - - const authorizationResult = await securityExtension?.performAuthorization({ - // If a user tries to share/unshare an object to/from '*', they need to have 'share_to_space' privileges for the Global Resource (e.g., - // All privileges for All Spaces). - actions: new Set(['share_to_space']), - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - enforceMap: typesAndSpaces, - auditCallback: (error) => { - for (const { value } of validObjects) { - securityExtension!.addAuditEvent({ - action: AuditAction.UPDATE_OBJECTS_SPACES, - savedObject: { type: value.type, id: value.id }, - addToSpaces, - deleteFromSpaces, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the update operation has not occurred yet - }); - } - }, - options: { allowGlobalResource: true }, + const authorizationResult = await securityExtension?.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects: authObjects, }); const time = new Date().toISOString(); diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts index fe775dd0cf945..6f7fb8299291e 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/mocks/saved_objects_extensions.mock.ts @@ -20,10 +20,26 @@ const createEncryptionExtension = (): jest.Mocked => ({ - performAuthorization: jest.fn(), - enforceAuthorization: jest.fn(), - addAuditEvent: jest.fn(), + authorizeCreate: jest.fn(), + authorizeBulkCreate: jest.fn(), + authorizeUpdate: jest.fn(), + authorizeBulkUpdate: jest.fn(), + authorizeDelete: jest.fn(), + authorizeBulkDelete: jest.fn(), + authorizeGet: jest.fn(), + authorizeBulkGet: jest.fn(), + authorizeCheckConflicts: jest.fn(), + authorizeRemoveReferences: jest.fn(), + authorizeOpenPointInTime: jest.fn(), + auditClosePointInTime: jest.fn(), + authorizeFind: jest.fn(), + getFindRedactTypeMap: jest.fn(), + authorizeAndRedactMultiNamespaceReferences: jest.fn(), + authorizeAndRedactInternalBulkResolve: jest.fn(), redactNamespaces: jest.fn(), + authorizeUpdateSpaces: jest.fn(), + authorizeDisableLegacyUrlAliases: jest.fn(), + auditObjectsForSpaceDeletion: jest.fn(), }); const createSpacesExtension = (): jest.Mocked => ({ diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/saved_objects_client.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/saved_objects_client.ts index 1771012ebba33..225b58859a0e6 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/saved_objects_client.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/saved_objects_client.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { SavedObject } from '@kbn/core-saved-objects-server'; +import { type SavedObject, SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract, ISavedObjectsRepository, @@ -43,7 +43,6 @@ import type { SavedObjectsBulkDeleteOptions, SavedObjectsBulkDeleteResponse, } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; /** * Core internal implementation of {@link SavedObjectsClientContract} diff --git a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts index 547084a9d3970..bebd9f9340d0d 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-internal/src/test_helpers/repository.test.common.ts @@ -10,18 +10,20 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { schema } from '@kbn/config-schema'; import { loggerMock } from '@kbn/logging-mocks'; import { Payload } from 'elastic-apm-node'; -import { +import type { AuthorizationTypeEntry, + AuthorizeAndRedactMultiNamespaceReferencesParams, CheckAuthorizationResult, ISavedObjectsSecurityExtension, - PerformAuthorizationParams, SavedObjectsMappingProperties, SavedObjectsRawDocSource, SavedObjectsType, SavedObjectsTypeMappingDefinition, + SavedObject, + SavedObjectReference, + AuthorizeFindParams, } from '@kbn/core-saved-objects-server'; -import { SavedObject, SavedObjectReference } from '@kbn/core-saved-objects-server'; -import { +import type { SavedObjectsBaseOptions, SavedObjectsBulkCreateObject, SavedObjectsBulkDeleteObject, @@ -34,8 +36,6 @@ import { SavedObjectsFindOptions, SavedObjectsUpdateOptions, } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; - import { encodeHitVersion, SavedObjectsSerializer, @@ -43,9 +43,15 @@ import { } from '@kbn/core-saved-objects-base-server-internal'; import { elasticsearchClientMock, - ElasticsearchClientMock, + type ElasticsearchClientMock, } from '@kbn/core-elasticsearch-client-server-mocks'; import { DocumentMigrator } from '@kbn/core-saved-objects-migration-server-internal'; +import { + AuthorizeAndRedactInternalBulkResolveParams, + GetFindRedactTypeMapParams, + AuthorizationTypeMap, + SavedObjectsErrorHelpers, +} from '@kbn/core-saved-objects-server'; import { mockGetSearchDsl } from '../lib/repository.test.mock'; import { SavedObjectsRepository } from '../lib/repository'; @@ -236,54 +242,80 @@ export const enforceError = SavedObjectsErrorHelpers.decorateForbiddenError( 'User lacks privileges' ); -export const setupPerformAuthFullyAuthorized = ( +// Note: Only using 'any' here because we don't care about/use the method parameters of the mock +// The only alternative I can see is to use a union of all the parameter interfaces which would +// be lengthy. +export const setupAuthorizeFunc = ( + jestMock: jest.MockInstance>, any>, + status: 'fully_authorized' | 'partially_authorized' | 'unauthorized' +) => { + jestMock.mockImplementation((): Promise> => { + if (status === 'unauthorized') throw enforceError; + return Promise.resolve({ status, typeMap: authMap }); + }); +}; + +export const setupAuthorizeFind = ( + mockSecurityExt: jest.Mocked, + status: 'fully_authorized' | 'partially_authorized' | 'unauthorized' +) => { + mockSecurityExt.authorizeFind.mockImplementation( + (params: AuthorizeFindParams): Promise> => { + return Promise.resolve({ status, typeMap: authMap }); + } + ); +}; + +export const setupGetFindRedactTypeMap = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.performAuthorization.mockImplementation( - (params: PerformAuthorizationParams): Promise> => { - const { auditCallback } = params; - auditCallback?.(undefined); - return Promise.resolve({ status: 'fully_authorized', typeMap: authMap }); + mockSecurityExt.getFindRedactTypeMap.mockImplementation( + (params: GetFindRedactTypeMapParams): Promise> => { + return Promise.resolve(authMap); } ); }; -export const setupPerformAuthPartiallyAuthorized = ( +export const setupAuthorizeAndRedactInternalBulkResolveFailure = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.performAuthorization.mockImplementation( - (params: PerformAuthorizationParams): Promise> => { - const { auditCallback } = params; - auditCallback?.(undefined); - return Promise.resolve({ status: 'partially_authorized', typeMap: authMap }); + mockSecurityExt.authorizeAndRedactInternalBulkResolve.mockImplementation( + (params: AuthorizeAndRedactInternalBulkResolveParams) => { + throw enforceError; } ); }; -export const setupPerformAuthUnauthorized = ( +export const setupAuthorizeAndRedactInternalBulkResolveSuccess = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.performAuthorization.mockImplementation( - (params: PerformAuthorizationParams): Promise> => { - const { auditCallback } = params; - auditCallback?.(undefined); - return Promise.resolve({ status: 'unauthorized', typeMap: new Map([]) }); + mockSecurityExt.authorizeAndRedactInternalBulkResolve.mockImplementation( + (params: AuthorizeAndRedactInternalBulkResolveParams) => { + return Promise.resolve(params.objects); } ); }; -export const setupPerformAuthEnforceFailure = ( +export const setupAuthorizeAndRedactMultiNamespaceReferenencesFailure = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.performAuthorization.mockImplementation( - (params: PerformAuthorizationParams) => { - const { auditCallback } = params; - auditCallback?.(enforceError); + mockSecurityExt.authorizeAndRedactMultiNamespaceReferences.mockImplementation( + (params: AuthorizeAndRedactMultiNamespaceReferencesParams) => { throw enforceError; } ); }; +export const setupAuthorizeAndRedactMultiNamespaceReferenencesSuccess = ( + mockSecurityExt: jest.Mocked +) => { + mockSecurityExt.authorizeAndRedactMultiNamespaceReferences.mockImplementation( + (params: AuthorizeAndRedactMultiNamespaceReferencesParams) => { + return Promise.resolve(params.objects); + } + ); +}; + export const setupRedactPassthrough = ( mockSecurityExt: jest.Mocked ) => { diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_client.mock.ts b/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_client.mock.ts index 523e5003e650f..97480d55c2f27 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_client.mock.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_client.mock.ts @@ -7,7 +7,7 @@ */ import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { savedObjectsPointInTimeFinderMock } from './point_in_time_finder.mock'; const create = () => { diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts b/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts index fe775dd0cf945..6f7fb8299291e 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/src/saved_objects_extensions.mock.ts @@ -20,10 +20,26 @@ const createEncryptionExtension = (): jest.Mocked => ({ - performAuthorization: jest.fn(), - enforceAuthorization: jest.fn(), - addAuditEvent: jest.fn(), + authorizeCreate: jest.fn(), + authorizeBulkCreate: jest.fn(), + authorizeUpdate: jest.fn(), + authorizeBulkUpdate: jest.fn(), + authorizeDelete: jest.fn(), + authorizeBulkDelete: jest.fn(), + authorizeGet: jest.fn(), + authorizeBulkGet: jest.fn(), + authorizeCheckConflicts: jest.fn(), + authorizeRemoveReferences: jest.fn(), + authorizeOpenPointInTime: jest.fn(), + auditClosePointInTime: jest.fn(), + authorizeFind: jest.fn(), + getFindRedactTypeMap: jest.fn(), + authorizeAndRedactMultiNamespaceReferences: jest.fn(), + authorizeAndRedactInternalBulkResolve: jest.fn(), redactNamespaces: jest.fn(), + authorizeUpdateSpaces: jest.fn(), + authorizeDisableLegacyUrlAliases: jest.fn(), + auditObjectsForSpaceDeletion: jest.fn(), }); const createSpacesExtension = (): jest.Mocked => ({ diff --git a/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json b/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json index 96548fe6eaacd..ee4feb4555a53 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-api-server-mocks/tsconfig.json @@ -13,7 +13,6 @@ "kbn_references": [ "@kbn/core-saved-objects-api-server", "@kbn/core-saved-objects-api-server-internal", - "@kbn/core-saved-objects-utils-server", "@kbn/logging-mocks", "@kbn/core-saved-objects-server", ], diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/version/decode_version.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/version/decode_version.ts index dd4bdcdc8186f..744d579342af7 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/version/decode_version.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/version/decode_version.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { decodeBase64 } from './base64'; /** diff --git a/packages/core/saved-objects/core-saved-objects-browser-internal/src/saved_objects_client.ts b/packages/core/saved-objects/core-saved-objects-browser-internal/src/saved_objects_client.ts index d7f9b8a8b4d0b..ccef134c59567 100644 --- a/packages/core/saved-objects/core-saved-objects-browser-internal/src/saved_objects_client.ts +++ b/packages/core/saved-objects/core-saved-objects-browser-internal/src/saved_objects_client.ts @@ -32,7 +32,6 @@ import type { SimpleSavedObject, SavedObjectsBulkDeleteResponse, } from '@kbn/core-saved-objects-api-browser'; - import { SimpleSavedObjectImpl } from './simple_saved_object'; type PromiseType> = T extends Promise ? U : never; diff --git a/packages/core/saved-objects/core-saved-objects-common/index.ts b/packages/core/saved-objects/core-saved-objects-common/index.ts index 3efefa77d52b3..94754d6822005 100644 --- a/packages/core/saved-objects/core-saved-objects-common/index.ts +++ b/packages/core/saved-objects/core-saved-objects-common/index.ts @@ -32,4 +32,4 @@ export type { SavedObjectsImportConflictError, } from './src/saved_objects_imports'; -export type { SavedObjectTypeIdTuple } from './src/types'; +export type { SavedObjectTypeIdTuple, LegacyUrlAliasTarget } from './src/types'; diff --git a/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts b/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts index 8b0ae5c819952..496611aed989e 100644 --- a/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts +++ b/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts @@ -58,6 +58,11 @@ export interface SavedObjectReference { id: string; } +/** + * Definition of the Saved Object interface + * + * @public + */ export interface SavedObject { /** The ID of this Saved Object, guaranteed to be unique for all objects of the same `type` */ id: string; diff --git a/packages/core/saved-objects/core-saved-objects-common/src/types.ts b/packages/core/saved-objects/core-saved-objects-common/src/types.ts index 102de1a4cfbb6..a2658713dbc60 100644 --- a/packages/core/saved-objects/core-saved-objects-common/src/types.ts +++ b/packages/core/saved-objects/core-saved-objects-common/src/types.ts @@ -17,3 +17,22 @@ export interface SavedObjectTypeIdTuple { /** The type of the saved object */ type: string; } + +// NOTE: moved from x-pack/plugins/spaces/common/types.ts for use by SO security ext +/** + * Client interface for interacting with legacy URL aliases. + */ +export interface LegacyUrlAliasTarget { + /** + * The namespace that the object existed in when it was converted. + */ + targetSpace: string; + /** + * The type of the object when it was converted. + */ + targetType: string; + /** + * The original ID of the object, before it was converted. + */ + sourceId: string; +} diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.test.ts index e440b1baffafc..a1f35678ecbdb 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.test.ts @@ -8,10 +8,10 @@ import { httpServerMock } from '@kbn/core-http-server-mocks'; import type { SavedObjectError } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsExportTransform, SavedObjectsExportablePredicate, + SavedObject, } from '@kbn/core-saved-objects-server'; import { applyExportTransformsMock } from './collect_exported_objects.test.mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.ts index dddefe8ad73f7..49fc95beb0cc6 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/collect_exported_objects.ts @@ -8,12 +8,12 @@ import type { Logger } from '@kbn/logging'; import type { KibanaRequest } from '@kbn/core-http-server'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import type { SavedObjectsExportablePredicate, ISavedObjectTypeRegistry, SavedObjectsExportTransform, + SavedObject, } from '@kbn/core-saved-objects-server'; import { applyExportTransforms } from './apply_export_transforms'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/saved_objects_exporter.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/saved_objects_exporter.ts index 0f7705396f256..f5f735e3b6c5d 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/saved_objects_exporter.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/export/saved_objects_exporter.ts @@ -9,7 +9,6 @@ import type { Readable } from 'stream'; import { createListStream } from '@kbn/utils'; import type { Logger } from '@kbn/logging'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract, SavedObjectsFindResult, @@ -21,6 +20,7 @@ import type { SavedObjectExportBaseOptions, SavedObjectsExportByObjectOptions, SavedObjectsExportByTypeOptions, + SavedObject, } from '@kbn/core-saved-objects-server'; import { sortObjects } from './sort_objects'; import { SavedObjectsExportError } from './errors'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/import_saved_objects.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/import_saved_objects.test.ts index a88e0864f532c..66a010b548a4a 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/import_saved_objects.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/import_saved_objects.test.ts @@ -23,12 +23,12 @@ import type { SavedObjectsImportFailure, SavedObjectsImportWarning, } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import type { SavedObjectsType, ISavedObjectTypeRegistry, SavedObjectsImportHook, + SavedObject, } from '@kbn/core-saved-objects-server'; import { typeRegistryMock } from '@kbn/core-saved-objects-base-server-mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/check_conflicts.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/check_conflicts.test.ts index 13faae72ea25a..0edcb613d4895 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/check_conflicts.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/check_conflicts.test.ts @@ -8,9 +8,12 @@ import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import type { SavedObjectsImportRetry } from '@kbn/core-saved-objects-common'; -import type { SavedObject, SavedObjectReference } from '@kbn/core-saved-objects-server'; +import { + type SavedObject, + type SavedObjectReference, + SavedObjectsErrorHelpers, +} from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; import { checkConflicts } from './check_conflicts'; jest.mock('uuid', () => ({ diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/collect_saved_objects.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/collect_saved_objects.ts index 4120aff3ef215..451c74f88d1c2 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/collect_saved_objects.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/collect_saved_objects.ts @@ -13,7 +13,6 @@ import { createMapStream, createPromiseFromStreams, } from '@kbn/utils'; - import type { SavedObjectsImportFailure } from '@kbn/core-saved-objects-common'; import type { SavedObject } from '@kbn/core-saved-objects-server'; import { SavedObjectsImportError } from '../errors'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.test.ts index 9e332f1da896e..7930359433bb3 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.test.ts @@ -8,9 +8,8 @@ import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import type { SavedObjectsImportFailure } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; +import { type SavedObject, SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; import { createSavedObjects } from './create_saved_objects'; import { extractErrors } from './extract_errors'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.ts index 6276902e7b3a2..6b77c6e2ba2f0 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/create_saved_objects.ts @@ -7,9 +7,8 @@ */ import type { SavedObjectsImportFailure } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import type { CreatedObject } from '@kbn/core-saved-objects-server'; +import type { CreatedObject, SavedObject } from '@kbn/core-saved-objects-server'; import { extractErrors } from './extract_errors'; import type { ImportStateMap } from './types'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.test.ts index d677205526113..0f5b969d0b7b1 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.test.ts @@ -7,8 +7,7 @@ */ import type { SavedObjectsImportWarning } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; -import type { SavedObjectsImportHookResult } from '@kbn/core-saved-objects-server'; +import type { SavedObject, SavedObjectsImportHookResult } from '@kbn/core-saved-objects-server'; import { executeImportHooks } from './execute_import_hooks'; const createObject = (type: string, id: string): SavedObject => ({ diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.ts index c2ae2ead97ee5..670b13286b604 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/execute_import_hooks.ts @@ -7,8 +7,7 @@ */ import type { SavedObjectsImportWarning } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; -import type { SavedObjectsImportHook } from '@kbn/core-saved-objects-server'; +import type { SavedObject, SavedObjectsImportHook } from '@kbn/core-saved-objects-server'; export interface ExecuteImportHooksOptions { objects: SavedObject[]; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.test.ts index 4ce5ac5d82d85..7cf8fc9b181f6 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.test.ts @@ -6,8 +6,11 @@ * Side Public License, v 1. */ -import type { SavedObject, CreatedObject } from '@kbn/core-saved-objects-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { + type SavedObject, + type CreatedObject, + SavedObjectsErrorHelpers, +} from '@kbn/core-saved-objects-server'; import { extractErrors } from './extract_errors'; describe('extractErrors()', () => { diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.ts index a5124f269daa6..3f2a600700de3 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/extract_errors.ts @@ -7,8 +7,7 @@ */ import type { SavedObjectsImportFailure } from '@kbn/core-saved-objects-common'; -import type { SavedObject } from '@kbn/core-saved-objects-server'; -import type { CreatedObject } from '@kbn/core-saved-objects-server'; +import type { CreatedObject, SavedObject } from '@kbn/core-saved-objects-server'; export function extractErrors( // TODO: define saved object type diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.test.ts index c0f0e510e1bb0..7b0313198a3d1 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.test.ts @@ -8,6 +8,7 @@ import type { SavedObjectsImportRetry } from '@kbn/core-saved-objects-common'; import type { SavedObject } from '@kbn/core-saved-objects-server'; + import { getImportStateMapForRetries } from './get_import_state_map_for_retries'; describe('#getImportStateMapForRetries', () => { diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.ts index 65d30b040b2b3..8be358e9189c5 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/get_import_state_map_for_retries.ts @@ -8,6 +8,7 @@ import type { SavedObjectsImportRetry } from '@kbn/core-saved-objects-common'; import type { SavedObject } from '@kbn/core-saved-objects-server'; + import type { ImportStateMap } from './types'; interface GetImportStateMapForRetriesParams { diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/validate_references.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/validate_references.test.ts index ceced695b2870..d46382a09b766 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/validate_references.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/lib/validate_references.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { ValidateReferencesParams } from './validate_references'; import { validateReferences } from './validate_references'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.test.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.test.ts index e1cafa319eaf9..70d976f335e04 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.test.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.test.ts @@ -28,12 +28,13 @@ import type { SavedObjectsImportRetry, SavedObjectsImportWarning, } from '@kbn/core-saved-objects-common'; -import type { SavedObject, SavedObjectReference } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import type { SavedObjectsType, ISavedObjectTypeRegistry, SavedObjectsImportHook, + SavedObject, + SavedObjectReference, } from '@kbn/core-saved-objects-server'; import { typeRegistryMock } from '@kbn/core-saved-objects-base-server-mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.ts b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.ts index d6876492d11f3..7ffa0efd31b8b 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.ts +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/resolve_import_errors.ts @@ -13,11 +13,11 @@ import type { SavedObjectsImportResponse, SavedObjectsImportSuccess, } from '@kbn/core-saved-objects-common'; -import { SavedObject } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import type { ISavedObjectTypeRegistry, SavedObjectsImportHook, + SavedObject, } from '@kbn/core-saved-objects-server'; import { collectSavedObjects, diff --git a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json index 0cd74a160792a..4343a769ef99c 100644 --- a/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-import-export-server-internal/tsconfig.json @@ -23,7 +23,6 @@ "@kbn/logging-mocks", "@kbn/core-saved-objects-base-server-mocks", "@kbn/core-http-router-server-internal", - "@kbn/core-saved-objects-utils-server", ], "exclude": [ "target/**/*", diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/utils.ts b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/utils.ts index 1faaba0f5b710..3d86f9247c2d5 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/utils.ts +++ b/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/utils.ts @@ -17,12 +17,12 @@ import { } from '@kbn/utils'; import Boom from '@hapi/boom'; import type { RequestHandlerWrapper } from '@kbn/core-http-server'; -import type { +import { SavedObject, ISavedObjectTypeRegistry, SavedObjectsExportResultDetails, + SavedObjectsErrorHelpers, } from '@kbn/core-saved-objects-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; export async function createSavedObjectsStreamFromNdJson(ndJsonStream: Readable) { const savedObjects = await createPromiseFromStreams([ diff --git a/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json b/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json index 6d9f8874ebdb4..cfe782040bf6d 100644 --- a/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-server-internal/tsconfig.json @@ -45,7 +45,6 @@ "@kbn/core-elasticsearch-server-mocks", "@kbn/utils", "@kbn/core-http-router-server-internal", - "@kbn/core-saved-objects-utils-server", ], "exclude": [ "target/**/*", diff --git a/packages/core/saved-objects/core-saved-objects-server/index.ts b/packages/core/saved-objects/core-saved-objects-server/index.ts index 2e6d3837cfac6..e3a56f4ce0529 100644 --- a/packages/core/saved-objects/core-saved-objects-server/index.ts +++ b/packages/core/saved-objects/core-saved-objects-server/index.ts @@ -71,17 +71,31 @@ export type { EncryptedObjectDescriptor, } from './src/extensions/encryption'; export type { - CheckAuthorizationParams, - PerformAuthorizationParams, AuthorizationTypeEntry, AuthorizationTypeMap, CheckAuthorizationResult, - EnforceAuthorizationParams, - AddAuditEventParams, RedactNamespacesParams, ISavedObjectsSecurityExtension, + AuthorizeCreateObject, + AuthorizeUpdateObject, + AuthorizeBulkGetObject, + AuthorizeCreateParams, + AuthorizeUpdateParams, + AuthorizeAndRedactMultiNamespaceReferencesParams, + AuthorizeAndRedactInternalBulkResolveParams, + AuthorizeGetParams, + AuthorizeBulkGetParams, + AuthorizeObjectWithExistingSpaces, + AuthorizeBulkCreateParams, + AuthorizeBulkDeleteParams, + AuthorizeBulkUpdateParams, + AuthorizeCheckConflictsParams, + AuthorizeDeleteParams, + GetFindRedactTypeMapParams, + AuthorizeOpenPointInTimeParams, + AuthorizeUpdateSpacesParams, + AuthorizeFindParams, } from './src/extensions/security'; -export { AuditAction } from './src/extensions/security'; export type { ISavedObjectsSpacesExtension } from './src/extensions/spaces'; export type { SavedObjectsExtensions } from './src/extensions/extensions'; export { @@ -89,6 +103,12 @@ export { SECURITY_EXTENSION_ID, SPACES_EXTENSION_ID, } from './src/extensions/extensions'; +export { + SavedObjectsErrorHelpers, + type DecoratedError, + type BulkResolveError, +} from './src/saved_objects_error_helpers'; + export type { SavedObjectsModelVersion, SavedObjectsModelVersionMap, diff --git a/packages/core/saved-objects/core-saved-objects-server/src/extensions/extensions.ts b/packages/core/saved-objects/core-saved-objects-server/src/extensions/extensions.ts index f94af85d4ae26..143bdf33026c3 100644 --- a/packages/core/saved-objects/core-saved-objects-server/src/extensions/extensions.ts +++ b/packages/core/saved-objects/core-saved-objects-server/src/extensions/extensions.ts @@ -17,8 +17,11 @@ import type { ISavedObjectsSpacesExtension } from './spaces'; * security, and spaces features. */ export interface SavedObjectsExtensions { + /** The encryption extension - handles encrypting and decrypting attributes of saved objects */ encryptionExtension?: ISavedObjectsEncryptionExtension; + /** The security extension - handles action authorization, audit logging, and space redaction */ securityExtension?: ISavedObjectsSecurityExtension; + /** The spaces extension - handles retrieving the current space and retrieving available spaces */ spacesExtension?: ISavedObjectsSpacesExtension; } diff --git a/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts b/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts index 1805e79b74340..68637be38b6f2 100644 --- a/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts +++ b/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts @@ -6,70 +6,13 @@ * Side Public License, v 1. */ -import type { SavedObject } from '@kbn/core-saved-objects-common'; -import type { EcsEvent } from '@kbn/ecs'; - -/** - * The PerformAuthorizationParams interface contains settings for checking - * & enforcing authorization via the ISavedObjectsSecurityExtension. - */ -export interface PerformAuthorizationParams
{ - /** - * A set of actions to check. - */ - actions: Set; - /** - * A set of types to check. - */ - types: Set; - /** - * A set of spaces to check (types to check comes from the typesAndSpaces map). - */ - spaces: Set; - /** - * A map of types (key) to spaces (value) that will be affected by the action(s). - * If undefined, enforce with be bypassed. - */ - enforceMap?: Map>; - /** - * A callback intended to handle adding audit events in - * both error (unauthorized), or success (authorized) - * cases - */ - auditCallback?: (error?: Error) => void; - /** - * Authorization options - * allowGlobalResource - whether or not to allow global resources, false if options are undefined - */ - options?: { - allowGlobalResource: boolean; - }; -} - -/** - * The CheckAuthorizationParams interface contains settings for checking - * authorization via the ISavedObjectsSecurityExtension. - */ -export interface CheckAuthorizationParams { - /** - * A set of types to check. - */ - types: Set; - /** - * A set of spaces to check. - */ - spaces: Set; - /** - * An set of actions to check. - */ - actions: Set; - /** - * Authorization options - whether or not to allow global resources, false if options are undefined - */ - options?: { - allowGlobalResource: boolean; - }; -} +import { + SavedObjectReferenceWithContext, + SavedObjectsFindResult, + SavedObjectsResolveResponse, +} from '@kbn/core-saved-objects-api-server'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; +import { SavedObject, BulkResolveError } from '../..'; /** * The AuthorizationTypeEntry interface contains space-related details @@ -112,84 +55,254 @@ export interface CheckAuthorizationResult { } /** - * The EnforceAuthorizationParams interface contains settings for - * enforcing a single action via the ISavedObjectsSecurityExtension. + * The AuthorizeObject interface contains information to specify an + * object for authorization. This is a base interface which is + * extended by other interfaces for specific actions. */ -export interface EnforceAuthorizationParams { - /** - * A map of types to spaces that will be affected by the action - */ - typesAndSpaces: Map>; +export interface AuthorizeObject { + /** The type of object */ + type: string; + /** The id of the object */ + id: string; +} + +/** + * The AuthorizeObjectWithExistingSpaces extends AuthorizeObject and contains + * an array of existing namespaces for the object. Used by the + * authorizeDelete, authorizeBulkDelete, authorizeGet, + * authorizeCheckConflicts, and getFindRedactTypeMap methods. + */ +export interface AuthorizeObjectWithExistingSpaces extends AuthorizeObject { /** - * The relevant action (create, update, etc.) + * Spaces where the object is known to exist. Usually populated + * by document data from the result of an es query. */ - action: A; + existingNamespaces: string[]; +} + +/** + * The AuthorizeBulkGetObject interface extends AuthorizeObjectWithExistingSpaces + * and contains a object namespaces override. Used by the + * authorizeBulkGet method. + */ +export interface AuthorizeBulkGetObject extends AuthorizeObjectWithExistingSpaces { /** - * The authorization map from CheckAuthorizationResult: a - * map of type to record of action/AuthorizationTypeEntry - * (spaces/globallyAuthz'd) + * The namespaces to include when retrieving this object. Populated by options + * passed to the repository's update or bulkUpdate method. */ - typeMap: AuthorizationTypeMap; + objectNamespaces?: string[]; /** - * A callback intended to handle adding audit events in - * both error (unauthorized), or success (authorized) - * cases + * Whether or not an error occurred when getting this object. Populated by + * the result of a query. Default is false. */ - auditCallback?: (error?: Error) => void; + error?: boolean; } /** - * The AuditAction enumeration contains values for all - * valid audit actions for use in AddAuditEventParams. + * The AuthorizeParams interface is a base interface for parameters to several + * public authorize methods within the ISavedObjectsSecurityExtension. */ -export enum AuditAction { - CREATE = 'saved_object_create', - GET = 'saved_object_get', - RESOLVE = 'saved_object_resolve', - UPDATE = 'saved_object_update', - DELETE = 'saved_object_delete', - FIND = 'saved_object_find', - REMOVE_REFERENCES = 'saved_object_remove_references', - OPEN_POINT_IN_TIME = 'saved_object_open_point_in_time', - CLOSE_POINT_IN_TIME = 'saved_object_close_point_in_time', - COLLECT_MULTINAMESPACE_REFERENCES = 'saved_object_collect_multinamespace_references', // this is separate from 'saved_object_get' because the user is only accessing an object's metadata - UPDATE_OBJECTS_SPACES = 'saved_object_update_objects_spaces', // this is separate from 'saved_object_update' because the user is only updating an object's metadata +export interface AuthorizeParams { + /** + * The namespace in which to perform the authorization operation. + * If undefined, the current space will be used unless spaces are disabled, + * in which case the default space will be used. + */ + namespace: string | undefined; } /** - * The AddAuditEventParams interface contains settings for adding - * audit events via the ISavedObjectsSecurityExtension. + * The AuthorizeCreateObject interface extends AuthorizeObjectWithExistingSpaces + * and contains an array of initial namespaces for the object. Used by + * the authorizeCreate and authorizeBulkCreate methods. */ -export interface AddAuditEventParams { +export interface AuthorizeCreateObject extends AuthorizeObjectWithExistingSpaces { /** - * The relevant action + * Initial spaces to include the created object. Populated by options + * passed to the repository's bulkCreate method. */ - action: AuditAction; + initialNamespaces?: string[]; +} + +/** + * The AuthorizeUpdateObject interface extends AuthorizeObjectWithExistingSpaces + * and contains a object namespace override. Used by the authorizeUpdate + * and authorizeBulkUpdate methods. + */ +export interface AuthorizeUpdateObject extends AuthorizeObjectWithExistingSpaces { /** - * The outcome of the operation - * 'failure' | 'success' | 'unknown' + * The namespace in which to update this object. Populated by options + * passed to the repository's update or bulkUpdate method. */ - outcome?: EcsEvent['outcome']; + objectNamespace?: string; +} + +/** + * The MultiNamespaceReferencesOptions interface contains options + * specific for authorizing CollectMultiNamespaceReferences actions. + */ +export interface MultiNamespaceReferencesOptions { /** - * relevant saved object information - * object containing type & id strings + * The purpose of the call to 'collectMultiNamespaceReferences'. + * Default is 'collectMultiNamespaceReferences'. */ - savedObject?: { type: string; id: string }; + purpose?: 'collectMultiNamespaceReferences' | 'updateObjectsSpaces'; +} + +/** + * The AuthorizeCreateParams interface extends AuthorizeParams and is + * used for the AuthorizeCreate method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeCreateParams extends AuthorizeParams { + /** The object to authorize */ + object: AuthorizeCreateObject; +} + +/** + * The AuthorizeBulkCreateParams interface extends AuthorizeParams and is + * used for the AuthorizeBulkCreate method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeBulkCreateParams extends AuthorizeParams { + /** The objects to authorize */ + objects: AuthorizeCreateObject[]; +} + +/** + * The AuthorizeUpdateParams interface extends AuthorizeParams and is + * used for the AuthorizeUpdate method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeUpdateParams extends AuthorizeParams { + /** The object to authorize */ + object: AuthorizeUpdateObject; +} + +/** + * The AuthorizeBulkUpdateParams interface extends AuthorizeParams and is + * used for the AuthorizeBulkUpdate method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeBulkUpdateParams extends AuthorizeParams { + /** The objects to authorize */ + objects: AuthorizeUpdateObject[]; +} + +/** + * The AuthorizeDeleteParams interface extends AuthorizeParams and is + * used for the AuthorizeDelete method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeDeleteParams extends AuthorizeParams { + /** The object to authorize */ + object: AuthorizeObject; +} + +/** + * The AuthorizeBulkDeleteParams interface extends AuthorizeParams and is + * used for the AuthorizeBulkDelete method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeBulkDeleteParams extends AuthorizeParams { + /** The objects to authorize */ + objects: AuthorizeObjectWithExistingSpaces[]; +} + +/** + * The AuthorizeGetParams interface extends AuthorizeParams and is + * used for the AuthorizeGet method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeGetParams extends AuthorizeParams { + /** The object to authorize */ + object: AuthorizeObjectWithExistingSpaces; + /** Whether or not the object was not found, defaults to false */ + objectNotFound?: boolean; +} + +/** + * The AuthorizeBulkGetParams interface extends AuthorizeParams and is + * used for the AuthorizeBulkGet method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeBulkGetParams extends AuthorizeParams { + /** The objects to authorize */ + objects: AuthorizeBulkGetObject[]; +} + +/** + * The AuthorizeCheckConflictsParams interface extends AuthorizeParams and is + * used for the AuthorizeCheckConflicts method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeCheckConflictsParams extends AuthorizeParams { + /** The objects to authorize */ + objects: AuthorizeObject[]; +} + +/** + * The AuthorizeFindParams interface is used for the AuthorizeFind method + * of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeFindParams { + /** The namespaces in which to find objects */ + namespaces: Set; + /** The types of objects to find */ + types: Set; +} + +/** + * The AuthorizeOpenPointInTimeParams interface is used for the + * AuthorizeOpenPointInTime method of the ISavedObjectsSecurityExtension. + * It is identical to AuthorizeFindParams. + */ +export type AuthorizeOpenPointInTimeParams = AuthorizeFindParams; + +/** + * The AuthorizeAndRedactMultiNamespaceReferencesParams interface extends + * AuthorizeParams and is used for the AuthorizeAndRedactMultiNamespaceReferences + * method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeAndRedactMultiNamespaceReferencesParams extends AuthorizeParams { + /** The objects to authorize */ + objects: SavedObjectReferenceWithContext[]; /** - * Array of spaces being added. For - * UPDATE_OBJECTS_SPACES action only + * options for the operation + * - purpose: 'collectMultiNamespaceReferences' or 'updateObjectsSpaces' + * default purpose is 'collectMultiNamespaceReferences'. */ - addToSpaces?: readonly string[]; + options?: MultiNamespaceReferencesOptions; +} + +/** + * The AuthorizeAndRedactInternalBulkResolveParams interface extends + * AuthorizeParams and is used for the AuthorizeAndRedactInternalBulkResolve + * method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeAndRedactInternalBulkResolveParams extends AuthorizeParams { /** - * Array of spaces being removed. For - * UPDATE_OBJECTS_SPACES action only + * The objects to authorize */ - deleteFromSpaces?: readonly string[]; + objects: Array | BulkResolveError>; +} + +/** + * The GetFindRedactTypeMapParams interface is used for the GetFindRedactTypeMap + * method of the ISavedObjectsSecurityExtension. + */ +export interface GetFindRedactTypeMapParams { + /** The namespaces previously checked by the AuthorizeFind method */ + previouslyCheckedNamespaces: Set; /** - * relevant error information to add to - * the audit event + * The objects to authorize in order to generate the type map + * this should be populated by the result of the es query */ - error?: Error; + objects: AuthorizeObjectWithExistingSpaces[]; +} + +/** + * The AuthorizeUpdateSpacesParams interface extends AuthorizeParams and is + * used for the AuthorizeUpdateSpaces method of the ISavedObjectsSecurityExtension. + */ +export interface AuthorizeUpdateSpacesParams extends AuthorizeParams { + /** The spaces in which to add the objects */ + spacesToAdd: string[]; + /** The spaces from which to remove the objects */ + spacesToRemove: string[]; + /** The objects to authorize */ + objects: AuthorizeObjectWithExistingSpaces[]; } /** @@ -197,9 +310,7 @@ export interface AddAuditEventParams { * namespace access via the ISavedObjectsSecurityExtension. */ export interface RedactNamespacesParams { - /** - * relevant saved object - */ + /** Relevant saved object */ savedObject: SavedObject; /** * The authorization map from CheckAuthorizationResult: a map of @@ -215,26 +326,164 @@ export interface RedactNamespacesParams { */ export interface ISavedObjectsSecurityExtension { /** - * Performs authorization (check & enforce) of actions on specified types in specified spaces. - * @param params - actions, types & spaces map, audit callback, options (enforce bypassed if enforce map is undefined) + * Performs authorization for the CREATE security action + * @param params the namespace and object to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeCreate: ( + params: AuthorizeCreateParams + ) => Promise>; + + /** + * Performs authorization for the BULK_CREATE security action + * @param params the namespace and objects to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeBulkCreate: ( + params: AuthorizeBulkCreateParams + ) => Promise>; + + /** + * Performs authorization for the UPDATE security action + * @param params the namespace and object to authorize * @returns CheckAuthorizationResult - the resulting authorization level and authorization map */ - performAuthorization: ( - params: PerformAuthorizationParams - ) => Promise>; + authorizeUpdate: ( + params: AuthorizeUpdateParams + ) => Promise>; /** - * Enforces authorization of a single action on specified types in specified spaces. - * Throws error if authorization map does not cover specified parameters. - * @param params - map of types/spaces, action to check, and authz map (from CheckAuthorizationResult) + * Performs authorization for the BULK_UPDATE security action + * @param params the namespace and objects to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map */ - enforceAuthorization: (params: EnforceAuthorizationParams) => void; + authorizeBulkUpdate: ( + params: AuthorizeBulkUpdateParams + ) => Promise>; /** - * Adds an audit event for the specified action with relevant information - * @param params - the action, outcome, error, and relevant object/space information + * Performs authorization for the DELETE security action + * @param params the namespace and object to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map */ - addAuditEvent: (params: AddAuditEventParams) => void; + authorizeDelete: ( + params: AuthorizeDeleteParams + ) => Promise>; + + /** + * Performs authorization for the BULK_DELETE security action + * @param params the namespace and objects to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeBulkDelete: ( + params: AuthorizeBulkDeleteParams + ) => Promise>; + + /** + * Performs authorization for the GET security action + * @param params the namespace, object to authorize, and whether or not the object was found + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeGet: ( + params: AuthorizeGetParams + ) => Promise>; + + /** + * Performs authorization for the BULK_GET security action + * @param params the namespace and objects to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeBulkGet: ( + params: AuthorizeBulkGetParams + ) => Promise>; + + /** + * Performs authorization for the CHECK_CONFLICTS security action + * @param params the namespace and objects to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeCheckConflicts: ( + params: AuthorizeCheckConflictsParams + ) => Promise>; + + /** + * Performs authorization for the REMOVE_REFERENCES security action + * @param params the namespace and object to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeRemoveReferences: ( + params: AuthorizeDeleteParams + ) => Promise>; + + /** + * Performs authorization for the OPEN_POINT_IN_TIME security action + * @param params the namespaces and types to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeOpenPointInTime: ( + params: AuthorizeOpenPointInTimeParams + ) => Promise>; + + /** + * Performs audit logging for the CLOSE_POINT_IN_TIME security action + */ + auditClosePointInTime: () => void; + + /** + * Handles all security operations for the COLLECT_MULTINAMESPACE_REFERENCES security action + * Checks/enforces authorization, writes audit events, filters the object graph, and redacts spaces from the share_to_space/bulk_get + * response. In other SavedObjectsRepository functions we do this before decrypting attributes. However, because of the + * share_to_space/bulk_get response logic involved in deciding between the exact match or alias match, it's cleaner to do authorization, + * auditing, filtering, and redaction all afterwards. + * @param params - the namespace, objects to authorize, and purpose of the operation + * @returns SavedObjectReferenceWithContext[] - array of collected references + */ + authorizeAndRedactMultiNamespaceReferences: ( + params: AuthorizeAndRedactMultiNamespaceReferencesParams + ) => Promise; + + /** + * Handles all security operations for the INTERNAL_BULK_RESOLVE security action + * Checks authorization, writes audit events, and redacts namespaces from the bulkResolve response. In other SavedObjectsRepository + * functions we do this before decrypting attributes. However, because of the bulkResolve logic involved in deciding between the exact match + * or alias match, it's cleaner to do authorization, auditing, and redaction all afterwards. + * @param params - the namespace and objects to authorize + * @returns Array of SavedObjectsResolveResponses or BulkResolveErrors - the redacted resolve responses or errors + */ + authorizeAndRedactInternalBulkResolve: ( + params: AuthorizeAndRedactInternalBulkResolveParams + ) => Promise | BulkResolveError>>; + + /** + * Performs authorization for the UPDATE_OBJECTS_SPACES security action + * @param params - namespace, spacesToAdd, spacesToRemove, and objects to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeUpdateSpaces: ( + params: AuthorizeUpdateSpacesParams + ) => Promise>; + + /** + * Performs authorization for the FIND security action + * This method is the first of two security steps for the find operation (saved objects repository's find method) + * This method should be called first in order to provide data needed to construct the type-to-namespace map for the search DSL + * @param params - namespaces and types to authorize + * @returns CheckAuthorizationResult - the resulting authorization level and authorization map + */ + authorizeFind: ( + params: AuthorizeFindParams + ) => Promise>; + + /** + * Gets an updated type map for redacting results of the FIND security action + * This method is the second of two security steps for the find operation (saved objects repository's find method) + * This method should be called last in order to update the type map used to redact namespaces in the results + * @param params - namespace, spacesToAdd, spacesToRemove, and objects to authorize + * @returns - the updated type map used for redaction + */ + getFindRedactTypeMap: ( + params: GetFindRedactTypeMapParams + ) => Promise | undefined>; /** * Filters a saved object's spaces based on an authorization map (from CheckAuthorizationResult) @@ -242,4 +491,21 @@ export interface ISavedObjectsSecurityExtension { * @returns SavedObject - saved object with filtered spaces */ redactNamespaces: (params: RedactNamespacesParams) => SavedObject; + + /** + * Performs authorization for the disableLegacyUrlAliases method of the SecureSpacesClientWrapper + * There is no return for this method. If unauthorized the method with throw, otherwise will resolve. + * @param aliases - array of legacy url alias targets + */ + authorizeDisableLegacyUrlAliases: (aliases: LegacyUrlAliasTarget[]) => void; + + /** + * Performs saved object audit logging for the delete method of the SecureSpacesClientWrapper + * @param spaceId - the id of the space being deleted + * @param objects - the objects to audit + */ + auditObjectsForSpaceDeletion: ( + spaceId: string, + objects: Array> + ) => void; } diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.test.ts b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.test.ts similarity index 100% rename from packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.test.ts rename to packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.test.ts diff --git a/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts new file mode 100644 index 0000000000000..13ce1838c4cd5 --- /dev/null +++ b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts @@ -0,0 +1,448 @@ +/* + * Copyright 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 Boom from '@hapi/boom'; + +// 400 - badRequest +const CODE_BAD_REQUEST = 'SavedObjectsClient/badRequest'; +// 400 - invalid version +const CODE_INVALID_VERSION = 'SavedObjectsClient/invalidVersion'; +// 401 - Not Authorized +const CODE_NOT_AUTHORIZED = 'SavedObjectsClient/notAuthorized'; +// 403 - Forbidden +const CODE_FORBIDDEN = 'SavedObjectsClient/forbidden'; +// 413 - Request Entity Too Large +const CODE_REQUEST_ENTITY_TOO_LARGE = 'SavedObjectsClient/requestEntityTooLarge'; +// 404 - Not Found +const CODE_NOT_FOUND = 'SavedObjectsClient/notFound'; +// 409 - Conflict +const CODE_CONFLICT = 'SavedObjectsClient/conflict'; +// 429 - Too Many Requests +const CODE_TOO_MANY_REQUESTS = 'SavedObjectsClient/tooManyRequests'; +// 400 - Es Cannot Execute Script +const CODE_ES_CANNOT_EXECUTE_SCRIPT = 'SavedObjectsClient/esCannotExecuteScript'; +// 503 - Es Unavailable +const CODE_ES_UNAVAILABLE = 'SavedObjectsClient/esUnavailable'; +// 500 - General Error +const CODE_GENERAL_ERROR = 'SavedObjectsClient/generalError'; + +const code = Symbol('SavedObjectsClientErrorCode'); + +/** + * The DecoratedError interface extends the Boom error object + * and augments it with the 'SavedObjectsClientErrorCode' symbol + * property. + */ +export interface DecoratedError extends Boom.Boom { + /** the 'SavedObjectsClientErrorCode' symbol */ + [code]?: string; +} + +/** + * Error result for the internal bulk resolve method. + */ +export interface BulkResolveError { + /** The type of the saved object */ + type: string; + /** The id of the saved object */ + id: string; + /** The decorated resolve error */ + error: DecoratedError; +} + +/** + * Decorates an error - adds information or additional explanation of an error to + * provide more context. + * + */ +function decorate( + error: Error | DecoratedError, + errorCode: string, + statusCode: number, + message?: string +): DecoratedError { + if (isSavedObjectsClientError(error)) { + return error; + } + + const boom = Boom.boomify(error, { + statusCode, + message, + override: false, + }) as DecoratedError; + + boom[code] = errorCode; + + return boom; +} + +/** + * Determines if an error is a saved objects client error + */ +function isSavedObjectsClientError(error: any): error is DecoratedError { + return Boolean(error && error[code]); +} + +/** + * Decorates an bad request error to add information or additional explanation of an error to + * provide more context. Bad requests come in a few flavors: unsupported type, invalid version, + * elastic search cannot execute script, or plain vanilla bad request. + */ +function decorateBadRequestError(error: Error, reason?: string) { + return decorate(error, CODE_BAD_REQUEST, 400, reason); +} + +/** + * The SavedObjectsErrorHelpers class is a simple class for creating, decorating, and + * qualifying saved object errors. + * @public + */ +export class SavedObjectsErrorHelpers { + /** + * Determines if an error is a saved objects client error + * @public + * @param error the error to check + * @returns boolean - true if error is a saved objects client error + */ + public static isSavedObjectsClientError(error: any): error is DecoratedError { + return isSavedObjectsClientError(error); + } + + /** + * Decorates a bad request error (400) by adding a reason + * @public + * @param error the error to decorate + * @param reason the reason for the bad request (optional) + * @returns the decorated error + */ + public static decorateBadRequestError(error: Error, reason?: string) { + return decorateBadRequestError(error, reason); + } + + /** + * Creates a decorated bad request error (400). Bad requests come in a few flavors: + * unsupported type, invalid version, elastic search cannot execute script, or plain + * vanilla bad request. + * @public + * @param reason the reason for the bad request (optional) + * @returns the decorated error + */ + public static createBadRequestError(reason?: string) { + return decorateBadRequestError(new Error('Bad Request'), reason); + } + + /** + * Creates a decorated unsupported type error (flavor of bad request 400) + * @public + * @param type the unsupported saved object type + * @returns the decorated error + */ + public static createUnsupportedTypeError(type: string) { + return decorateBadRequestError( + new Error('Bad Request'), + `Unsupported saved object type: '${type}'` + ); + } + + /** + * Determines if an error is a bad request error (400) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a bad request error + */ + public static isBadRequestError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_BAD_REQUEST; + } + + /** + * Creates a decorated invalid version error (flavor of bad request 400) + * @public + * @param versionInput the version string (optional) + * @returns the decorated error + */ + public static createInvalidVersionError(versionInput?: string) { + return decorate( + Boom.badRequest(`Invalid version [${versionInput}]`), + CODE_INVALID_VERSION, + 400 + ); + } + + /** + * Determines if an error is an invalid version error (flavor of bad request 400) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is an invalid version error + */ + public static isInvalidVersionError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_INVALID_VERSION; + } + + /** + * Decorates an error as an not authorized error (401) + * @public + * @param error the error to decorate + * @param reason the reason for the not authorized error (optional) + * @returns the decorated error + */ + public static decorateNotAuthorizedError(error: Error, reason?: string) { + return decorate(error, CODE_NOT_AUTHORIZED, 401, reason); + } + + /** + * Determines if an error is a not authorized error (401) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a not authorized error + */ + public static isNotAuthorizedError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_NOT_AUTHORIZED; + } + + /** + * Decorates an error as a forbidden error (403) + * @public + * @param error the error to decorate + * @param reason the reason for the forbidden error (optional) + * @returns the decorated error + */ + public static decorateForbiddenError(error: Error, reason?: string) { + return decorate(error, CODE_FORBIDDEN, 403, reason); + } + + /** + * Determines if an error is a forbidden error (403) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a forbidden error + */ + public static isForbiddenError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_FORBIDDEN; + } + + /** + * Decorates a request entity too large error (413) + * @public + * @param error the error to decorate + * @param reason the reason for the request entity too large error + * @returns the decorated error + */ + public static decorateRequestEntityTooLargeError(error: Error, reason?: string) { + return decorate(error, CODE_REQUEST_ENTITY_TOO_LARGE, 413, reason); + } + + /** + * Determines if an error is a request entity too large error(413) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a request entity too large error + */ + public static isRequestEntityTooLargeError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_REQUEST_ENTITY_TOO_LARGE; + } + + /** + * Creates a generic not found error (404) + * @public + * @param type the saved object type or null (default is null) + * @param id the saved object id or null (default is null) + * @returns the decorated error + */ + public static createGenericNotFoundError(type: string | null = null, id: string | null = null) { + if (type && id) { + return decorate(Boom.notFound(`Saved object [${type}/${id}] not found`), CODE_NOT_FOUND, 404); + } + return decorate(Boom.notFound(), CODE_NOT_FOUND, 404); + } + + /** + * Creates an alias not found error (flavor of general error 500) + * @public + * @param alias the unfound saved object alias + * @returns the decorated error + */ + public static createIndexAliasNotFoundError(alias: string) { + return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(Boom.internal(), alias); + } + + /** + * Decorates an index alias not found error (flavor of general error 500) + * @public + * @param error the error to decorate + * @param alias the unfound index alias + * @returns the decorated error + */ + public static decorateIndexAliasNotFoundError(error: Error, alias: string) { + return decorate( + error, + CODE_GENERAL_ERROR, + 500, + `Saved object index alias [${alias}] not found` + ); + } + + /** + * Determines if an error is a not found error (404) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a not found error + */ + public static isNotFoundError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_NOT_FOUND; + } + + /** + * Decorates a conflict error (409) + * @public + * @param error the error to decorate + * @param reason the reason for the conflict error (optional) + * @returns the decorated error + */ + public static decorateConflictError(error: Error, reason?: string) { + return decorate(error, CODE_CONFLICT, 409, reason); + } + + /** + * Creates a conflict error (409) + * @public + * @param type the saved object type + * @param id the saved object id + * @param reason the reason for the conflict error (optional) + * @returns the decorated error + */ + public static createConflictError(type: string, id: string, reason?: string) { + return SavedObjectsErrorHelpers.decorateConflictError( + Boom.conflict(`Saved object [${type}/${id}] conflict`), + reason + ); + } + + /** + * Determines if an error is a conflict error (409) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a conflict error + */ + public static isConflictError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_CONFLICT; + } + + /** + * Decorates a too many requests error (429) + * @public + * @param error the error to decorate + * @param reason the reason for the too many requests error (optional) + * @returns the decorated error + */ + public static decorateTooManyRequestsError(error: Error, reason?: string) { + return decorate(error, CODE_TOO_MANY_REQUESTS, 429, reason); + } + + /** + * Creates a too many requests error (429) + * @public + * @param type the saved object type + * @param id the saved object id + * @returns the decorated error + */ + public static createTooManyRequestsError(type: string, id: string) { + return SavedObjectsErrorHelpers.decorateTooManyRequestsError(Boom.tooManyRequests()); + } + + /** + * Determines if an error is a too many requests error (429) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a too many requests error + */ + public static isTooManyRequestsError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_TOO_MANY_REQUESTS; + } + + /** + * Decorates an elastic search cannot execute script error (flavor of 400) + * @public + * @param error the error to decorate + * @param reason the reason for the cannot execute error (optional) + * @returns the decorated error + */ + public static decorateEsCannotExecuteScriptError(error: Error, reason?: string) { + return decorate(error, CODE_ES_CANNOT_EXECUTE_SCRIPT, 400, reason); + } + + /** + * Determines if an error is an elastic search cannot execute script error (flavor of 400) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a cannot execute error + */ + public static isEsCannotExecuteScriptError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_ES_CANNOT_EXECUTE_SCRIPT; + } + + /** + * Decorates an elastic search unavailable error (503) + * @public + * @param error the error to decorate + * @param reason the reason for the elastic search unavailable error (optional) + * @returns the decorated error + */ + public static decorateEsUnavailableError(error: Error, reason?: string) { + return decorate(error, CODE_ES_UNAVAILABLE, 503, reason); + } + + /** + * Determines if an error is an elastic search unavailable error (flavor of 400) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is an elastic search unavailable error + */ + public static isEsUnavailableError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_ES_UNAVAILABLE; + } + + /** + * Decorates a general error (500) + * @public + * @param error the error to decorate + * @param reason the reason for the error (optional) + * @returns the decorated error + */ + public static decorateGeneralError(error: Error, reason?: string) { + return decorate(error, CODE_GENERAL_ERROR, 500, reason); + } + + /** + * Determines if an error is a general error (500) + * @public + * @param error the error or decorated error + * @returns boolean - true if error is a general error + */ + public static isGeneralError(error: Error | DecoratedError) { + return isSavedObjectsClientError(error) && error[code] === CODE_GENERAL_ERROR; + } + + /** + * Creates a generic elastic search not present error + * @public + * @param type the saved object type or null, default null + * @param id the saved object id or null, default null + * @returns the decorated error + */ + public static createGenericNotFoundEsUnavailableError( + // type and id not available in all operations (e.g. mget) + type: string | null = null, + id: string | null = null + ) { + const notFoundError = this.createGenericNotFoundError(type, id); + return this.decorateEsUnavailableError( + new Error(`${notFoundError.message}`), + `x-elastic-product not present or not recognized` + ); + } +} diff --git a/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_management.ts b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_management.ts index b68fa59d95302..5d72112cbb049 100644 --- a/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_management.ts +++ b/packages/core/saved-objects/core-saved-objects-server/src/saved_objects_management.ts @@ -6,9 +6,9 @@ * Side Public License, v 1. */ +import type { SavedObject } from '..'; import type { SavedObjectsExportTransform } from './export'; import type { SavedObjectsImportHook } from './import'; -import type { SavedObject } from '..'; /** * Configuration options for the {@link SavedObjectsType | type}'s management section. diff --git a/packages/core/saved-objects/core-saved-objects-server/tsconfig.json b/packages/core/saved-objects/core-saved-objects-server/tsconfig.json index 427b46dc70afb..fffc0dc1df6df 100644 --- a/packages/core/saved-objects/core-saved-objects-server/tsconfig.json +++ b/packages/core/saved-objects/core-saved-objects-server/tsconfig.json @@ -18,7 +18,6 @@ "@kbn/core-elasticsearch-server", "@kbn/core-saved-objects-common", "@kbn/core-saved-objects-api-server", - "@kbn/ecs" ], "exclude": [ "target/**/*", diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/index.ts b/packages/core/saved-objects/core-saved-objects-utils-server/index.ts index bae7583ae1e92..102a0a0d38e80 100644 --- a/packages/core/saved-objects/core-saved-objects-utils-server/index.ts +++ b/packages/core/saved-objects/core-saved-objects-utils-server/index.ts @@ -7,7 +7,6 @@ */ export { mergeSavedObjectMigrationMaps } from './src/merge_migration_maps'; -export { SavedObjectsErrorHelpers, type DecoratedError } from './src/saved_objects_error_helpers'; export { SavedObjectsUtils, ALL_NAMESPACES_STRING, diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts b/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts deleted file mode 100644 index 7412e744f19e7..0000000000000 --- a/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts +++ /dev/null @@ -1,217 +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 Boom from '@hapi/boom'; - -// 400 - badRequest -const CODE_BAD_REQUEST = 'SavedObjectsClient/badRequest'; -// 400 - invalid version -const CODE_INVALID_VERSION = 'SavedObjectsClient/invalidVersion'; -// 401 - Not Authorized -const CODE_NOT_AUTHORIZED = 'SavedObjectsClient/notAuthorized'; -// 403 - Forbidden -const CODE_FORBIDDEN = 'SavedObjectsClient/forbidden'; -// 413 - Request Entity Too Large -const CODE_REQUEST_ENTITY_TOO_LARGE = 'SavedObjectsClient/requestEntityTooLarge'; -// 404 - Not Found -const CODE_NOT_FOUND = 'SavedObjectsClient/notFound'; -// 409 - Conflict -const CODE_CONFLICT = 'SavedObjectsClient/conflict'; -// 429 - Too Many Requests -const CODE_TOO_MANY_REQUESTS = 'SavedObjectsClient/tooManyRequests'; -// 400 - Es Cannot Execute Script -const CODE_ES_CANNOT_EXECUTE_SCRIPT = 'SavedObjectsClient/esCannotExecuteScript'; -// 503 - Es Unavailable -const CODE_ES_UNAVAILABLE = 'SavedObjectsClient/esUnavailable'; -// 500 - General Error -const CODE_GENERAL_ERROR = 'SavedObjectsClient/generalError'; - -const code = Symbol('SavedObjectsClientErrorCode'); - -export interface DecoratedError extends Boom.Boom { - [code]?: string; -} - -function decorate( - error: Error | DecoratedError, - errorCode: string, - statusCode: number, - message?: string -): DecoratedError { - if (isSavedObjectsClientError(error)) { - return error; - } - - const boom = Boom.boomify(error, { - statusCode, - message, - override: false, - }) as DecoratedError; - - boom[code] = errorCode; - - return boom; -} - -function isSavedObjectsClientError(error: any): error is DecoratedError { - return Boolean(error && error[code]); -} - -function decorateBadRequestError(error: Error, reason?: string) { - return decorate(error, CODE_BAD_REQUEST, 400, reason); -} - -/** - * @public - */ -export class SavedObjectsErrorHelpers { - public static isSavedObjectsClientError(error: any): error is DecoratedError { - return isSavedObjectsClientError(error); - } - - public static decorateBadRequestError(error: Error, reason?: string) { - return decorateBadRequestError(error, reason); - } - - public static createBadRequestError(reason?: string) { - return decorateBadRequestError(new Error('Bad Request'), reason); - } - - public static createUnsupportedTypeError(type: string) { - return decorateBadRequestError( - new Error('Bad Request'), - `Unsupported saved object type: '${type}'` - ); - } - - public static isBadRequestError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_BAD_REQUEST; - } - - public static createInvalidVersionError(versionInput?: string) { - return decorate( - Boom.badRequest(`Invalid version [${versionInput}]`), - CODE_INVALID_VERSION, - 400 - ); - } - - public static isInvalidVersionError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_INVALID_VERSION; - } - - public static decorateNotAuthorizedError(error: Error, reason?: string) { - return decorate(error, CODE_NOT_AUTHORIZED, 401, reason); - } - - public static isNotAuthorizedError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_NOT_AUTHORIZED; - } - - public static decorateForbiddenError(error: Error, reason?: string) { - return decorate(error, CODE_FORBIDDEN, 403, reason); - } - - public static isForbiddenError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_FORBIDDEN; - } - - public static decorateRequestEntityTooLargeError(error: Error, reason?: string) { - return decorate(error, CODE_REQUEST_ENTITY_TOO_LARGE, 413, reason); - } - public static isRequestEntityTooLargeError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_REQUEST_ENTITY_TOO_LARGE; - } - - public static createGenericNotFoundError(type: string | null = null, id: string | null = null) { - if (type && id) { - return decorate(Boom.notFound(`Saved object [${type}/${id}] not found`), CODE_NOT_FOUND, 404); - } - return decorate(Boom.notFound(), CODE_NOT_FOUND, 404); - } - - public static createIndexAliasNotFoundError(alias: string) { - return SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError(Boom.internal(), alias); - } - - public static decorateIndexAliasNotFoundError(error: Error, alias: string) { - return decorate( - error, - CODE_GENERAL_ERROR, - 500, - `Saved object index alias [${alias}] not found` - ); - } - - public static isNotFoundError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_NOT_FOUND; - } - - public static decorateConflictError(error: Error, reason?: string) { - return decorate(error, CODE_CONFLICT, 409, reason); - } - - public static createConflictError(type: string, id: string, reason?: string) { - return SavedObjectsErrorHelpers.decorateConflictError( - Boom.conflict(`Saved object [${type}/${id}] conflict`), - reason - ); - } - - public static isConflictError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_CONFLICT; - } - - public static decorateTooManyRequestsError(error: Error, reason?: string) { - return decorate(error, CODE_TOO_MANY_REQUESTS, 429, reason); - } - - public static createTooManyRequestsError(type: string, id: string) { - return SavedObjectsErrorHelpers.decorateTooManyRequestsError(Boom.tooManyRequests()); - } - - public static isTooManyRequestsError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_TOO_MANY_REQUESTS; - } - - public static decorateEsCannotExecuteScriptError(error: Error, reason?: string) { - return decorate(error, CODE_ES_CANNOT_EXECUTE_SCRIPT, 400, reason); - } - - public static isEsCannotExecuteScriptError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_ES_CANNOT_EXECUTE_SCRIPT; - } - - public static decorateEsUnavailableError(error: Error, reason?: string) { - return decorate(error, CODE_ES_UNAVAILABLE, 503, reason); - } - - public static isEsUnavailableError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_ES_UNAVAILABLE; - } - - public static decorateGeneralError(error: Error, reason?: string) { - return decorate(error, CODE_GENERAL_ERROR, 500, reason); - } - - public static isGeneralError(error: Error | DecoratedError) { - return isSavedObjectsClientError(error) && error[code] === CODE_GENERAL_ERROR; - } - - public static createGenericNotFoundEsUnavailableError( - // type and id not available in all operations (e.g. mget) - type: string | null = null, - id: string | null = null - ) { - const notFoundError = this.createGenericNotFoundError(type, id); - return this.decorateEsUnavailableError( - new Error(`${notFoundError.message}`), - `x-elastic-product not present or not recognized` - ); - } -} diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts index 1f66d05dc0a4c..992a851db99fd 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { createOrUpgradeSavedConfig } from '../create_or_upgrade_saved_config'; import { CannotOverrideError } from '../ui_settings_errors'; import { Cache } from '../cache'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.test.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.test.ts index 606c6d98538af..63a80e673a487 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.test.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.test.ts @@ -10,7 +10,7 @@ import { mockTransform, mockGetUpgradeableConfig, } from './create_or_upgrade_saved_config.test.mock'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.ts index b6532b1c95348..d6e0fffa05868 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/create_or_upgrade_saved_config/create_or_upgrade_saved_config.ts @@ -11,7 +11,7 @@ import { defaults } from 'lodash'; import type { Logger, LogMeta } from '@kbn/logging'; import { asyncForEach } from '@kbn/std'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { getUpgradeableConfig } from './get_upgradeable_config'; import { transforms } from '../saved_objects'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/delete.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/delete.ts index b9aed6153e796..46cbd4d9a7dde 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/delete.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/delete.ts @@ -8,7 +8,7 @@ import { schema } from '@kbn/config-schema'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { IUiSettingsClient } from '@kbn/core-ui-settings-server'; import { KibanaRequest, KibanaResponseFactory } from '@kbn/core-http-server'; import type { InternalUiSettingsRouter } from '../internal_types'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/get.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/get.ts index 11a45ee2f87c9..58afe0ecd8b1a 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/get.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/get.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { IUiSettingsClient } from '@kbn/core-ui-settings-server'; import { KibanaRequest, KibanaResponseFactory } from '@kbn/core-http-server'; import { InternalUiSettingsRequestHandlerContext } from '../internal_types'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set.ts index 9f13f86946074..b1e12b160b6a2 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set.ts @@ -8,7 +8,7 @@ import { schema, ValidationError } from '@kbn/config-schema'; import { KibanaRequest, KibanaResponseFactory } from '@kbn/core-http-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { IUiSettingsClient } from '@kbn/core-ui-settings-server'; import type { InternalUiSettingsRequestHandlerContext, diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set_many.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set_many.ts index 71e94ac039304..210e69fb9884f 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set_many.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/routes/set_many.ts @@ -7,7 +7,7 @@ */ import { schema, ValidationError } from '@kbn/config-schema'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { KibanaRequest, KibanaResponseFactory } from '@kbn/core-http-server'; import { IUiSettingsClient } from '@kbn/core-ui-settings-server'; import type { InternalUiSettingsRouter } from '../internal_types'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts index 8f3382d4dadd2..3539a71c11bcd 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.test.ts @@ -7,7 +7,7 @@ */ import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { SavedObject } from '@kbn/core-saved-objects-common'; import type { UpgradeableConfigAttributes } from '../create_or_upgrade_saved_config'; import { transformDefaultIndex } from './transforms'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.ts index 05bfbbf9d3a12..deff89826f018 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/saved_objects/transforms.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import type { UpgradeableConfigAttributes } from '../create_or_upgrade_saved_config'; diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json b/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json index b90718d624e97..8786943d0f6da 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json +++ b/packages/core/ui-settings/core-ui-settings-server-internal/tsconfig.json @@ -22,7 +22,6 @@ "@kbn/core-saved-objects-api-server", "@kbn/core-saved-objects-server", "@kbn/core-saved-objects-server-internal", - "@kbn/core-saved-objects-utils-server", "@kbn/core-ui-settings-common", "@kbn/core-ui-settings-server", "@kbn/config", diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 3ed069403d8f3..6179f1f534395 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -255,6 +255,7 @@ export type { SavedObjectsImportWarning, SavedObjectTypeIdTuple, } from '@kbn/core-saved-objects-common'; + export type { SavedObjectsBulkCreateObject, SavedObjectsBulkGetObject, @@ -358,12 +359,9 @@ export type { SavedObjectsRequestHandlerContext, EncryptedObjectDescriptor, ISavedObjectsEncryptionExtension, - PerformAuthorizationParams, AuthorizationTypeEntry, AuthorizationTypeMap, CheckAuthorizationResult, - EnforceAuthorizationParams, - AddAuditEventParams, RedactNamespacesParams, ISavedObjectsSecurityExtension, ISavedObjectsSpacesExtension, @@ -373,9 +371,9 @@ export { ENCRYPTION_EXTENSION_ID, SECURITY_EXTENSION_ID, SPACES_EXTENSION_ID, + SavedObjectsErrorHelpers, } from '@kbn/core-saved-objects-server'; export { - SavedObjectsErrorHelpers, SavedObjectsUtils, mergeSavedObjectMigrationMaps, } from '@kbn/core-saved-objects-utils-server'; diff --git a/src/core/server/integration_tests/saved_objects/routes/import.test.ts b/src/core/server/integration_tests/saved_objects/routes/import.test.ts index 6a98122141b00..c7fbbc8c81325 100644 --- a/src/core/server/integration_tests/saved_objects/routes/import.test.ts +++ b/src/core/server/integration_tests/saved_objects/routes/import.test.ts @@ -9,7 +9,7 @@ jest.mock('uuid'); import supertest from 'supertest'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import type { ICoreUsageStatsClient } from '@kbn/core-usage-data-base-server-internal'; import { diff --git a/src/plugins/telemetry/server/saved_objects/get_telemetry_saved_object.ts b/src/plugins/telemetry/server/saved_objects/get_telemetry_saved_object.ts index 5a1509a028f90..b12d9e9383f64 100644 --- a/src/plugins/telemetry/server/saved_objects/get_telemetry_saved_object.ts +++ b/src/plugins/telemetry/server/saved_objects/get_telemetry_saved_object.ts @@ -7,7 +7,7 @@ */ import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { TelemetrySavedObject } from './types'; import { TELEMETRY_SAVED_OBJECT_TYPE, TELEMETRY_SAVED_OBJECT_ID } from './constants'; diff --git a/src/plugins/telemetry/tsconfig.json b/src/plugins/telemetry/tsconfig.json index adb252c1665e2..4198aa6a3b0e1 100644 --- a/src/plugins/telemetry/tsconfig.json +++ b/src/plugins/telemetry/tsconfig.json @@ -31,7 +31,6 @@ "@kbn/utils", "@kbn/core-saved-objects-server", "@kbn/core-saved-objects-api-server", - "@kbn/core-saved-objects-utils-server", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/fleet/server/services/epm/archive/storage.test.ts b/x-pack/plugins/fleet/server/services/epm/archive/storage.test.ts index 10ee590e3e398..1bfa783d3a59a 100644 --- a/x-pack/plugins/fleet/server/services/epm/archive/storage.test.ts +++ b/x-pack/plugins/fleet/server/services/epm/archive/storage.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { getAsset } from './storage'; diff --git a/x-pack/plugins/fleet/tsconfig.json b/x-pack/plugins/fleet/tsconfig.json index 7c803170c333d..3cd28d6cb1f93 100644 --- a/x-pack/plugins/fleet/tsconfig.json +++ b/x-pack/plugins/fleet/tsconfig.json @@ -89,7 +89,6 @@ "@kbn/core-saved-objects-api-server", "@kbn/logging", "@kbn/analytics-client", - "@kbn/core-saved-objects-utils-server", "@kbn/core-logging-server-mocks", "@kbn/ml-is-populated-object", "@kbn/utils", diff --git a/x-pack/plugins/observability/server/services/slo/slo_repository.ts b/x-pack/plugins/observability/server/services/slo/slo_repository.ts index ac639bd383a2f..3bf0c3b85937b 100644 --- a/x-pack/plugins/observability/server/services/slo/slo_repository.ts +++ b/x-pack/plugins/observability/server/services/slo/slo_repository.ts @@ -10,7 +10,7 @@ import { fold } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import { sloSchema } from '@kbn/slo-schema'; import { StoredSLO, SLO } from '../../domain/models'; diff --git a/x-pack/plugins/observability/tsconfig.json b/x-pack/plugins/observability/tsconfig.json index d08a00ea674a3..1ee05fa174fae 100644 --- a/x-pack/plugins/observability/tsconfig.json +++ b/x-pack/plugins/observability/tsconfig.json @@ -62,7 +62,6 @@ "@kbn/logging-mocks", "@kbn/logging", "@kbn/core-saved-objects-api-server", - "@kbn/core-saved-objects-utils-server", "@kbn/share-plugin", "@kbn/core-notifications-browser", "@kbn/slo-schema", diff --git a/x-pack/plugins/security/server/audit/audit_events.test.ts b/x-pack/plugins/security/server/audit/audit_events.test.ts index 8edd22e915c7c..b78a723fe3f4e 100644 --- a/x-pack/plugins/security/server/audit/audit_events.test.ts +++ b/x-pack/plugins/security/server/audit/audit_events.test.ts @@ -7,11 +7,11 @@ import { URL } from 'url'; -import { AuditAction } from '@kbn/core-saved-objects-server'; import { httpServerMock } from '@kbn/core/server/mocks'; import { mockAuthenticatedUser } from '../../common/model/authenticated_user.mock'; import { AuthenticationResult } from '../authentication'; +import { AuditAction } from '../saved_objects/saved_objects_security_extension'; import { httpRequestEvent, savedObjectEvent, diff --git a/x-pack/plugins/security/server/audit/audit_events.ts b/x-pack/plugins/security/server/audit/audit_events.ts index 42cc7d4712af2..30763e7dd71ec 100644 --- a/x-pack/plugins/security/server/audit/audit_events.ts +++ b/x-pack/plugins/security/server/audit/audit_events.ts @@ -5,15 +5,15 @@ * 2.0. */ -import type { - AuditAction, - AddAuditEventParams as SavedObjectEventParams, -} from '@kbn/core-saved-objects-server'; import type { EcsEvent, KibanaRequest, LogMeta } from '@kbn/core/server'; import type { ArrayElement } from '@kbn/utility-types'; import type { AuthenticationProvider } from '../../common/model'; import type { AuthenticationResult } from '../authentication/authentication_result'; +import type { + AuditAction, + AddAuditEventParams as SavedObjectEventParams, +} from '../saved_objects/saved_objects_security_extension'; /** * Audit kibana schema using ECS format diff --git a/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.test.ts b/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.test.ts index bd6eb1fa1456e..88de1b783ae65 100644 --- a/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.test.ts +++ b/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.test.ts @@ -5,14 +5,95 @@ * 2.0. */ -import { AuditAction } from '@kbn/core-saved-objects-server'; -import type { EcsEvent, SavedObjectsClient } from '@kbn/core/server'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; +import type { + AuthorizeBulkGetObject, + AuthorizeCreateObject, + AuthorizeObjectWithExistingSpaces, + AuthorizeUpdateObject, + BulkResolveError, +} from '@kbn/core-saved-objects-server'; +import type { + SavedObjectReferenceWithContext, + SavedObjectsClient, + SavedObjectsFindResult, + SavedObjectsResolveResponse, +} from '@kbn/core/server'; import { auditLoggerMock } from '../audit/mocks'; import type { CheckSavedObjectsPrivileges } from '../authorization'; import { Actions } from '../authorization'; import type { CheckPrivilegesResponse } from '../authorization/types'; -import { SavedObjectsSecurityExtension } from './saved_objects_security_extension'; +import { + AuditAction, + SavedObjectsSecurityExtension, + SecurityAction, +} from './saved_objects_security_extension'; + +const checkAuthorizationSpy = jest.spyOn( + SavedObjectsSecurityExtension.prototype as any, + 'checkAuthorization' +); +const enforceAuthorizationSpy = jest.spyOn( + SavedObjectsSecurityExtension.prototype as any, + 'enforceAuthorization' +); +const redactNamespacesSpy = jest.spyOn( + SavedObjectsSecurityExtension.prototype as any, + 'redactNamespaces' +); +const authorizeSpy = jest.spyOn(SavedObjectsSecurityExtension.prototype as any, 'authorize'); +const auditHelperSpy = jest.spyOn(SavedObjectsSecurityExtension.prototype as any, 'auditHelper'); +const addAuditEventSpy = jest.spyOn( + SavedObjectsSecurityExtension.prototype as any, + 'addAuditEvent' +); + +const obj1 = { + type: 'a', + id: '6.0.0-alpha1', + objectNamespace: 'foo', + initialNamespaces: ['foo'], + existingNamespaces: [], +}; +const obj2 = { + type: 'b', + id: 'logstash-*', + objectNamespace: undefined, + initialNamespaces: undefined, + existingNamespaces: [], +}; +const obj3 = { + type: 'c', + id: '6.0.0-charlie3', + objectNamespace: undefined, + initialNamespaces: undefined, + existingNamespaces: ['bar'], +}; +const obj4 = { + type: 'd', + id: '6.0.0-disco4', + objectNamespace: 'y', + initialNamespaces: ['y'], + existingNamespaces: ['z'], +}; + +function setupSimpleCheckPrivsMockResolve( + checkPrivileges: jest.MockedFunction, + type: string, + action: string, + authorized: boolean +) { + checkPrivileges.mockResolvedValue({ + hasAllRequested: authorized, + privileges: { + kibana: [ + { privilege: `mock-saved_object:${type}/${action}`, authorized }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); +} function setup() { const actions = new Actions('some-version'); @@ -34,161 +115,80 @@ function setup() { return { actions, auditLogger, errors, checkPrivileges, securityExtension }; } -describe('#enforceAuthorization', () => { - test('fully authorized', () => { - const { securityExtension } = setup(); - - const authorizationResult = { - status: 'fully_authorized', - typeMap: new Map() - .set('a', { - foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('b', { - foo: { authorizedSpaces: ['x', 'y'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('c', { - foo: { authorizedSpaces: ['y', 'z'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }), - }; - - const spacesToEnforce = new Set(['x', 'y', 'z']); - - expect(() => - securityExtension.enforceAuthorization({ - typesAndSpaces: new Map([ - ['a', spacesToEnforce], - ['b', new Set(['x', 'y'])], - ['c', new Set(['y', 'z'])], - ]), - action: 'foo', - typeMap: authorizationResult.typeMap, - }) - ).not.toThrowError(); - }); - - test('partially authorized', () => { - const { securityExtension } = setup(); - - const authorizationResult = { - status: 'partially_authorized', - typeMap: new Map() - .set('a', { - foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('b', { - foo: { authorizedSpaces: ['x'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('c', { - foo: { authorizedSpaces: ['z'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }), - }; - - const spacesToEnforce = new Set(['x', 'y', 'z']); - - expect(() => - securityExtension.enforceAuthorization({ - typesAndSpaces: new Map([ - ['a', spacesToEnforce], - ['b', new Set(['x', 'y'])], - ['c', new Set(['y', 'z'])], - ]), - action: 'foo', - typeMap: authorizationResult.typeMap, - }) - ).toThrowError('Unable to foo b,c'); +describe('#authorize (unpublished by interface)', () => { + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); }); - test('unauthorized', () => { - const { securityExtension } = setup(); - - const authorizationResult = { - status: 'unauthorized', - typeMap: new Map() - .set('a', { - foo: { authorizedSpaces: ['x'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('b', { - foo: { authorizedSpaces: ['y'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('c', { - foo: { authorizedSpaces: ['z'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }), - }; - - expect(() => - securityExtension.enforceAuthorization({ - typesAndSpaces: new Map([ - ['a', new Set(['y', 'z'])], - ['b', new Set(['x', 'z'])], - ['c', new Set(['x', 'y'])], - ]), - action: 'foo', - typeMap: authorizationResult.typeMap, - }) - ).toThrowError('Unable to foo a,b,c'); - }); -}); + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { privilege: 'mock-saved_object:a/create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:c/create', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; -describe('#performAuthorization', () => { describe('without enforce', () => { // These arguments are used for all unit tests below const types = new Set(['a', 'b', 'c']); const spaces = new Set(['x', 'y']); - const actions = new Set(['foo', 'bar']); + const actions = new Set([SecurityAction.BULK_UPDATE, SecurityAction.CREATE]); - const fullyAuthorizedCheckPrivilegesResponse = { - hasAllRequested: true, - privileges: { - kibana: [ - { privilege: 'mock-saved_object:a/foo', authorized: true }, - { privilege: 'mock-saved_object:a/bar', authorized: true }, - { privilege: 'login:', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:b/bar', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:c/foo', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:c/bar', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:b/bar', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:c/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:c/bar', authorized: true }, - ], - }, - } as CheckPrivilegesResponse; - test('calls performPrivileges with expected privilege actions and namespaces', async () => { + test('checks authorization with expected actions, types, and spaces', async () => { const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); - await securityExtension.performAuthorization({ types, spaces, actions }); + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ types, spaces, actions }); + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set(['bulk_update', 'create']), + spaces, + types, + options: { allowGlobalResource: false }, + }); + expect(checkPrivileges).toHaveBeenCalledTimes(1); expect(checkPrivileges).toHaveBeenCalledWith( [ - 'mock-saved_object:a/foo', - 'mock-saved_object:a/bar', - 'mock-saved_object:b/foo', - 'mock-saved_object:b/bar', - 'mock-saved_object:c/foo', - 'mock-saved_object:c/bar', + 'mock-saved_object:a/bulk_update', + 'mock-saved_object:a/create', + 'mock-saved_object:b/bulk_update', + 'mock-saved_object:b/create', + 'mock-saved_object:c/bulk_update', + 'mock-saved_object:c/create', 'login:', ], [...spaces] ); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); }); test('throws an error when `types` is empty', async () => { const { securityExtension, checkPrivileges } = setup(); await expect( - securityExtension.performAuthorization({ types: new Set(), spaces, actions }) - ).rejects.toThrowError('No types specified for authorization check'); + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ types: new Set(), spaces, actions }) + ).rejects.toThrowError('No types specified for authorization'); + expect(checkAuthorizationSpy).not.toHaveBeenCalled(); expect(checkPrivileges).not.toHaveBeenCalled(); }); @@ -196,8 +196,10 @@ describe('#performAuthorization', () => { const { securityExtension, checkPrivileges } = setup(); await expect( - securityExtension.performAuthorization({ types, spaces: new Set(), actions }) - ).rejects.toThrowError('No spaces specified for authorization check'); + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ types, spaces: new Set(), actions }) + ).rejects.toThrowError('No spaces specified for authorization'); expect(checkPrivileges).not.toHaveBeenCalled(); }); @@ -205,8 +207,10 @@ describe('#performAuthorization', () => { const { securityExtension, checkPrivileges } = setup(); await expect( - securityExtension.performAuthorization({ types, spaces, actions: new Set([]) }) - ).rejects.toThrowError('No actions specified for authorization check'); + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ types, spaces, actions: new Set() }) + ).rejects.toThrowError('No actions specified for authorization'); expect(checkPrivileges).not.toHaveBeenCalled(); }); @@ -215,64 +219,70 @@ describe('#performAuthorization', () => { checkPrivileges.mockRejectedValue(new Error('Oh no!')); await expect( - securityExtension.performAuthorization({ types, spaces, actions }) + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ types, spaces, actions }) ).rejects.toThrowError('Oh no!'); }); test('fully authorized', async () => { - const { securityExtension, checkPrivileges } = setup(); + const { securityExtension, checkPrivileges, auditLogger } = setup(); checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); - const result = await securityExtension.performAuthorization({ types, spaces, actions }); - + // Disable to test method + // eslint-disable-next-line dot-notation + const result = await securityExtension['authorize']({ types, spaces, actions }); + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); // We're performing authz but no enforce, therefore no audit expect(result).toEqual({ status: 'fully_authorized', typeMap: new Map() .set('a', { - foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, - bar: { isGloballyAuthorized: true, authorizedSpaces: [] }, + create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + bulk_update: { isGloballyAuthorized: true, authorizedSpaces: [] }, // Technically, 'login:' is not a saved object action, it is a Kibana privilege -- however, we include it in the `typeMap` results // for ease of use with the `redactNamespaces` function. The user is never actually authorized to "login" for a given object type, // they are authorized to log in on a per-space basis, and this is applied to each object type in the typeMap result accordingly. ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, }) .set('b', { - foo: { authorizedSpaces: ['x', 'y'] }, - bar: { authorizedSpaces: ['x', 'y'] }, + create: { authorizedSpaces: ['x', 'y'] }, + bulk_update: { authorizedSpaces: ['x', 'y'] }, ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, }) .set('c', { - foo: { authorizedSpaces: ['x', 'y'] }, - bar: { authorizedSpaces: ['x', 'y'] }, + create: { authorizedSpaces: ['x', 'y'] }, + bulk_update: { authorizedSpaces: ['x', 'y'] }, ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, }), }); }); test('partially authorized', async () => { - const { securityExtension, checkPrivileges } = setup(); + const { securityExtension, checkPrivileges, auditLogger } = setup(); checkPrivileges.mockResolvedValue({ hasAllRequested: false, privileges: { kibana: [ - // For type 'a', the user is authorized to use 'foo' action but not 'bar' action (all spaces) - // For type 'b', the user is authorized to use 'foo' action but not 'bar' action (both spaces) + // For type 'a', the user is authorized to use 'create' action but not 'update' action (all spaces) + // For type 'b', the user is authorized to use 'create' action but not 'update' action (both spaces) // For type 'c', the user is authorized to use both actions in space 'x' but not space 'y' - { privilege: 'mock-saved_object:a/foo', authorized: true }, - { privilege: 'mock-saved_object:a/bar', authorized: false }, - { privilege: 'mock-saved_object:a/bar', authorized: true }, // fail-secure check - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:b/bar', authorized: false }, - { resource: 'x', privilege: 'mock-saved_object:c/foo', authorized: true }, - { privilege: 'mock-saved_object:c/foo', authorized: false }, // inverse fail-secure check - { resource: 'x', privilege: 'mock-saved_object:c/bar', authorized: true }, + { privilege: 'mock-saved_object:a/create', authorized: true }, + { privilege: 'mock-saved_object:a/bulk_update', authorized: false }, + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, // fail-secure check + { resource: 'x', privilege: 'mock-saved_object:b/create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: false }, + { resource: 'x', privilege: 'mock-saved_object:c/create', authorized: true }, + { privilege: 'mock-saved_object:c/create', authorized: false }, // inverse fail-secure check + { resource: 'x', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, { resource: 'x', privilege: 'login:', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:b/bar', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:c/foo', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:c/bar', authorized: false }, - { privilege: 'mock-saved_object:c/bar', authorized: true }, // fail-secure check - { resource: 'y', privilege: 'mock-saved_object:c/bar', authorized: true }, // fail-secure check + { resource: 'y', privilege: 'mock-saved_object:b/create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_update', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:c/create', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:c/bulk_update', authorized: false }, + { privilege: 'mock-saved_object:c/bulk_update', authorized: true }, // fail-secure check + { resource: 'y', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, // fail-secure check { resource: 'y', privilege: 'login:', authorized: true }, // The fail-secure checks are a contrived scenario, as we *shouldn't* get both an unauthorized and authorized result for a given resource... // However, in case we do, we should fail-secure (authorized + unauthorized = unauthorized) @@ -280,49 +290,54 @@ describe('#performAuthorization', () => { }, } as CheckPrivilegesResponse); - const result = await securityExtension.performAuthorization({ types, spaces, actions }); + // Disable to test method + // eslint-disable-next-line dot-notation + const result = await securityExtension['authorize']({ types, spaces, actions }); + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); // We're performing authz but no enforce, therefore no audit expect(result).toEqual({ status: 'partially_authorized', typeMap: new Map() .set('a', { - foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, + create: { isGloballyAuthorized: true, authorizedSpaces: [] }, ['login:']: { authorizedSpaces: ['x', 'y'] }, }) .set('b', { - foo: { authorizedSpaces: ['x', 'y'] }, + create: { authorizedSpaces: ['x', 'y'] }, ['login:']: { authorizedSpaces: ['x', 'y'] }, }) .set('c', { - foo: { authorizedSpaces: ['x'] }, - bar: { authorizedSpaces: ['x'] }, + bulk_update: { authorizedSpaces: ['x'] }, + create: { authorizedSpaces: ['x'] }, ['login:']: { authorizedSpaces: ['x', 'y'] }, }), }); }); test('unauthorized', async () => { - const { securityExtension, checkPrivileges } = setup(); + const { securityExtension, checkPrivileges, auditLogger } = setup(); checkPrivileges.mockResolvedValue({ hasAllRequested: false, privileges: { kibana: [ - { privilege: 'mock-saved_object:a/foo', authorized: false }, - { privilege: 'mock-saved_object:a/bar', authorized: false }, - { privilege: 'mock-saved_object:a/bar', authorized: true }, // fail-secure check - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: false }, - { resource: 'x', privilege: 'mock-saved_object:b/bar', authorized: false }, - { resource: 'x', privilege: 'mock-saved_object:c/foo', authorized: false }, - { resource: 'x', privilege: 'mock-saved_object:c/bar', authorized: false }, + { privilege: 'mock-saved_object:a/create', authorized: false }, + { privilege: 'mock-saved_object:a/update', authorized: false }, + { privilege: 'mock-saved_object:a/update', authorized: true }, // fail-secure check + { resource: 'x', privilege: 'mock-saved_object:b/create', authorized: false }, + { resource: 'x', privilege: 'mock-saved_object:b/update', authorized: false }, + { resource: 'x', privilege: 'mock-saved_object:c/create', authorized: false }, + { resource: 'x', privilege: 'mock-saved_object:c/update', authorized: false }, { resource: 'x', privilege: 'login:', authorized: false }, { resource: 'x', privilege: 'login:', authorized: true }, // fail-secure check - { resource: 'y', privilege: 'mock-saved_object:a/foo', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:a/bar', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:b/foo', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:b/bar', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:c/foo', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:c/bar', authorized: false }, - { privilege: 'mock-saved_object:c/bar', authorized: true }, // fail-secure check - { resource: 'y', privilege: 'mock-saved_object:c/bar', authorized: true }, // fail-secure check + { resource: 'y', privilege: 'mock-saved_object:a/create', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:a/update', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:b/create', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:b/update', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:c/create', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:c/update', authorized: false }, + { privilege: 'mock-saved_object:c/update', authorized: true }, // fail-secure check + { resource: 'y', privilege: 'mock-saved_object:c/update', authorized: true }, // fail-secure check { resource: 'y', privilege: 'login:', authorized: true }, // should *not* result in a 'partially_authorized' status // The fail-secure checks are a contrived scenario, as we *shouldn't* get both an unauthorized and authorized result for a given resource... // However, in case we do, we should fail-secure (authorized + unauthorized = unauthorized) @@ -330,7 +345,12 @@ describe('#performAuthorization', () => { }, } as CheckPrivilegesResponse); - const result = await securityExtension.performAuthorization({ types, spaces, actions }); + // Disable to test method + // eslint-disable-next-line dot-notation + const result = await securityExtension['authorize']({ types, spaces, actions }); + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); // We're performing authz but no enforce, therefore no audit expect(result).toEqual({ // The user is authorized to log into space Y, but they are not authorized to take any actions on any of the requested object types. // Therefore, the status is 'unauthorized'. @@ -347,10 +367,10 @@ describe('#performAuthorization', () => { hasAllRequested: true, privileges: { kibana: [ - // redundant conflicting privileges for space X, type B, action Foo - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: false }, - { resource: 'y', privilege: 'mock-saved_object:b/foo', authorized: true }, + // redundant conflicting privileges for space X, type B, action Create + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, ], }, } as CheckPrivilegesResponse; @@ -358,11 +378,13 @@ describe('#performAuthorization', () => { const { securityExtension, checkPrivileges } = setup(); checkPrivileges.mockResolvedValue(conflictingPrivilegesResponse); - const result = await securityExtension.performAuthorization({ types, spaces, actions }); + // Disable to test method + // eslint-disable-next-line dot-notation + const result = await securityExtension['authorize']({ types, spaces, actions }); expect(result).toEqual({ status: 'fully_authorized', typeMap: new Map().set('b', { - foo: { authorizedSpaces: ['y'] }, // should NOT be authorized for conflicted privilege + bulk_update: { authorizedSpaces: ['y'] }, // should NOT be authorized for conflicted privilege }), }); }); @@ -372,30 +394,16 @@ describe('#performAuthorization', () => { // These arguments are used for all unit tests below const types = new Set(['a', 'b', 'c']); const spaces = new Set(['x', 'y']); - const actions = new Set(['foo']); - - const fullyAuthorizedCheckPrivilegesResponse = { - hasAllRequested: true, - privileges: { - kibana: [ - { privilege: 'mock-saved_object:a/foo', authorized: true }, - { privilege: 'login:', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:c/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:c/foo', authorized: true }, - ], - }, - } as CheckPrivilegesResponse; + const actions = new Set([SecurityAction.BULK_UPDATE, SecurityAction.CREATE]); const partiallyAuthorizedCheckPrivilegesResponse = { hasAllRequested: false, privileges: { kibana: [ - { privilege: 'mock-saved_object:a/foo', authorized: true }, + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, { privilege: 'login:', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:c/foo', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, ], }, } as CheckPrivilegesResponse; @@ -405,19 +413,21 @@ describe('#performAuthorization', () => { privileges: { kibana: [ { privilege: 'login:', authorized: true }, - { resource: 'x', privilege: 'mock-saved_object:a/foo', authorized: true }, - { resource: 'y', privilege: 'mock-saved_object:b/foo', authorized: true }, - { resource: 'z', privilege: 'mock-saved_object:c/foo', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, ], }, } as CheckPrivilegesResponse; - test('fully authorized', async () => { - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + describe(`fully authorized`, () => { + test('adds default audit event', async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); - await expect(() => - securityExtension.performAuthorization({ + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ actions, types, spaces, @@ -426,198 +436,5653 @@ describe('#performAuthorization', () => { ['b', new Set(['x', 'y'])], ['c', new Set(['y'])], ]), - }) - ).not.toThrowError(); - }); + }); - test('partially authorized', async () => { - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); + expect(auditLogger.log).toHaveBeenCalledTimes(2); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'User is updating saved objects', + }); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'unknown', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'User is creating saved objects', + }); + }); + + test(`adds audit event with success outcome when 'useSuccessOutcome' is true`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); - await expect(() => - securityExtension.performAuthorization({ + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ actions, types, spaces, enforceMap: new Map([ ['a', new Set(['x', 'y', 'z'])], ['b', new Set(['x', 'y'])], - ['c', new Set(['x', 'y'])], + ['c', new Set(['y'])], ]), - }) - ).rejects.toThrowError('Unable to foo b,c'); - }); + auditOptions: { useSuccessOutcome: true }, + }); - test('unauthorized', async () => { - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); + expect(auditLogger.log).toHaveBeenCalledTimes(2); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'success', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'User has updated saved objects', + }); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'success', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'User has created saved objects', + }); + }); + + test(`adds audit event per object when 'objects' is populated`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; - await expect(() => - securityExtension.performAuthorization({ + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ actions, types, spaces, enforceMap: new Map([ - ['a', new Set(['y', 'z'])], - ['b', new Set(['x', 'z'])], - ['c', new Set(['x', 'y'])], + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['y'])], ]), - }) - ).rejects.toThrowError('Unable to foo a,b,c'); + auditOptions: { + objects: auditObjects, + }, + }); + + expect(auditLogger.log).toHaveBeenCalledTimes(auditObjects.length * 2); // 2 actions + let i = 1; + for (const obj of auditObjects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { + id: obj.id, + type: obj.type, + }, + }, + message: `User is updating ${obj.type} [id=${obj.id}]`, + }); + } + for (const obj of auditObjects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'unknown', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { + id: obj.id, + type: obj.type, + }, + }, + message: `User is creating ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`adds audit event per object with success outcome when 'objects' is populated and 'useSuccessOutcome' is true`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['y'])], + ]), + auditOptions: { + objects: auditObjects, + useSuccessOutcome: true, + }, + }); + + expect(auditLogger.log).toHaveBeenCalledTimes(auditObjects.length * 2); // two action + let i = 1; + for (const obj of auditObjects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'success', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { + id: obj.id, + type: obj.type, + }, + }, + message: `User has updated ${obj.type} [id=${obj.id}]`, + }); + } + for (const obj of auditObjects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'success', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { + id: obj.id, + type: obj.type, + }, + }, + message: `User has created ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`does not add audit events when 'bypassOnSuccess' is true`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['y'])], + ]), + auditOptions: { + objects: auditObjects, + bypass: 'on_success', + }, + }); + + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`auditOptions.bypassOnFailure' has no effect`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['y'])], + ]), + auditOptions: { bypass: 'on_failure' }, + }); + + expect(auditLogger.log).toHaveBeenCalledTimes(actions.size); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'User is updating saved objects', + }); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'unknown', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'User is creating saved objects', + }); + }); }); - }); -}); -describe('#addAuditEvent', () => { - test(`adds an unknown audit event`, async () => { - const { auditLogger, securityExtension } = setup(); - const action = AuditAction.UPDATE_OBJECTS_SPACES; - const outcome: EcsEvent['outcome'] = 'unknown'; - const savedObject = { type: 'dashboard', id: '3' }; - const spaces = ['space-id']; - - const auditParams = { - action, - outcome, - savedObject, - deleteFromSpaces: spaces, - }; + describe(`partially authorized`, () => { + test('throws error and adds default audit event', async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); - securityExtension.addAuditEvent(auditParams); + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + }) + ).rejects.toThrowError('Unable to bulk_update b,c'); - expect(auditLogger.log).toHaveBeenCalledWith( - expect.objectContaining({ - event: expect.objectContaining({ - action, - outcome, - }), - kibana: savedObject - ? expect.objectContaining({ - saved_object: savedObject, - delete_from_spaces: spaces, - }) - : expect.anything(), - message: `User is updating spaces of ${savedObject.type} [id=${savedObject.id}]`, - }) - ); - }); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to bulk_update b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'Failed attempt to update saved objects', + }); + }); - test(`adds a success audit event`, async () => { - const { auditLogger, securityExtension } = setup(); - const action = AuditAction.UPDATE_OBJECTS_SPACES; - const outcome: EcsEvent['outcome'] = 'success'; - const savedObject = { type: 'dashboard', id: '3' }; - const spaces = ['space-id']; + test(`throws error and adds audit event per object when 'objects' is populated`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); - const auditParams = { - action, - outcome, - savedObject, - addToSpaces: spaces, - }; + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; - securityExtension.addAuditEvent(auditParams); + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { objects: auditObjects }, + }) + ).rejects.toThrowError('Unable to bulk_update b,c'); - expect(auditLogger.log).toHaveBeenCalledWith( - expect.objectContaining({ - event: expect.objectContaining({ - action, - outcome, - }), - kibana: savedObject - ? expect.objectContaining({ - saved_object: savedObject, - add_to_spaces: spaces, - }) - : expect.anything(), - message: `User has updated spaces of ${savedObject.type} [id=${savedObject.id}]`, - }) - ); - }); + expect(auditLogger.log).toHaveBeenCalledTimes(auditObjects.length); + for (const obj of auditObjects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to bulk_update b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { + id: obj.id, + type: obj.type, + }, + }, + message: `Failed attempt to update ${obj.type} [id=${obj.id}]`, + }); + } + }); - test(`adds a failure audit event`, async () => { - const { auditLogger, securityExtension } = setup(); - const action = AuditAction.DELETE; - const outcome: EcsEvent['outcome'] = 'failure'; - const savedObject = { type: 'dashboard', id: '3' }; - const error: Error = { - name: 'test_error', - message: 'this is just a test', - }; + test(`throws error and does not add an audit event when 'bypassOnFailure' is true`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); - const auditParams = { - action, - outcome, - savedObject, - error, - }; + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; - securityExtension.addAuditEvent(auditParams); + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { objects: auditObjects, bypass: 'on_failure' }, + }) + ).rejects.toThrowError('Unable to bulk_update b,c'); - expect(auditLogger.log).toHaveBeenCalledWith( - expect.objectContaining({ - error: { code: error.name, message: error.message }, - event: expect.objectContaining({ - action, - outcome, - }), - kibana: savedObject - ? expect.objectContaining({ - saved_object: savedObject, - }) - : expect.anything(), - message: `Failed attempt to delete ${savedObject.type} [id=${savedObject.id}]`, - }) - ); - }); -}); + expect(auditLogger.log).not.toHaveBeenCalled(); + }); -describe('#redactNamespaces', () => { - test(`filters namespaces that the user doesn't have access to`, () => { - const { securityExtension } = setup(); + test(`auditOptions.bypassOnSuccess' has no effect`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); - const typeMap = new Map().set('so-type', { - // redact is only concerned with 'login' attribute, not specific action - ['login:']: { authorizedSpaces: ['authorized-space'] }, + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { bypass: 'on_success' }, + }) + ).rejects.toThrowError('Unable to bulk_update b,c'); + + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to bulk_update b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'Failed attempt to update saved objects', + }); + }); }); - const so = { - id: 'some-id', - type: 'so-type', - namespaces: ['authorized-space', 'unauthorized-space'], - attributes: { - test: 'attr', - }, - score: 1, - references: [], - }; + describe(`unauthorized`, () => { + test('throws error and adds default audit event', async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); - const result = securityExtension.redactNamespaces({ typeMap, savedObject: so }); - expect(result).toEqual(expect.objectContaining({ namespaces: ['authorized-space', '?'] })); + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['y', 'z'])], + ['b', new Set(['x', 'z'])], + ['c', new Set(['x', 'y'])], + ]), + }) + ).rejects.toThrowError('Unable to bulk_update a,b,c'); + + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to bulk_update a,b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'Failed attempt to update saved objects', + }); + }); + + test(`throws error and adds audit event per object when 'objects' is populated`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { objects: auditObjects }, + }) + ).rejects.toThrowError('Unable to bulk_update a,b,c'); + + expect(auditLogger.log).toHaveBeenCalledTimes(auditObjects.length); + for (const obj of auditObjects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to bulk_update a,b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { + id: obj.id, + type: obj.type, + }, + }, + message: `Failed attempt to update ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`throws error and does not add an audit event when 'bypassOnFailure' is true`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { objects: auditObjects, bypass: 'on_failure' }, + }) + ).rejects.toThrowError('Unable to bulk_update a,b,c'); + + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`auditOptions.bypassOnSuccess' has no effect`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); + + await expect(() => + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['y', 'z'])], + ['b', new Set(['x', 'z'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { bypass: 'on_success' }, + }) + ).rejects.toThrowError('Unable to bulk_update a,b,c'); + + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to bulk_update a,b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: 'Failed attempt to update saved objects', + }); + }); + }); }); - test(`does not redact on isGloballyAuthorized`, () => { - const { securityExtension } = setup(); + describe('security actions with no authorization action', () => { + // These arguments are used for all unit tests below + const types = new Set(['a', 'b', 'c']); + const spaces = new Set(['x', 'y']); - const typeMap = new Map().set('so-type', { - // redact is only concerned with 'login' attribute, not specific action - ['login:']: { isGloballyAuthorized: true }, + test('throws no actions error', async () => { + const { securityExtension } = setup(); + + await expect( + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + types, + spaces, + actions: new Set([SecurityAction.CLOSE_POINT_IN_TIME]), // this is currently the only security action that does not require authz + }) + ).rejects.toThrowError('No actions specified for authorization check'); }); + }); - const so = { - id: 'some-id', - type: 'so-type', - namespaces: ['space-a', 'space-b', 'space-c'], - attributes: { - test: 'attr', + describe('scecurity actions with no audit action', () => { + // These arguments are used for all unit tests below + const types = new Set(['a', 'b', 'c']); + const spaces = new Set(['x', 'y']); + // Check conflicts is currently the only security action without an audit action + const actions = new Set([SecurityAction.CHECK_CONFLICTS]); + // eslint-disable-next-line @typescript-eslint/no-shadow + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + ], }, - score: 1, - references: [], - }; + } as CheckPrivilegesResponse; - const result = securityExtension.redactNamespaces({ typeMap, savedObject: so }); - expect(result).toEqual( - expect.objectContaining({ namespaces: ['space-a', 'space-b', 'space-c'] }) - ); + const partiallyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const unauthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + test(`does not add audit events when fully authorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + // Disable to test method + // eslint-disable-next-line dot-notation + await securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['y'])], + ]), + auditOptions: { + objects: auditObjects, + }, + }); + + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`does not add audit events when partially authorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + await expect( + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { + objects: auditObjects, + }, + }) + ).rejects.toThrowError('Unable to bulk_create b,c'); + + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`does not add audit events when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); + + const auditObjects = [ + { type: 'a', id: '1' }, + { type: 'b', id: '2' }, + { type: 'c', id: '3' }, + ]; + + await expect( + // Disable to test method + // eslint-disable-next-line dot-notation + securityExtension['authorize']({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['y', 'z'])], + ['b', new Set(['x', 'z'])], + ['c', new Set(['x', 'y'])], + ]), + auditOptions: { + objects: auditObjects, + }, + }) + ).rejects.toThrowError('Unable to bulk_create a,b,c'); + + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + }); +}); + +describe('#redactNamespaces', () => { + test(`filters namespaces that the user doesn't have access to`, () => { + const { securityExtension } = setup(); + + const typeMap = new Map().set('so-type', { + // redact is only concerned with 'login' attribute, not specific action + ['login:']: { authorizedSpaces: ['authorized-space'] }, + }); + + const so = { + id: 'some-id', + type: 'so-type', + namespaces: ['authorized-space', 'unauthorized-space'], + attributes: { + test: 'attr', + }, + score: 1, + references: [], + }; + + const result = securityExtension.redactNamespaces({ typeMap, savedObject: so }); + expect(result).toEqual(expect.objectContaining({ namespaces: ['authorized-space', '?'] })); + }); + + test(`does not redact on isGloballyAuthorized`, () => { + const { securityExtension } = setup(); + + const typeMap = new Map().set('so-type', { + // redact is only concerned with 'login' attribute, not specific action + ['login:']: { isGloballyAuthorized: true }, + }); + + const so = { + id: 'some-id', + type: 'so-type', + namespaces: ['space-a', 'space-b', 'space-c'], + attributes: { + test: 'attr', + }, + score: 1, + references: [], + }; + + const result = securityExtension.redactNamespaces({ typeMap, savedObject: so }); + expect(result).toEqual( + expect.objectContaining({ namespaces: ['space-a', 'space-b', 'space-c'] }) + ); + }); +}); + +describe('#create', () => { + const namespace = 'x'; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + describe(`#authorizeCreate`, () => { + const actionString = 'create'; + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + await expect( + securityExtension.authorizeCreate({ + namespace: '', + object: obj1, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeCreate({ namespace, object: obj1 }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls internal authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeCreate({ + namespace, + object: obj1, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + const expectedActions = new Set([SecurityAction.CREATE]); + const expectedSpaces = new Set([namespace, ...obj1.initialNamespaces!]); + const expectedTypes = new Set([obj1.type]); + const expectedEnforceMap = new Map>(); + expectedEnforceMap.set(obj1.type, new Set([namespace, ...obj1.initialNamespaces!])); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + options: { allowGlobalResource: true }, + auditOptions: { + objects: [obj1], + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: true }, + }); + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj1.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.CREATE, + typesAndSpaces: expectedEnforceMap, + typeMap: new Map().set(obj1.type, { + create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + auditOptions: { objects: [obj1] }, + }); + }); + + test(`returns result when successful`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + const result = await securityExtension.authorizeCreate({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: new Map().set(obj1.type, { + create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeCreate({ + namespace, + object: obj1, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'unknown', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `User is creating ${obj1.type} [id=${obj1.id}]`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeCreate({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to create ${obj1.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeCreate({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to create ${obj1.type}`); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to create a', + }, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'failure', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `Failed attempt to create ${obj1.type} [id=${obj1.id}]`, + }); + }); + }); + + describe(`#authorizeBulkCreate`, () => { + const actionString = 'bulk_create'; + const objects = [obj1, obj2, obj3, obj4]; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + + const expectedActions = new Set([SecurityAction.BULK_CREATE]); + const expectedSpaces = new Set([ + namespace, + ...obj1.initialNamespaces!, + ...obj3.existingNamespaces!, + ...obj4.initialNamespaces!, + ...obj4.existingNamespaces!, + ]); + + const expectedEnforceMap = new Map([ + [obj1.type, new Set([namespace, ...obj1.initialNamespaces!])], + [obj2.type, new Set([namespace])], + [obj3.type, new Set([namespace])], + [obj4.type, new Set([namespace, ...obj4.initialNamespaces!])], + ]); + + const expectedTypeMap = new Map() + .set('a', { + bulk_create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + bulk_create: { authorizedSpaces: ['x', 'bar'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('d', { + bulk_create: { authorizedSpaces: ['x', 'y', 'z'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `objects` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + const emptyObjects: AuthorizeCreateObject[] = []; + + await expect( + securityExtension.authorizeBulkCreate({ + namespace, + objects: emptyObjects, + }) + ).rejects.toThrowError('No objects specified for bulk_create authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkCreate({ + namespace: '', + objects: [obj1, obj2], + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeBulkCreate({ namespace, objects: [obj1] }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls internal authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeBulkCreate({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + options: { allowGlobalResource: true }, + auditOptions: { + objects, + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: true }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${obj1.type}/${actionString}`, + `mock-saved_object:${obj2.type}/${actionString}`, + `mock-saved_object:${obj3.type}/${actionString}`, + `mock-saved_object:${obj4.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.BULK_CREATE, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { objects }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkCreate({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_create', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_create', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkCreate({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set(obj1.type, { + bulk_create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj2.type, { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj3.type, { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj4.type, { + bulk_create: { authorizedSpaces: ['x', 'y'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeBulkCreate({ + namespace, + objects, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'unknown', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User is creating ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkCreate({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_create ${obj2.type},${obj3.type},${obj4.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/create', authorized: false }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkCreate({ + namespace, + objects, + }) + ).rejects.toThrow( + `Unable to bulk_create ${obj1.type},${obj2.type},${obj3.type},${obj4.type}` + ); + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: `Unable to bulk_create ${obj1.type},${obj2.type},${obj3.type},${obj4.type}`, + }, + event: { + action: AuditAction.CREATE, + category: ['database'], + outcome: 'failure', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `Failed attempt to create ${obj.type} [id=${obj.id}]`, + }); + } + }); + }); +}); + +describe('update', () => { + const namespace = 'x'; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + describe(`#authorizeUpdate`, () => { + const actionString = 'update'; + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + await expect( + securityExtension.authorizeUpdate({ + namespace: '', + object: obj2, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeUpdate({ namespace, object: obj1 }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls internal authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeUpdate({ + namespace, + object: obj1, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + const expectedActions = new Set([SecurityAction.UPDATE]); + const expectedSpaces = new Set([namespace, obj1.objectNamespace!]); + const expectedTypes = new Set([obj1.type]); + const expectedEnforceMap = new Map>(); + expectedEnforceMap.set(obj1.type, new Set([namespace, obj1.objectNamespace!])); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + objects: [obj1], + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj1.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.UPDATE, + typesAndSpaces: expectedEnforceMap, + typeMap: new Map().set(obj1.type, { + update: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + auditOptions: { objects: [obj1] }, + }); + }); + + test(`returns result when successful`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + const result = await securityExtension.authorizeUpdate({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: new Map().set(obj1.type, { + update: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeUpdate({ + namespace, + object: obj1, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `User is updating ${obj1.type} [id=${obj1.id}]`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeUpdate({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to update ${obj1.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeUpdate({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to update ${obj1.type}`); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to update a', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `Failed attempt to update ${obj1.type} [id=${obj1.id}]`, + }); + }); + }); + + describe(`#authorizeBulkUpdate`, () => { + const actionString = 'bulk_update'; + const objects = [obj1, obj2, obj3, obj4]; + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_update', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:d/bulk_update', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_update', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + + const expectedActions = new Set([SecurityAction.BULK_UPDATE]); + const expectedSpaces = new Set([ + namespace, + obj1.objectNamespace!, + ...obj3.existingNamespaces!, + obj4.objectNamespace!, + ...obj4.existingNamespaces!, + ]); + + const expectedEnforceMap = new Map([ + [obj1.type, new Set([namespace, obj1.objectNamespace!])], + [obj2.type, new Set([namespace])], + [obj3.type, new Set([namespace])], + [obj4.type, new Set([namespace, obj4.objectNamespace!])], + ]); + + const expectedTypeMap = new Map() + .set('a', { + bulk_update: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_update: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + bulk_update: { authorizedSpaces: ['x', 'bar'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('d', { + bulk_update: { authorizedSpaces: ['x', 'y', 'z'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `objects` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + const emptyObjects: AuthorizeUpdateObject[] = []; + + await expect( + securityExtension.authorizeBulkUpdate({ + namespace, + objects: emptyObjects, + }) + ).rejects.toThrowError('No objects specified for bulk_update authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkUpdate({ + namespace: '', + objects: [obj1, obj2], + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeBulkUpdate({ namespace, objects: [obj1] }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeBulkUpdate({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + objects, + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${obj1.type}/${actionString}`, + `mock-saved_object:${obj2.type}/${actionString}`, + `mock-saved_object:${obj3.type}/${actionString}`, + `mock-saved_object:${obj4.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.BULK_UPDATE, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { objects }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkUpdate({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_update', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_update', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_update', authorized: false }, + { resource: 'y', privilege: 'mock-saved_object:d/bulk_update', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_update', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkUpdate({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set(obj1.type, { + bulk_update: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj2.type, { + bulk_update: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj3.type, { + bulk_update: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj4.type, { + bulk_update: { authorizedSpaces: ['x', 'y'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeBulkUpdate({ + namespace, + objects, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User is updating ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkUpdate({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_update ${obj2.type},${obj3.type},${obj4.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeBulkUpdate({ + namespace, + objects, + }) + ).rejects.toThrow( + `Unable to bulk_update ${obj1.type},${obj2.type},${obj3.type},${obj4.type}` + ); + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: `Unable to bulk_update ${obj1.type},${obj2.type},${obj3.type},${obj4.type}`, + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `Failed attempt to update ${obj.type} [id=${obj.id}]`, + }); + } + }); + }); +}); + +describe('delete', () => { + const namespace = 'x'; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + describe(`#authorizeDelete`, () => { + const actionString = 'delete'; + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + await expect( + securityExtension.authorizeDelete({ + namespace: '', + object: obj1, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeDelete({ namespace, object: obj1 }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls internal authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj3.type, actionString, true); + + await securityExtension.authorizeDelete({ + namespace, + object: obj3, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + const expectedActions = new Set([SecurityAction.DELETE]); + const expectedSpaces = new Set([namespace]); + const expectedTypes = new Set([obj3.type]); + const expectedEnforceMap = new Map>(); + expectedEnforceMap.set(obj3.type, new Set([namespace])); // obj3.existingNamespaces should NOT be included + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + objects: [{ ...obj3, existingNamespaces: [] }], + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj3.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.DELETE, + typesAndSpaces: expectedEnforceMap, + typeMap: new Map().set(obj3.type, { + delete: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + auditOptions: { + objects: [{ ...obj3, existingNamespaces: [] }], + }, + }); + }); + + test(`returns result when successful`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + const result = await securityExtension.authorizeDelete({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: new Map().set(obj1.type, { + delete: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeDelete({ + namespace, + object: obj1, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.DELETE, + category: ['database'], + outcome: 'unknown', + type: ['deletion'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `User is deleting ${obj1.type} [id=${obj1.id}]`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeDelete({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to delete ${obj1.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeDelete({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to delete ${obj1.type}`); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to delete a', + }, + event: { + action: AuditAction.DELETE, + category: ['database'], + outcome: 'failure', + type: ['deletion'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `Failed attempt to delete ${obj1.type} [id=${obj1.id}]`, + }); + }); + }); + + describe(`#authorizeBulkDelete`, () => { + const actionString = 'bulk_delete'; + const objects = [obj1, obj2, obj3, obj4]; + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_delete', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_delete', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_delete', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_delete', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_delete', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_delete', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + + const expectedActions = new Set([SecurityAction.BULK_DELETE]); + const expectedSpaces = new Set([ + namespace, + ...obj3.existingNamespaces!, + ...obj4.existingNamespaces!, + ]); + + const expectedEnforceMap = new Map([ + [obj1.type, new Set([namespace])], + [obj2.type, new Set([namespace])], + [obj3.type, new Set([namespace])], + [obj4.type, new Set([namespace])], + ]); + + const expectedTypeMap = new Map() + .set('a', { + bulk_delete: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_delete: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + bulk_delete: { authorizedSpaces: ['x', 'bar'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('d', { + bulk_delete: { authorizedSpaces: ['x', 'z'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `objects` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + const emptyObjects: AuthorizeObjectWithExistingSpaces[] = []; + + await expect( + securityExtension.authorizeBulkDelete({ + namespace, + objects: emptyObjects, + }) + ).rejects.toThrowError('No objects specified for bulk_delete authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkDelete({ + namespace: '', + objects, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeBulkDelete({ namespace, objects }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeBulkDelete({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + objects, + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${obj1.type}/${actionString}`, + `mock-saved_object:${obj2.type}/${actionString}`, + `mock-saved_object:${obj3.type}/${actionString}`, + `mock-saved_object:${obj4.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.BULK_DELETE, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { objects }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkDelete({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_delete', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_delete', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_delete', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_delete', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_delete', authorized: false }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_delete', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkDelete({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set(obj1.type, { + bulk_delete: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj2.type, { + bulk_delete: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj3.type, { + bulk_delete: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj4.type, { + bulk_delete: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeBulkDelete({ + namespace, + objects, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.DELETE, + category: ['database'], + outcome: 'unknown', + type: ['deletion'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User is deleting ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_delete', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkDelete({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_delete ${obj2.type},${obj3.type},${obj4.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'bulk_delete', false); + + await expect( + securityExtension.authorizeBulkDelete({ + namespace, + objects, + }) + ).rejects.toThrow( + `Unable to bulk_delete ${obj1.type},${obj2.type},${obj3.type},${obj4.type}` + ); + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: `Unable to bulk_delete ${obj1.type},${obj2.type},${obj3.type},${obj4.type}`, + }, + event: { + action: AuditAction.DELETE, + category: ['database'], + outcome: 'failure', + type: ['deletion'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `Failed attempt to delete ${obj.type} [id=${obj.id}]`, + }); + } + }); + }); +}); + +describe('get', () => { + const namespace = 'x'; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + describe(`#authorizeGet`, () => { + const actionString = 'get'; + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + await expect( + securityExtension.authorizeGet({ + namespace: '', + object: obj1, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeGet({ namespace, object: obj1 }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls internal authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj3.type, actionString, true); + + await securityExtension.authorizeGet({ + namespace, + object: obj3, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + const expectedActions = new Set([SecurityAction.GET]); + const expectedSpaces = new Set([namespace, ...obj3.existingNamespaces]); + const expectedTypes = new Set([obj3.type]); + const expectedEnforceMap = new Map>(); + expectedEnforceMap.set(obj3.type, new Set([namespace])); // obj3.existingNamespaces should NOT be included + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + bypass: 'never', + objects: [obj3], + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj3.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.GET, + typesAndSpaces: expectedEnforceMap, + typeMap: new Map().set(obj3.type, { + get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + auditOptions: { + bypass: 'never', + objects: [obj3], + }, + }); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/get', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + // setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + const result = await securityExtension.authorizeGet({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map().set(obj1.type, { + get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + const result = await securityExtension.authorizeGet({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: new Map().set(obj1.type, { + get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeGet({ + namespace, + object: obj1, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.GET, + category: ['database'], + outcome: 'unknown', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `User is accessing ${obj1.type} [id=${obj1.id}]`, + }); + }); + + test(`does not add an audit event when successful if object is not found`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, true); + + await securityExtension.authorizeGet({ + namespace, + object: obj1, + objectNotFound: true, + }); + + expect(auditHelperSpy).not.toHaveBeenCalled(); + expect(addAuditEventSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeGet({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to get ${obj1.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeGet({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to get ${obj1.type}`); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to get a', + }, + event: { + action: AuditAction.GET, + category: ['database'], + outcome: 'failure', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `Failed attempt to access ${obj1.type} [id=${obj1.id}]`, + }); + }); + + test(`adds an audit event when unauthorized even if object is not found`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, actionString, false); + + await expect( + securityExtension.authorizeGet({ + namespace, + object: obj1, + objectNotFound: true, + }) + ).rejects.toThrow(`Unable to get ${obj1.type}`); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: 'Unable to get a', + }, + event: { + action: AuditAction.GET, + category: ['database'], + outcome: 'failure', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `Failed attempt to access ${obj1.type} [id=${obj1.id}]`, + }); + }); + }); + + describe(`#authorizeBulkGet`, () => { + const actionString = 'bulk_get'; + + const objA = { + ...obj1, + objectNamespaces: ['y', namespace], // include multiple spaces + }; + const objB = { ...obj2, objectNamespaces: ['z'], existingNamespaces: ['y'] }; // use a different namespace than the options namespace; + + const objects = [objA, objB]; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + const expectedActions = new Set([SecurityAction.BULK_GET]); + const expectedSpaces = new Set([namespace, ...objA.objectNamespaces, ...objB.objectNamespaces]); + + const expectedEnforceMap = new Map([ + [obj1.type, new Set([namespace, ...objA.objectNamespaces])], + [obj2.type, new Set([namespace, ...objB.objectNamespaces])], + ]); + + const expectedTypeMap = new Map() + .set('a', { + bulk_get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_get: { + authorizedSpaces: ['x', 'y', 'z'], + }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `objects` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + const emptyObjects: AuthorizeBulkGetObject[] = []; + + await expect( + securityExtension.authorizeBulkGet({ + namespace, + objects: emptyObjects, + }) + ).rejects.toThrowError('No objects specified for bulk_get authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkGet({ + namespace: '', + objects, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect(securityExtension.authorizeBulkGet({ namespace, objects })).rejects.toThrowError( + 'Oh no!' + ); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeBulkGet({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { bypass: 'on_success', objects, useSuccessOutcome: true }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${objA.type}/${actionString}`, + `mock-saved_object:${objB.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.BULK_GET, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { bypass: 'on_success', objects, useSuccessOutcome: true }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkGet({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_get', authorized: false }, + { resource: 'z', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeBulkGet({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set(objA.type, { + bulk_get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(objB.type, { + bulk_get: { authorizedSpaces: ['x', 'z'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeBulkGet({ + namespace, + objects, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.GET, + category: ['database'], + outcome: 'success', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User has accessed ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`does not add an audit event for objects with an error when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeBulkGet({ + namespace, + objects: [objA, { ...objB, error: true }], + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.GET, + category: ['database'], + outcome: 'success', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: objA.type, id: objA.id }, + }, + message: `User has accessed ${objA.type} [id=${objA.id}]`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:b/bulk_get', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:b/bulk_get', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeBulkGet({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_get ${objB.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'bulk_delete', false); + + await expect( + securityExtension.authorizeBulkGet({ + namespace, + objects: [objA, { ...objB, error: true }], // setting error here to test the case that even err'd objects get an audit on failure + }) + ).rejects.toThrow(`Unable to bulk_get ${obj1.type},${obj2.type}`); + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: `Unable to bulk_get ${objA.type},${objB.type}`, + }, + event: { + action: AuditAction.GET, + category: ['database'], + outcome: 'failure', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `Failed attempt to access ${obj.type} [id=${obj.id}]`, + }); + } + }); + }); +}); + +describe(`#authorizeCheckConflicts`, () => { + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + const namespace = 'x'; + const actionString = 'bulk_create'; + const objects = [obj1, obj2, obj3, obj4]; + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + + const expectedActions = new Set([SecurityAction.CHECK_CONFLICTS]); + const expectedSpaces = new Set([namespace]); + + const expectedEnforceMap = new Map([ + [obj1.type, new Set([namespace])], + [obj2.type, new Set([namespace])], + [obj3.type, new Set([namespace])], + [obj4.type, new Set([namespace])], + ]); + + const expectedTypeMap = new Map() + .set('a', { + bulk_create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + bulk_create: { authorizedSpaces: ['x', 'bar'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('d', { + bulk_create: { authorizedSpaces: ['x', 'z'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `objects` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + const emptyObjects: AuthorizeObjectWithExistingSpaces[] = []; + + await expect( + securityExtension.authorizeCheckConflicts({ + namespace, + objects: emptyObjects, + }) + ).rejects.toThrowError('No objects specified for bulk_create authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeCheckConflicts({ + namespace: '', + objects, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeCheckConflicts({ namespace, objects }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeCheckConflicts({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { bypass: 'always' }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${obj1.type}/${actionString}`, + `mock-saved_object:${obj2.type}/${actionString}`, + `mock-saved_object:${obj3.type}/${actionString}`, + `mock-saved_object:${obj4.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.CHECK_CONFLICTS, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { bypass: 'always' }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeCheckConflicts({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:b/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:c/bulk_create', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:d/bulk_create', authorized: true }, + { resource: 'bar', privilege: 'mock-saved_object:c/bulk_create', authorized: false }, + { resource: 'z', privilege: 'mock-saved_object:d/bulk_create', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeCheckConflicts({ + namespace, + objects, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set(obj1.type, { + bulk_create: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj2.type, { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj3.type, { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(obj4.type, { + bulk_create: { authorizedSpaces: ['x'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`does not add any audit events when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeCheckConflicts({ + namespace, + objects, + }); + + expect(auditHelperSpy).not.toHaveBeenCalled(); + expect(addAuditEventSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_create', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeCheckConflicts({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_create ${obj2.type},${obj3.type},${obj4.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`does not add any audit events when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'bulk_create', false); + + await expect( + securityExtension.authorizeCheckConflicts({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_create ${obj1.type},${obj2.type},${obj3.type},${obj4.type}`); + expect(auditHelperSpy).not.toHaveBeenCalled(); + expect(addAuditEventSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); + }); +}); + +describe(`#authorizeRemoveReferences`, () => { + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + const namespace = 'x'; + const actionString = 'delete'; + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/delete', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set([obj1.type]); + const expectedSpaces = new Set([namespace]); + const expectedEnforceMap = new Map([[obj1.type, new Set([namespace])]]); + + const expectedTypeMap = new Map().set('a', { + delete: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeRemoveReferences({ + namespace: '', + object: obj1, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeRemoveReferences({ namespace, object: obj1 }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeRemoveReferences({ + namespace, + object: obj1, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: new Set([SecurityAction.REMOVE_REFERENCES]), + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + objects: [obj1], + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj1.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.REMOVE_REFERENCES, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { objects: [obj1] }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeRemoveReferences({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/delete', authorized: true }, + { privilege: 'login:', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeRemoveReferences({ + namespace, + object: obj1, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map().set(obj1.type, { + delete: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeRemoveReferences({ + namespace, + object: obj1, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.REMOVE_REFERENCES, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `User is removing references to ${obj1.type} [id=${obj1.id}]`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'delete', false); + + await expect( + securityExtension.authorizeRemoveReferences({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to delete ${obj1.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'delete', false); + + await expect( + securityExtension.authorizeRemoveReferences({ + namespace, + object: obj1, + }) + ).rejects.toThrow(`Unable to delete ${obj1.type}`); + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { code: 'Error', message: `Unable to delete ${obj1.type}` }, + event: { + action: AuditAction.REMOVE_REFERENCES, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj1.type, id: obj1.id }, + }, + message: `Failed attempt to remove references to ${obj1.type} [id=${obj1.id}]`, + }); + }); +}); + +describe(`#authorizeOpenPointInTime`, () => { + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + const namespace = 'x'; + const actionString = 'open_point_in_time'; + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/open_point_in_time', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set([obj1.type]); + const expectedSpaces = new Set([namespace]); + const expectedTypeMap = new Map().set('a', { + open_point_in_time: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `namespaces` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeOpenPointInTime({ + namespaces: new Set(), + types: expectedTypes, + }) + ).rejects.toThrowError('No spaces specified for authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `types` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: new Set(), + }) + ).rejects.toThrowError('No types specified for authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and no enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: new Set([SecurityAction.OPEN_POINT_IN_TIME]), + types: expectedTypes, + spaces: expectedSpaces, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj1.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/open_point_in_time', authorized: true }, + { privilege: 'login:', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map().set(obj1.type, { + open_point_in_time: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`adds audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + + expect(auditHelperSpy).not.toHaveBeenCalled(); // The helper is not called, as open PIT calls the addAudit method directly + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.OPEN_POINT_IN_TIME, + category: ['database'], + outcome: 'unknown', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `User is opening point-in-time saved objects`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'delete', false); + + await expect( + securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }) + ).rejects.toThrow(`unauthorized`); + }); + + test(`adds audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'open_point_in_time', false); + + await expect( + securityExtension.authorizeOpenPointInTime({ + namespaces: expectedSpaces, + types: expectedTypes, + }) + ).rejects.toThrow(`unauthorized`); + expect(auditHelperSpy).not.toHaveBeenCalled(); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { code: 'Error', message: `User is unauthorized for any requested types/spaces` }, + event: { + action: AuditAction.OPEN_POINT_IN_TIME, + category: ['database'], + outcome: 'failure', + type: ['creation'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `Failed attempt to open point-in-time saved objects`, + }); + }); +}); + +describe(`#auditClosePointInTime`, () => { + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + test(`adds audit event`, async () => { + const { securityExtension, auditLogger } = setup(); + securityExtension.auditClosePointInTime(); + + expect(auditHelperSpy).not.toHaveBeenCalled(); // The helper is not called, as close PIT calls the addAudit method directly + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.CLOSE_POINT_IN_TIME, + category: ['database'], + outcome: 'unknown', + type: ['deletion'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `User is closing point-in-time saved objects`, + }); + }); +}); + +describe('#authorizeAndRedactMultiNamespaceReferences', () => { + const namespace = 'x'; + + const refObj1 = { + id: 'id-1', + inboundReferences: [], + originId: undefined, + spaces: ['default', 'space-1'], + spacesWithMatchingAliases: ['space-2', 'space-3', 'space-4'], + spacesWithMatchingOrigins: undefined, + type: 'a', + }; + const refObj2 = { + id: 'id-2', + inboundReferences: [], + originId: undefined, + spaces: ['default', 'space-2'], + spacesWithMatchingAliases: undefined, + spacesWithMatchingOrigins: ['space-1', 'space-3'], + type: 'b', + }; + const refObj3 = { + id: 'id-3', + inboundReferences: [{ id: 'id-1', name: 'ref-name', type: 'a' }], + originId: undefined, + spaces: ['default', 'space-1', 'space-4'], + spacesWithMatchingAliases: undefined, + spacesWithMatchingOrigins: undefined, + type: 'c', + }; + const objects = [refObj1, refObj2, refObj3]; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + const expectedSpaces = new Set([ + namespace, + ...refObj1.spaces, + ...refObj1.spacesWithMatchingAliases, + ...refObj2.spaces, + ...refObj2.spacesWithMatchingOrigins, + ...refObj3.spaces, + ]); + + const expectedEnforceMap = new Map([ + [refObj1.type, new Set([namespace])], + [refObj2.type, new Set([namespace])], + [refObj3.type, new Set([namespace])], + ]); + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + // NOTE: This comment should inform our test cases... + // Now, filter/redact the results. Most SOR functions just redact the `namespaces` field from each returned object. However, this function + // will actually filter the returned object graph itself. + // This is done in two steps: (1) objects which the user can't access *in this space* are filtered from the graph, and the + // graph is rearranged to avoid leaking information. (2) any spaces that the user can't access are redacted from each individual object. + // After we finish filtering, we can write audit events for each object that is going to be returned to the user. + + describe('purpose `collectMultiNamespaceReferences`', () => { + const actionString = 'bulk_get'; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + { + resource: 'x', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'space-2', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'space-3', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'x', + privilege: 'mock-saved_object:c/bulk_get', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'mock-saved_object:c/bulk_get', + authorized: true, + }, + { + resource: 'space-4', + privilege: 'mock-saved_object:c/bulk_get', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const partiallyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + // { privilege: 'login:', authorized: true }, + { + resource: 'x', + privilege: 'login:', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'login:', + authorized: true, + }, + { + resource: 'space-2', + privilege: 'login:', + authorized: true, + }, + { + resource: 'x', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'space-2', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'x', + privilege: 'mock-saved_object:c/bulk_get', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'mock-saved_object:c/bulk_get', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const redactedObjects = [ + { + ...refObj1, + spaces: ['space-1', '?'], + spacesWithMatchingAliases: ['space-2', '?', '?'], + }, + { ...refObj2, spaces: ['space-2', '?'], spacesWithMatchingOrigins: ['space-1', '?'] }, + { ...refObj3, spaces: ['space-1', '?', '?'] }, + ]; + const expectedActions = new Set([SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES]); + + const fullyAuthorizedTypeMap = new Map() + .set('a', { + bulk_get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_get: { authorizedSpaces: ['x', 'space-1', 'space-2', 'space-3'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + bulk_get: { authorizedSpaces: ['x', 'space-1', 'space-4'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + const partiallyAuthorizedTypeMap = new Map() + .set('a', { + bulk_get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { authorizedSpaces: ['x', 'space-1', 'space-2'] }, + }) + .set('b', { + bulk_get: { authorizedSpaces: ['x', 'space-1', 'space-2'] }, + ['login:']: { authorizedSpaces: ['x', 'space-1', 'space-2'] }, + }) + .set('c', { + bulk_get: { authorizedSpaces: ['x', 'space-1'] }, + ['login:']: { authorizedSpaces: ['x', 'space-1', 'space-2'] }, + }); + + test('returns empty array when no objects are provided`', async () => { + const { securityExtension } = setup(); + const emptyObjects: SavedObjectReferenceWithContext[] = []; + + const result = await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects: emptyObjects, + }); + expect(result).toEqual(emptyObjects); + }); + + test('throws an error when `namespace` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + await expect( + securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace: '', + objects: [refObj1, refObj2], + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + bypass: 'on_success', + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${refObj1.type}/${actionString}`, + `mock-saved_object:${refObj2.type}/${actionString}`, + `mock-saved_object:${refObj3.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(4); + // Called once with complete enforce map (bypasses audit on success) + expect(enforceAuthorizationSpy).toHaveBeenNthCalledWith(1, { + action: SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES, + typesAndSpaces: expectedEnforceMap, + typeMap: partiallyAuthorizedTypeMap, + auditOptions: { bypass: 'on_success' }, + }); + // Called once per object afterward + let i = 2; + for (const obj of objects) { + expect(enforceAuthorizationSpy).toHaveBeenNthCalledWith(i++, { + action: SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES, + typesAndSpaces: new Map([[obj.type, new Set([namespace])]]), + typeMap: partiallyAuthorizedTypeMap, + auditOptions: { bypass: 'always' }, + }); + } + }); + + test(`returns unredacted result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + const result = await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(4); + expect(enforceAuthorizationSpy).toHaveBeenNthCalledWith(1, { + action: SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES, + typesAndSpaces: expectedEnforceMap, + typeMap: fullyAuthorizedTypeMap, + auditOptions: { bypass: 'on_success' }, + }); + let i = 2; + for (const obj of objects) { + expect(enforceAuthorizationSpy).toHaveBeenNthCalledWith(i++, { + action: SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES, + typesAndSpaces: new Map([[obj.type, new Set([namespace])]]), + typeMap: fullyAuthorizedTypeMap, + auditOptions: { bypass: 'always' }, + }); + } + expect(result).toEqual(objects); + }); + + test(`returns redacted result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + const result = await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }); + expect(redactNamespacesSpy).toHaveBeenCalledTimes(5); // spaces x3, spaces of aliases x1, spaces of origins x1 + expect(result).toEqual(redactedObjects); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }); + + // the audit helper is not called during this action + // the addAuditEvent method is called directly + expect(auditHelperSpy).not.toHaveBeenCalled(); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + let i = 1; + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, + category: ['database'], + outcome: 'success', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User has collected references and spaces of ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_get ${refObj2.type},${refObj3.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds a single audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [{ privilege: 'login:', authorized: true }], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_get ${refObj1.type},${refObj2.type},${refObj3.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: `Unable to bulk_get ${refObj1.type},${refObj2.type},${refObj3.type}`, + }, + event: { + action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, + category: ['database'], + outcome: 'failure', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `Failed attempt to collect references and spaces of saved objects`, + }); + }); + }); + + describe('purpose `updateObjectsSpaces`', () => { + const actionString = 'share_to_space'; + const purpose = 'updateObjectsSpaces'; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: true }, + { privilege: 'login:', authorized: true }, + { + resource: 'x', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'space-2', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'space-3', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'x', + privilege: 'mock-saved_object:c/share_to_space', + authorized: true, + }, + { + resource: 'space-1', + privilege: 'mock-saved_object:c/share_to_space', + authorized: true, + }, + { + resource: 'space-4', + privilege: 'mock-saved_object:c/share_to_space', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedActions = new Set([ + SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES_UPDATE_SPACES, + ]); + + const fullyAuthorizedTypeMap = new Map() + .set('a', { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + share_to_space: { authorizedSpaces: ['x', 'space-1', 'space-2', 'space-3'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + share_to_space: { authorizedSpaces: ['x', 'space-1', 'space-4'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeAndRedactMultiNamespaceReferences({ + namespace, + objects, + options: { purpose }, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + bypass: 'on_success', + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${refObj1.type}/${actionString}`, + `mock-saved_object:${refObj2.type}/${actionString}`, + `mock-saved_object:${refObj3.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(4); + // Called once with complete enforce map (bypasses audit on success) + expect(enforceAuthorizationSpy).toHaveBeenNthCalledWith(1, { + action: SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES_UPDATE_SPACES, + typesAndSpaces: expectedEnforceMap, + typeMap: fullyAuthorizedTypeMap, + auditOptions: { bypass: 'on_success' }, + }); + // Called once per object afterward + let i = 2; + for (const obj of objects) { + expect(enforceAuthorizationSpy).toHaveBeenNthCalledWith(i++, { + action: SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES_UPDATE_SPACES, + typesAndSpaces: new Map([[obj.type, new Set([namespace])]]), + typeMap: fullyAuthorizedTypeMap, + auditOptions: { bypass: 'always' }, + }); + } + }); + }); +}); + +describe('#authorizeAndRedactInternalBulkResolve', () => { + const namespace = 'x'; + + const resolveObj1: SavedObjectsResolveResponse = { + outcome: 'exactMatch', + saved_object: { + attributes: {}, + id: '13', + namespaces: ['foo'], + references: [], + type: 'a', + }, + }; + const resolveObj2: SavedObjectsResolveResponse = { + outcome: 'exactMatch', + saved_object: { + attributes: {}, + id: '14', + namespaces: ['bar'], + references: [], + type: 'b', + }, + }; + + const objects = [resolveObj1, resolveObj2]; + + const expectedTypes = new Set(objects.map((obj) => obj.saved_object.type)); + const expectedSpaces = new Set(['foo', 'bar', namespace]); + + const expectedEnforceMap = new Map([ + [resolveObj1.saved_object.type, new Set([namespace])], + [resolveObj2.saved_object.type, new Set([namespace])], + ]); + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + const actionString = 'bulk_get'; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + { + resource: 'x', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'bar', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const partiallyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { + resource: 'x', + privilege: 'login:', + authorized: true, + }, + { + resource: 'foo', + privilege: 'login:', + authorized: true, + }, + { + resource: 'x', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + { + resource: 'bar', + privilege: 'mock-saved_object:b/bulk_get', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const redactedObjects = [ + resolveObj1, + { ...resolveObj2, saved_object: { ...resolveObj2.saved_object, namespaces: ['?'] } }, + ]; + const expectedActions = new Set([SecurityAction.INTERNAL_BULK_RESOLVE]); + + const fullyAuthorizedTypeMap = new Map() + .set('a', { + bulk_get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_get: { authorizedSpaces: ['x', 'bar'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + const partiallyAuthorizedTypeMap = new Map() + .set('a', { + bulk_get: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { authorizedSpaces: ['x', 'foo'] }, + }) + .set('b', { + bulk_get: { authorizedSpaces: ['x', 'bar'] }, + ['login:']: { authorizedSpaces: ['x', 'foo'] }, + }); + + test('returns empty array when no objects are provided`', async () => { + const { securityExtension } = setup(); + const emptyObjects: Array | BulkResolveError> = []; + + const result = await securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects: emptyObjects, + }); + expect(result).toEqual(emptyObjects); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { + useSuccessOutcome: true, + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${resolveObj1.saved_object.type}/${actionString}`, + `mock-saved_object:${resolveObj2.saved_object.type}/${actionString}`, + 'login:', + ], + expect.arrayContaining([...expectedSpaces]) + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.INTERNAL_BULK_RESOLVE, + typesAndSpaces: expectedEnforceMap, + typeMap: partiallyAuthorizedTypeMap, + auditOptions: { useSuccessOutcome: true }, + }); + }); + + test(`returns unredacted result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + const result = await securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.INTERNAL_BULK_RESOLVE, + typesAndSpaces: expectedEnforceMap, + typeMap: fullyAuthorizedTypeMap, + auditOptions: { useSuccessOutcome: true }, + }); + expect(result).toEqual(objects); + }); + + test(`returns redacted result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + const result = await securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }); + expect(redactNamespacesSpy).toHaveBeenCalledTimes(2); + expect(result).toEqual(redactedObjects); + }); + + test(`adds an audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(auditHelperSpy).toHaveBeenCalledWith({ + action: 'saved_object_resolve', + objects: undefined, + useSuccessOutcome: true, + }); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledWith({ + action: 'saved_object_resolve', + addToSpaces: undefined, + deleteFromSpaces: undefined, + error: undefined, + outcome: 'success', + }); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.RESOLVE, + category: ['database'], + outcome: 'success', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `User has resolved saved objects`, + }); + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_get', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }) + ).rejects.toThrow(`Unable to bulk_get ${resolveObj2.saved_object.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [{ privilege: 'login:', authorized: true }], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeAndRedactInternalBulkResolve({ + namespace, + objects, + }) + ).rejects.toThrow( + `Unable to bulk_get ${resolveObj1.saved_object.type},${resolveObj2.saved_object.type}` + ); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { + code: 'Error', + message: `Unable to bulk_get ${resolveObj1.saved_object.type},${resolveObj2.saved_object.type}`, + }, + event: { + action: AuditAction.RESOLVE, + category: ['database'], + outcome: 'failure', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `Failed attempt to resolve saved objects`, + }); + }); +}); + +describe('#authorizeUpdateSpaces', () => { + const namespace = 'x'; + + const multiSpaceObj1 = { + type: 'a', + id: '1', + existingNamespaces: ['add_space_1', 'add_space_2'], + }; + const multiSpaceObj2 = { + type: 'b', + id: '2', + existingNamespaces: ['*'], + }; + const multiSpaceObj3 = { + type: 'a', + id: '3', + existingNamespaces: ['rem_space_2', 'add_space_2'], + }; + const multiSpaceObj4 = { + type: 'b', + id: '4', + existingNamespaces: ['foo', 'add_space_1'], + }; + + const objects = [multiSpaceObj1, multiSpaceObj2, multiSpaceObj3, multiSpaceObj4]; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + const actionString = 'share_to_space'; + + const spacesToAdd = ['add_space_1', 'add_space_2']; + const spacesToRemove = ['rem_space_1', 'rem_space_2']; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: true }, + { privilege: 'login:', authorized: true }, + { + resource: 'x', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'add_space_1', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'add_space_2', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'rem_space_1', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'rem_space_2', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(objects.map((obj) => obj.type)); + + const expectedActions = new Set([SecurityAction.UPDATE_OBJECTS_SPACES]); + const expectedSpaces = new Set([...spacesToAdd, ...spacesToRemove, namespace, 'foo']); + + const expectedEnforceMap = new Map([ + [multiSpaceObj1.type, new Set([...spacesToAdd, ...spacesToRemove, namespace])], + [multiSpaceObj2.type, new Set([...spacesToAdd, ...spacesToRemove, namespace])], + ]); + + const expectedTypeMap = new Map() + .set('a', { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + share_to_space: { authorizedSpaces: ['x', ...spacesToAdd, ...spacesToRemove] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `objects` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + const emptyObjects: AuthorizeObjectWithExistingSpaces[] = []; + + await expect( + securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects: emptyObjects, + }) + ).rejects.toThrowError('No objects specified for share_to_space authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `namespace` is an empty string', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeUpdateSpaces({ + namespace: '', + spacesToAdd, + spacesToRemove, + objects, + }) + ).rejects.toThrowError('namespace cannot be an empty string'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeUpdateSpaces({ namespace, spacesToAdd, spacesToRemove, objects }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + options: { allowGlobalResource: true }, + auditOptions: { + objects, + addToSpaces: spacesToAdd, + deleteFromSpaces: spacesToRemove, + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: true }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${multiSpaceObj1.type}/${actionString}`, + `mock-saved_object:${multiSpaceObj2.type}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.UPDATE_OBJECTS_SPACES, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { objects, addToSpaces: spacesToAdd, deleteFromSpaces: spacesToRemove }, + }); + }); + + test(`calls authorize methods with '*' when spacesToAdd includes '*'`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: true }, + { privilege: 'mock-saved_object:b/share_to_space', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd: ['*'], + spacesToRemove, + objects, + }); + + const spaces = new Set(['*', ...spacesToRemove, 'x', 'add_space_1', 'add_space_2', 'foo']); + const enforceMap = new Map([ + [multiSpaceObj1.type, new Set(['*', ...spacesToRemove, namespace])], + [multiSpaceObj2.type, new Set(['*', ...spacesToRemove, namespace])], + ]); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces, + enforceMap, + options: { allowGlobalResource: true }, + auditOptions: { + objects, + addToSpaces: ['*'], + deleteFromSpaces: spacesToRemove, + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces, + types: expectedTypes, + options: { allowGlobalResource: true }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${multiSpaceObj1.type}/${actionString}`, + `mock-saved_object:${multiSpaceObj2.type}/${actionString}`, + 'login:', + ], + [...spaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.UPDATE_OBJECTS_SPACES, + typesAndSpaces: enforceMap, + typeMap: new Map() + .set('a', { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + auditOptions: { objects, addToSpaces: ['*'], deleteFromSpaces: spacesToRemove }, + }); + }); + + test(`calls authorize methods with '*' when spacesToRemove includes '*'`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: true }, + { privilege: 'mock-saved_object:b/share_to_space', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove: ['*'], + objects, + }); + + const spaces = new Set([...spacesToAdd, '*', 'x', 'rem_space_2', 'foo']); + const enforceMap = new Map([ + [multiSpaceObj1.type, new Set([...spacesToAdd, '*', namespace])], + [multiSpaceObj2.type, new Set([...spacesToAdd, '*', namespace])], + ]); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces, + enforceMap, + options: { allowGlobalResource: true }, + auditOptions: { + objects, + addToSpaces: spacesToAdd, + deleteFromSpaces: ['*'], + }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces, + types: expectedTypes, + options: { allowGlobalResource: true }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${multiSpaceObj1.type}/${actionString}`, + `mock-saved_object:${multiSpaceObj2.type}/${actionString}`, + 'login:', + ], + [...spaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.UPDATE_OBJECTS_SPACES, + typesAndSpaces: enforceMap, + typeMap: new Map() + .set('a', { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + auditOptions: { objects, addToSpaces: spacesToAdd, deleteFromSpaces: ['*'] }, + }); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: true }, + { privilege: 'login:', authorized: true }, + { + resource: 'x', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'foo', + privilege: 'mock-saved_object:b/share_to_space', + authorized: false, + }, + { + resource: 'add_space_1', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'add_space_2', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'rem_space_1', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + { + resource: 'rem_space_2', + privilege: 'mock-saved_object:b/share_to_space', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set(multiSpaceObj1.type, { + share_to_space: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set(multiSpaceObj2.type, { + share_to_space: { authorizedSpaces: ['x', ...spacesToAdd, ...spacesToRemove] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects, + }); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + let i = 1; + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.UPDATE_OBJECTS_SPACES, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User is updating spaces of ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects, + }) + ).rejects.toThrow(`Unable to share_to_space ${multiSpaceObj2.type}`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: false }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeUpdateSpaces({ + namespace, + spacesToAdd, + spacesToRemove, + objects, + }) + ).rejects.toThrow(`Unable to share_to_space ${multiSpaceObj1.type},${multiSpaceObj2.type}`); + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + let i = 1; + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: { + code: 'Error', + message: `Unable to share_to_space ${multiSpaceObj1.type},${multiSpaceObj2.type}`, + }, + event: { + action: AuditAction.UPDATE_OBJECTS_SPACES, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: spacesToAdd, + delete_from_spaces: spacesToRemove, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `Failed attempt to update spaces of ${obj.type} [id=${obj.id}]`, + }); + } + }); +}); + +describe('find', () => { + const namespace = 'x'; + const actionString = 'find'; + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/find', authorized: true }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set([obj1.type]); + const expectedSpaces = new Set([namespace]); + const expectedTypeMap = new Map().set('a', { + find: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + describe(`#authorizeFind`, () => { + test('throws an error when `namespaces` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeFind({ + namespaces: new Set(), + types: expectedTypes, + }) + ).rejects.toThrowError('No spaces specified for authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `types` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: new Set(), + }) + ).rejects.toThrowError('No types specified for authorization'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeFind({ namespaces: expectedSpaces, types: expectedTypes }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and no enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: new Set([SecurityAction.FIND]), + types: expectedTypes, + spaces: expectedSpaces, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj1.type}/${actionString}`, 'login:'], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: expectedTypeMap, + }); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/find', authorized: true }, + { privilege: 'login:', authorized: false }, + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map().set(obj1.type, { + find: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`does not add audit event when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + + expect(auditHelperSpy).not.toHaveBeenCalled(); // The helper is not called, as authorizeFind calls the addAudit method directly + expect(addAuditEventSpy).not.toHaveBeenCalled(); + expect(auditLogger.log).not.toHaveBeenCalled(); + }); + + test(`returns result when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'find', false); + + const result = await securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + expect(result).toEqual({ + status: 'unauthorized', + typeMap: new Map().set(obj1.type, { + 'login:': { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test(`adds audit event when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'find', false); + + await securityExtension.authorizeFind({ + namespaces: expectedSpaces, + types: expectedTypes, + }); + expect(auditHelperSpy).not.toHaveBeenCalled(); + expect(addAuditEventSpy).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledTimes(1); + expect(auditLogger.log).toHaveBeenCalledWith({ + error: { code: 'Error', message: `User is unauthorized for any requested types/spaces` }, + event: { + action: AuditAction.FIND, + category: ['database'], + outcome: 'failure', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: undefined, + }, + message: `Failed attempt to access saved objects`, + }); + }); + }); + + describe(`#getFindRedactTypeMap`, () => { + const existingNamespaces = [namespace, 'y', 'z', 'foo']; + const objects = [ + { type: obj1.type, id: obj1.id, existingNamespaces: [namespace, 'y'] }, + { type: obj1.type, id: obj2.id, existingNamespaces: [namespace, 'z'] }, + { type: obj1.type, id: obj3.id, existingNamespaces: [namespace, 'foo'] }, + ]; + + const partiallyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'login:', authorized: true }, + { resource: 'x', privilege: 'mock-saved_object:a/find', authorized: true }, + { resource: 'y', privilege: 'mock-saved_object:a/find', authorized: false }, + { resource: 'z', privilege: 'mock-saved_object:a/find', authorized: true }, + { resource: 'foo', privilege: 'mock-saved_object:a/find', authorized: false }, + ], + }, + } as CheckPrivilegesResponse; + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects: [{ type: obj1.type, id: obj1.id, existingNamespaces }], + }) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and no enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects, + }); + + const updateExpectedSpaces = new Set(existingNamespaces); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: new Set([SecurityAction.FIND]), + types: expectedTypes, + spaces: updateExpectedSpaces, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: updateExpectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [`mock-saved_object:${obj1.type}/${actionString}`, 'login:'], + [...updateExpectedSpaces] + ); + + expect(enforceAuthorizationSpy).not.toHaveBeenCalled(); + }); + + test('returns undefined if there are no additional spaces', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects: [{ type: obj1.type, id: obj1.id, existingNamespaces: [namespace] }], + }); + expect(result).toBeUndefined(); + }); + + test(`returns result when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects, + }); + + expect(result).toEqual(expectedTypeMap); + }); + + test(`returns result when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects, + }); + + expect(result).toEqual( + new Map().set('a', { + find: { authorizedSpaces: ['x', 'z'] }, + 'login:': { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + ); + }); + + test(`returns result when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'find', false); + + const result = await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects, + }); + + expect(result).toEqual( + new Map().set(obj1.type, { + 'login:': { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + ); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'find', false); + + await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects, + }); + + expect(auditHelperSpy).not.toHaveBeenCalled(); // The helper is not called, as getFindRedactTypeMap calls the addAudit method directly + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.FIND, + category: ['database'], + outcome: 'success', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User has accessed ${obj.type} [id=${obj.id}]`, + }); + } + }); + + test(`adds an audit event per object when authorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, obj1.type, 'find', true); + + await securityExtension.getFindRedactTypeMap({ + previouslyCheckedNamespaces: expectedSpaces, + objects, + }); + + expect(auditHelperSpy).not.toHaveBeenCalled(); // The helper is not called, as getFindRedactTypeMap calls the addAudit method directly + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length); + for (const obj of objects) { + expect(auditLogger.log).toHaveBeenCalledWith({ + error: undefined, + event: { + action: AuditAction.FIND, + category: ['database'], + outcome: 'success', + type: ['access'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: obj.type, id: obj.id }, + }, + message: `User has accessed ${obj.type} [id=${obj.id}]`, + }); + } + }); + }); +}); + +describe('#authorizeDisableLegacyUrlAliases', () => { + const legacyUrlAlias1: LegacyUrlAliasTarget = { + targetType: 'a', + targetSpace: 'x', + sourceId: 'id1', + }; + const legacyUrlAlias2: LegacyUrlAliasTarget = { + targetType: 'b', + targetSpace: 'y', + sourceId: 'id2', + }; + const legacyUrlAlias3: LegacyUrlAliasTarget = { + targetType: 'c', + targetSpace: 'z', + sourceId: 'id3', + }; + const legacyUrlAliases: LegacyUrlAliasTarget[] = [ + legacyUrlAlias1, + legacyUrlAlias2, + legacyUrlAlias3, + ]; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + const actionString = 'bulk_update'; + + const fullyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: true, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { privilege: 'login:', authorized: true }, + { + resource: 'y', + privilege: 'mock-saved_object:b/bulk_update', + authorized: true, + }, + { + resource: 'z', + privilege: 'mock-saved_object:c/bulk_update', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse; + + const expectedTypes = new Set(legacyUrlAliases.map((alias) => alias.targetType)); + const expectedActions = new Set([SecurityAction.BULK_UPDATE]); + const expectedSpaces = new Set(legacyUrlAliases.map((alias) => alias.targetSpace)); + + const expectedEnforceMap = new Map([ + [legacyUrlAlias1.targetType, new Set([legacyUrlAlias1.targetSpace])], + [legacyUrlAlias2.targetType, new Set([legacyUrlAlias2.targetSpace])], + [legacyUrlAlias3.targetType, new Set([legacyUrlAlias3.targetSpace])], + ]); + + const auditObjects = legacyUrlAliases.map((alias) => { + return { + type: 'legacy-url-alias', + id: `${alias.targetSpace}:${alias.targetType}:${alias.sourceId}`, + }; + }); + + const expectedTypeMap = new Map() + .set('a', { + bulk_update: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('b', { + bulk_update: { authorizedSpaces: ['y'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + bulk_update: { authorizedSpaces: ['z'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }); + + test('throws an error when `aliases` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + await expect(securityExtension.authorizeDisableLegacyUrlAliases([])).rejects.toThrowError( + 'No aliases specified for authorization' + ); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when checkAuthorization fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases) + ).rejects.toThrowError('Oh no!'); + }); + + test(`calls authorize methods with expected actions, types, spaces, and enforce map`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases); + + expect(authorizeSpy).toHaveBeenCalledTimes(1); + expect(authorizeSpy).toHaveBeenCalledWith({ + actions: expectedActions, + types: expectedTypes, + spaces: expectedSpaces, + enforceMap: expectedEnforceMap, + auditOptions: { objects: auditObjects }, + }); + + expect(checkAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(checkAuthorizationSpy).toHaveBeenCalledWith({ + actions: new Set([actionString]), + spaces: expectedSpaces, + types: expectedTypes, + options: { allowGlobalResource: false }, + }); + + expect(checkPrivileges).toHaveBeenCalledTimes(1); + expect(checkPrivileges).toHaveBeenCalledWith( + [ + `mock-saved_object:${legacyUrlAlias1.targetType}/${actionString}`, + `mock-saved_object:${legacyUrlAlias2.targetType}/${actionString}`, + `mock-saved_object:${legacyUrlAlias3.targetType}/${actionString}`, + 'login:', + ], + [...expectedSpaces] + ); + + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + expect(enforceAuthorizationSpy).toHaveBeenCalledWith({ + action: SecurityAction.BULK_UPDATE, + typesAndSpaces: expectedEnforceMap, + typeMap: expectedTypeMap, + auditOptions: { objects: auditObjects }, + }); + }); + + test(`returns when fully authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect( + securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases) + ).resolves.toBe(undefined); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`returns when partially authorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/bulk_update', authorized: true }, + { privilege: 'login:', authorized: false }, + { + resource: 'y', + privilege: 'mock-saved_object:b/bulk_update', + authorized: true, + }, + { + resource: 'z', + privilege: 'mock-saved_object:c/bulk_update', + authorized: true, + }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases) + ).resolves.toBe(undefined); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when successful`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(legacyUrlAliases.length); + expect(auditLogger.log).toHaveBeenCalledTimes(legacyUrlAliases.length); + let i = 1; + for (const alias of legacyUrlAliases) { + const legacyObjectId = `${alias.targetSpace}:${alias.targetType}:${alias.sourceId}`; + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: undefined, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: 'legacy-url-alias', id: legacyObjectId }, + }, + message: `User is updating legacy-url-alias [id=${legacyObjectId}]`, + }); + } + }); + + test(`throws when unauthorized`, async () => { + const { securityExtension, checkPrivileges } = setup(); + setupSimpleCheckPrivsMockResolve(checkPrivileges, 'a', 'bulk_update', false); + + await expect( + securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases) + ).rejects.toThrow(`Unable to bulk_update a,b,c`); + expect(enforceAuthorizationSpy).toHaveBeenCalledTimes(1); + }); + + test(`adds an audit event per object when unauthorized`, async () => { + const { securityExtension, checkPrivileges, auditLogger } = setup(); + checkPrivileges.mockResolvedValue({ + hasAllRequested: false, + privileges: { + kibana: [ + { privilege: 'mock-saved_object:a/share_to_space', authorized: false }, + { privilege: 'login:', authorized: true }, + ], + }, + } as CheckPrivilegesResponse); + + await expect( + securityExtension.authorizeDisableLegacyUrlAliases(legacyUrlAliases) + ).rejects.toThrow(`Unable to bulk_update a,b,c`); + + expect(auditHelperSpy).toHaveBeenCalledTimes(1); + expect(addAuditEventSpy).toHaveBeenCalledTimes(legacyUrlAliases.length); + expect(auditLogger.log).toHaveBeenCalledTimes(legacyUrlAliases.length); + let i = 1; + for (const alias of legacyUrlAliases) { + const legacyObjectId = `${alias.targetSpace}:${alias.targetType}:${alias.sourceId}`; + expect(auditLogger.log).toHaveBeenNthCalledWith(i++, { + error: { + code: 'Error', + message: 'Unable to bulk_update a,b,c', + }, + event: { + action: AuditAction.UPDATE, + category: ['database'], + outcome: 'failure', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: undefined, + saved_object: { type: 'legacy-url-alias', id: legacyObjectId }, + }, + message: `Failed attempt to update legacy-url-alias [id=${legacyObjectId}]`, + }); + } + }); +}); + +describe(`#auditObjectsForSpaceDeletion`, () => { + const spaceId = 'x'; + + const objects: Array> = [ + { + id: '1', + namespaces: ['*'], + type: 'dashboard', + score: 1, + attributes: undefined, + references: [], + }, + { + id: '2', + namespaces: ['x'], + type: 'dashboard', + score: 1, + attributes: undefined, + references: [], + }, + { + id: '3', + namespaces: ['default', 'x'], + type: 'dashboard', + score: 1, + attributes: undefined, + references: [], + }, + ]; + + beforeEach(() => { + checkAuthorizationSpy.mockClear(); + enforceAuthorizationSpy.mockClear(); + redactNamespacesSpy.mockClear(); + authorizeSpy.mockClear(); + auditHelperSpy.mockClear(); + addAuditEventSpy.mockClear(); + }); + + test(`adds audit event for each object without '*' in namespaces`, async () => { + const { securityExtension, auditLogger } = setup(); + securityExtension.auditObjectsForSpaceDeletion(spaceId, objects); + + expect(auditHelperSpy).not.toHaveBeenCalled(); // The helper is not called, the addAudit method is called directly + expect(addAuditEventSpy).toHaveBeenCalledTimes(objects.length - 1); + expect(auditLogger.log).toHaveBeenCalledTimes(objects.length - 1); + const i = 0; + for (const obj of objects) { + if (i === 0) continue; // The first object namespaces includes '*', so there will not be an audit for it + + expect(auditLogger.log).toHaveBeenNthCalledWith(i, { + error: undefined, + event: { + action: AuditAction.UPDATE_OBJECTS_SPACES, + category: ['database'], + outcome: 'unknown', + type: ['change'], + }, + kibana: { + add_to_spaces: undefined, + delete_from_spaces: obj.namespaces!.length > 1 ? obj.namespaces : undefined, + saved_object: undefined, + }, + message: `User is updating spaces of dashboard [id=${obj.id}]`, + }); + } }); }); diff --git a/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.ts b/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.ts index e464fbe8e4478..a540b96df3517 100644 --- a/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.ts +++ b/x-pack/plugins/security/server/saved_objects/saved_objects_security_extension.ts @@ -5,19 +5,43 @@ * 2.0. */ +import type { + SavedObjectReferenceWithContext, + SavedObjectsFindResult, + SavedObjectsResolveResponse, +} from '@kbn/core-saved-objects-api-server'; import type { SavedObjectsClient } from '@kbn/core-saved-objects-api-server-internal'; +import { isBulkResolveError } from '@kbn/core-saved-objects-api-server-internal/src/lib/internal_bulk_resolve'; +import { LEGACY_URL_ALIAS_TYPE } from '@kbn/core-saved-objects-base-server-internal'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; import type { - AddAuditEventParams, AuthorizationTypeEntry, AuthorizationTypeMap, - CheckAuthorizationParams, + AuthorizeAndRedactInternalBulkResolveParams, + AuthorizeAndRedactMultiNamespaceReferencesParams, + AuthorizeBulkCreateParams, + AuthorizeBulkDeleteParams, + AuthorizeBulkGetParams, + AuthorizeBulkUpdateParams, + AuthorizeCheckConflictsParams, + AuthorizeCreateParams, + AuthorizeDeleteParams, + AuthorizeFindParams, + AuthorizeGetParams, + AuthorizeOpenPointInTimeParams, + AuthorizeUpdateParams, + AuthorizeUpdateSpacesParams, + BulkResolveError, CheckAuthorizationResult, - EnforceAuthorizationParams, + GetFindRedactTypeMapParams, ISavedObjectsSecurityExtension, - PerformAuthorizationParams, RedactNamespacesParams, SavedObject, } from '@kbn/core-saved-objects-server'; +import type { AuthorizeObject } from '@kbn/core-saved-objects-server/src/extensions/security'; +import { ALL_NAMESPACES_STRING, SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; +import type { EcsEvent } from '@kbn/ecs'; import { ALL_SPACES_ID, UNKNOWN_SPACE } from '../../common/constants'; import type { AuditLogger } from '../audit'; @@ -33,17 +57,333 @@ interface Params { checkPrivileges: CheckSavedObjectsPrivileges; } +/** + * The SecurityAction enumeration contains values for all valid shared object + * security actions. The string for each value correlates to the ES operation. + */ +export enum SecurityAction { + CHECK_CONFLICTS, + CLOSE_POINT_IN_TIME, + COLLECT_MULTINAMESPACE_REFERENCES, + COLLECT_MULTINAMESPACE_REFERENCES_UPDATE_SPACES, + CREATE, + BULK_CREATE, + DELETE, + BULK_DELETE, + FIND, + GET, + BULK_GET, + INTERNAL_BULK_RESOLVE, + OPEN_POINT_IN_TIME, + REMOVE_REFERENCES, + UPDATE, + BULK_UPDATE, + UPDATE_OBJECTS_SPACES, +} + +/** + * The AuditAction enumeration contains values for all + * valid audit actions for use in AddAuditEventParams. + */ +export enum AuditAction { + CREATE = 'saved_object_create', + GET = 'saved_object_get', + RESOLVE = 'saved_object_resolve', + UPDATE = 'saved_object_update', + DELETE = 'saved_object_delete', + FIND = 'saved_object_find', + REMOVE_REFERENCES = 'saved_object_remove_references', + OPEN_POINT_IN_TIME = 'saved_object_open_point_in_time', + CLOSE_POINT_IN_TIME = 'saved_object_close_point_in_time', + COLLECT_MULTINAMESPACE_REFERENCES = 'saved_object_collect_multinamespace_references', // this is separate from 'saved_object_get' because the user is only accessing an object's metadata + UPDATE_OBJECTS_SPACES = 'saved_object_update_objects_spaces', // this is separate from 'saved_object_update' because the user is only updating an object's metadata +} + +/** + * The AddAuditEventParams interface contains settings for adding + * audit events via the ISavedObjectsSecurityExtension. This is + * used only for the private addAuditEvent method. + */ +export interface AddAuditEventParams { + /** The relevant action */ + action: AuditAction; + /** + * The outcome of the operation + * 'failure' | 'success' | 'unknown' + */ + outcome?: EcsEvent['outcome']; + /** + * Relevant saved object information + * object containing type & id strings + */ + savedObject?: { type: string; id: string }; + /** + * Array of spaces being added. For + * UPDATE_OBJECTS_SPACES action only + */ + addToSpaces?: readonly string[]; + /** + * Array of spaces being removed. For + * UPDATE_OBJECTS_SPACES action only + */ + deleteFromSpaces?: readonly string[]; + /** + * Relevant error information to add to + * the audit event + */ + error?: Error; +} + +/** + * The InternalAuthorizeOptions interface contains basic options + * for internal authorize methods of the ISavedObjectsSecurityExtension. + */ +interface InternalAuthorizeOptions { + /** + * Whether or not to force the use of the bulk action for the authorization. + * By default this will be based on the number of objects passed to the + * authorize method. + */ + forceBulkAction: boolean; +} + +/** + * The InternalAuthorizeParams interface contains settings for checking + * & enforcing authorization via the ISavedObjectsSecurityExtension. This + * is used only for the private authorize method. + */ +interface InternalAuthorizeParams { + /** A set of actions to check */ + actions: Set; + /** A set of types to check */ + types: Set; + /** A set of spaces to check */ + spaces: Set; + /** + * A map of types (key) to spaces (value) that will be affected by the action(s). + * If undefined, enforce will be bypassed. + */ + enforceMap?: Map>; + /** Options for authorization*/ + options?: { + /** allowGlobalResource - whether or not to allow global resources, false if options are undefined */ + allowGlobalResource?: boolean; + }; + /** auditOptions - options for audit logging */ + auditOptions?: AuditOptions | UpdateSpacesAuditOptions; +} + +/** + * The EnforceAuthorizationParams interface contains settings for + * enforcing a single action via the ISavedObjectsSecurityExtension. + * This is used only for the private enforceAuthorization method. + */ +interface EnforceAuthorizationParams { + /** A map of types to spaces that will be affected by the action */ + typesAndSpaces: Map>; + /** The relevant security action (create, update, etc.) */ + action: SecurityAction; + /** + * The authorization map from CheckAuthorizationResult: a + * map of type to record of action/AuthorizationTypeEntry + * (spaces/globallyAuthz'd) + */ + typeMap: AuthorizationTypeMap; + /** auditOptions - options for audit logging */ + auditOptions?: AuditOptions | UpdateSpacesAuditOptions; +} + +/** + * The AuditHelperParams interface contains parameters to log audit events + * within the ISavedObjectsSecurityExtension. + */ +interface AuditHelperParams { + /** The audit action to log */ + action: AuditAction; + /** The objects applicable to the action */ + objects?: Array<{ type: string; id: string }>; + /** Whether or not to use success as the non-failure outcome. Default is 'unknown' */ + useSuccessOutcome?: boolean; + /** + * The spaces in which to add the objects. + * Used only with the AuditAction.UPDATE_OBJECTS_SPACES. + * Default is none + */ + addToSpaces?: string[]; + /** + * The spaces from which to remove the objects. + * Used only with the AuditAction.UPDATE_OBJECTS_SPACES. + * Default is none + */ + deleteFromSpaces?: string[]; + /** Error information produced by the action */ + error?: Error; +} + +/** + * The AuditOptions interface contains optional settings for audit + * logging within the ISavedObjectsSecurityExtension. + */ +interface AuditOptions { + /** + * An array of applicable objects for the authorization action + * If undefined or empty, general auditing will occur (one log/action) + */ + objects?: Array<{ type: string; id: string }>; + /** + * Whether or not to bypass audit logging on authz success, authz failure, always, or never. Default never. + */ + bypass?: 'never' | 'on_success' | 'on_failure' | 'always'; + /** If authz success should be logged as 'success'. Default false */ + useSuccessOutcome?: boolean; +} + +/** + * The UpdateSpacesAuditOptions interface contains optional settings for + * auditing the UPDATE_OBJECTS_SPACES action. + */ +interface UpdateSpacesAuditOptions extends AuditOptions { + /** + * An array of spaces which to add the objects (used in updateObjectsSpaces) + */ + addToSpaces?: string[]; + /** + * An array of spaces from which to remove the objects (used in updateObjectsSpaces) + */ + deleteFromSpaces?: string[]; +} + +/** + * The CheckAuthorizationParams interface contains settings for checking + * authorization via the ISavedObjectsSecurityExtension. + */ +interface CheckAuthorizationParams { + /** A set of types to check */ + types: Set; + /** A set of spaces to check */ + spaces: Set; + /** An set of actions to check */ + actions: Set; + /** Authorization options */ + options?: { + /** + * allowGlobalResource - whether or not to allow global resources, false if options are undefined + */ + allowGlobalResource: boolean; + }; +} + export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExtension { private readonly actions: Actions; private readonly auditLogger: AuditLogger; private readonly errors: SavedObjectsClient['errors']; private readonly checkPrivilegesFunc: CheckSavedObjectsPrivileges; + private readonly actionMap: Map< + SecurityAction, + { authzAction?: string; auditAction?: AuditAction } + >; constructor({ actions, auditLogger, errors, checkPrivileges }: Params) { this.actions = actions; this.auditLogger = auditLogger; this.errors = errors; this.checkPrivilegesFunc = checkPrivileges; + + // This comment block is a quick reference for the action map, which maps authorization actions + // and audit actions to a "security action" as used by the authorization methods. + // Security Action ES AUTH ACTION AUDIT ACTION + // ----------------------------------------------------------------------------------------- + // Check Conflicts 'bulk_create' N/A + // Close PIT N/A AuditAction.CLOSE_POINT_IN_TIME + // Collect References 'bulk_get' AuditAction.COLLECT_MULTINAMESPACE_REFERENCES + // Collect Refs For Updating Spaces 'share_to_space' AuditAction.COLLECT_MULTINAMESPACE_REFERENCES + // Create 'create' AuditAction.CREATE + // Bulk Create 'bulk_create' AuditAction.CREATE + // Delete 'delete' AuditAction.DELETE + // Bulk Delete 'bulk_delete' AuditAction.DELETE + // Find 'find' AuditAction.FIND + // Get 'get' AuditAction.GET + // Bulk Get 'bulk_get' AuditAction.GET + // Internal Bulk Resolve 'bulk_get' AuditAction.RESOLVE + // Open PIT 'open_point_in_time' AuditAction.OPEN_POINT_IN_TIME + // Remove References 'delete' AuditAction.REMOVE_REFERENCES + // Update 'update' AuditAction.UPDATE + // Bulk Update 'bulk_update' AuditAction.UPDATE + // Update Objects Spaces 'share_to_space' AuditAction.UPDATE_OBJECTS_SPACES + this.actionMap = new Map([ + [SecurityAction.CHECK_CONFLICTS, { authzAction: 'bulk_create', auditAction: undefined }], + [ + SecurityAction.CLOSE_POINT_IN_TIME, + { authzAction: undefined, auditAction: AuditAction.CLOSE_POINT_IN_TIME }, + ], + [ + SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES, + { authzAction: 'bulk_get', auditAction: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES }, + ], + [ + SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES_UPDATE_SPACES, + { + authzAction: 'share_to_space', + auditAction: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, + }, + ], + [SecurityAction.CREATE, { authzAction: 'create', auditAction: AuditAction.CREATE }], + [SecurityAction.BULK_CREATE, { authzAction: 'bulk_create', auditAction: AuditAction.CREATE }], + [SecurityAction.DELETE, { authzAction: 'delete', auditAction: AuditAction.DELETE }], + [SecurityAction.BULK_DELETE, { authzAction: 'bulk_delete', auditAction: AuditAction.DELETE }], + [SecurityAction.FIND, { authzAction: 'find', auditAction: AuditAction.FIND }], + [SecurityAction.GET, { authzAction: 'get', auditAction: AuditAction.GET }], + [SecurityAction.BULK_GET, { authzAction: 'bulk_get', auditAction: AuditAction.GET }], + [ + SecurityAction.INTERNAL_BULK_RESOLVE, + { authzAction: 'bulk_get', auditAction: AuditAction.RESOLVE }, + ], + [ + SecurityAction.OPEN_POINT_IN_TIME, + { authzAction: 'open_point_in_time', auditAction: AuditAction.OPEN_POINT_IN_TIME }, + ], + [ + SecurityAction.REMOVE_REFERENCES, + { authzAction: 'delete', auditAction: AuditAction.REMOVE_REFERENCES }, + ], + [SecurityAction.UPDATE, { authzAction: 'update', auditAction: AuditAction.UPDATE }], + [SecurityAction.BULK_UPDATE, { authzAction: 'bulk_update', auditAction: AuditAction.UPDATE }], + [ + SecurityAction.UPDATE_OBJECTS_SPACES, + { authzAction: 'share_to_space', auditAction: AuditAction.UPDATE_OBJECTS_SPACES }, + ], + ]); + } + + private assertObjectsArrayNotEmpty(objects: AuthorizeObject[], action: SecurityAction) { + if (objects.length === 0) { + throw new Error( + `No objects specified for ${ + this.actionMap.get(action)?.authzAction ?? 'unknown' + } authorization` + ); + } + } + + private translateActions( + securityActions: Set + ): { authzActions: Set; auditActions: Set } { + const authzActions = new Set(); + const auditActions = new Set(); + for (const secAction of securityActions) { + const { authzAction, auditAction } = this.decodeSecurityAction(secAction); + if (authzAction) authzActions.add(authzAction as A); + if (auditAction) auditActions.add(auditAction as AuditAction); + } + return { authzActions, auditActions }; + } + + private decodeSecurityAction(securityAction: SecurityAction): { + authzAction: string | undefined; + auditAction: AuditAction | undefined; + } { + const { authzAction, auditAction } = this.actionMap.get(securityAction)!; + return { authzAction, auditAction }; } private async checkAuthorization( @@ -83,7 +423,6 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten if (missingPrivilegesAtResource) { return acc; } - let objTypes: string[]; let action: A; if (privilege === this.actions.login) { @@ -139,33 +478,107 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten return { typeMap, status: 'unauthorized' }; } - enforceAuthorization(params: EnforceAuthorizationParams): void { - const { typesAndSpaces, action, typeMap, auditCallback } = params; + private auditHelper(params: AuditHelperParams) { + const { action, useSuccessOutcome, objects, error, addToSpaces, deleteFromSpaces } = params; + + // If there are no objects, we at least want to add a single audit log for the action + const toAudit = !!objects && objects?.length > 0 ? objects : ([undefined] as undefined[]); + for (const obj of toAudit) { + this.addAuditEvent({ + action, + ...(!!obj && { savedObject: { type: obj.type, id: obj.id } }), + error, + // By default, if authorization was a success the outcome is 'unknown' because the operation has not occurred yet + // The GET action is one of the few exceptions to this, and hence it passes true to useSuccessOutcome + ...(!error && { outcome: useSuccessOutcome ? 'success' : 'unknown' }), + addToSpaces, + deleteFromSpaces, + }); + } + } + + /** + * The enforce method uses the result of an authorization check authorization map) and a map + * of types to spaces (type map) to determine if the action is authorized for all types and spaces + * within the type map. If unauthorized for any type this method will throw. + */ + private enforceAuthorization(params: EnforceAuthorizationParams): void { + const { typesAndSpaces, action, typeMap, auditOptions } = params; + const { + objects: auditObjects, + bypass = 'never', // default for bypass + useSuccessOutcome, + addToSpaces, + deleteFromSpaces, + } = (auditOptions as UpdateSpacesAuditOptions) ?? {}; + + const { authzAction, auditAction } = this.decodeSecurityAction(action); + const unauthorizedTypes = new Set(); - for (const [type, spaces] of typesAndSpaces) { - const spacesArray = [...spaces]; - if (!isAuthorizedInAllSpaces(type, action, spacesArray, typeMap)) { - unauthorizedTypes.add(type); + + if (authzAction) { + for (const [type, spaces] of typesAndSpaces) { + const spacesArray = [...spaces]; + if (!isAuthorizedInAllSpaces(type, authzAction as A, spacesArray, typeMap)) { + unauthorizedTypes.add(type); + } } } if (unauthorizedTypes.size > 0) { const targetTypes = [...unauthorizedTypes].sort().join(','); - const msg = `Unable to ${action} ${targetTypes}`; + const msg = `Unable to ${authzAction} ${targetTypes}`; const error = this.errors.decorateForbiddenError(new Error(msg)); - auditCallback?.(error); + if (auditAction && bypass !== 'always' && bypass !== 'on_failure') { + this.auditHelper({ + action: auditAction, + objects: auditObjects, + useSuccessOutcome, + addToSpaces, + deleteFromSpaces, + error, + }); + } throw error; } - auditCallback?.(); + + if (auditAction && bypass !== 'always' && bypass !== 'on_success') { + this.auditHelper({ action: auditAction, objects: auditObjects, useSuccessOutcome }); + } } - async performAuthorization( - params: PerformAuthorizationParams - ): Promise> { + /** + * The authorize method is the central method for authorization within the extension. It handles + * checking and enforcing authorization, and passing audit parameters down to the enforce method. + * + * If an enforce map is not provided, this method will NOT enforce authorization nor audit the action. + * If an enforce map is provided and the action is unauthorized for any type in any space mapped for + * that type, this method will throw (because the enforce method will throw). + * + * This method not marked as private, but not exposed via the interface + * This allows us to test it thoroughly in the unit test suite, but keep it from being exposed to consumers. + * @param params actions, types, and spaces to check, the enforce map (types to enforce in which spaces), options, and audit options + * @returns CheckAuthorizationResult - the result from the authorizations check + */ + async authorize( + params: InternalAuthorizeParams + ): Promise> { + if (params.actions.size === 0) { + throw new Error('No actions specified for authorization'); + } + if (params.types.size === 0) { + throw new Error('No types specified for authorization'); + } + if (params.spaces.size === 0) { + throw new Error('No spaces specified for authorization'); + } + + const { authzActions } = this.translateActions(params.actions); + const checkResult: CheckAuthorizationResult = await this.checkAuthorization({ types: params.types, spaces: params.spaces, - actions: params.actions, + actions: authzActions, options: { allowGlobalResource: params.options?.allowGlobalResource === true }, }); @@ -176,7 +589,7 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten typesAndSpaces, action, typeMap: checkResult.typeMap, - auditCallback: params.auditCallback, + auditOptions: params.auditOptions, }); }); } @@ -184,13 +597,24 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten return checkResult; } - addAuditEvent(params: AddAuditEventParams): void { + private addAuditEvent(params: AddAuditEventParams): void { if (this.auditLogger.enabled) { const auditEvent = savedObjectEvent(params); this.auditLogger.log(auditEvent); } } + private async checkPrivileges( + actions: string | string[], + namespaceOrNamespaces?: string | Array + ) { + try { + return await this.checkPrivilegesFunc(actions, namespaceOrNamespaces); + } catch (error) { + throw this.errors.decorateGeneralError(error, error.body && error.body.reason); + } + } + redactNamespaces(params: RedactNamespacesParams): SavedObject { const { savedObject, typeMap } = params; const loginAction = this.actions.login as A; // This typeMap came from the `checkAuthorization` function, which always checks privileges for the "login" action (in addition to what the consumer requested) @@ -208,15 +632,725 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten return { ...savedObject, namespaces: redactedSpaces }; } - private async checkPrivileges( - actions: string | string[], - namespaceOrNamespaces?: string | Array - ) { - try { - return await this.checkPrivilegesFunc(actions, namespaceOrNamespaces); - } catch (error) { - throw this.errors.decorateGeneralError(error, error.body && error.body.reason); + async authorizeCreate( + params: AuthorizeCreateParams + ): Promise> { + return this.internalAuthorizeCreate({ + namespace: params.namespace, + objects: [params.object], + }); + } + + async authorizeBulkCreate( + params: AuthorizeBulkCreateParams + ): Promise> { + return this.internalAuthorizeCreate(params, { forceBulkAction: true }); + } + + private async internalAuthorizeCreate( + params: AuthorizeBulkCreateParams, + options?: InternalAuthorizeOptions + ): Promise> { + const namespaceString = SavedObjectsUtils.namespaceIdToString(params.namespace); + const { objects } = params; + + const action = + options?.forceBulkAction || objects.length > 1 + ? SecurityAction.BULK_CREATE + : SecurityAction.CREATE; + + this.assertObjectsArrayNotEmpty(objects, action); + + const enforceMap = new Map>(); + const spacesToAuthorize = new Set([namespaceString]); // Always check authZ for the active space + + // If a user tries to create an object with `initialNamespaces: ['*']`, they need to have 'create' privileges for the Global Resource + // (e.g., All privileges for All Spaces). + // Inversely, if a user tries to overwrite an object that already exists in '*', they don't need to 'create' privileges for the Global + // Resource, so in that case we have to filter out that string from spacesToAuthorize (because `allowGlobalResource: true` is used + // below.) + for (const obj of objects) { + const spacesToEnforce = enforceMap.get(obj.type) ?? new Set([namespaceString]); // Always enforce authZ for the active space + for (const space of obj.initialNamespaces ?? []) { + spacesToEnforce.add(space); + spacesToAuthorize.add(space); + } + enforceMap.set(obj.type, spacesToEnforce); + + for (const space of obj.existingNamespaces) { + // Don't accidentally check for global privileges when the object exists in '*' + if (space !== ALL_NAMESPACES_STRING) { + spacesToAuthorize.add(space); // existing namespaces are included so we can later redact if necessary + } + } + } + + const authorizationResult = await this.authorize({ + actions: new Set([action]), + types: new Set(enforceMap.keys()), + spaces: spacesToAuthorize, + enforceMap, + options: { allowGlobalResource: true }, + auditOptions: { objects }, + }); + + return authorizationResult; + } + + async authorizeUpdate( + params: AuthorizeUpdateParams + ): Promise> { + return this.internalAuthorizeUpdate({ + namespace: params.namespace, + objects: [params.object], + }); + } + + async authorizeBulkUpdate( + params: AuthorizeBulkUpdateParams + ): Promise> { + return this.internalAuthorizeUpdate(params, { forceBulkAction: true }); + } + + private async internalAuthorizeUpdate( + params: AuthorizeBulkUpdateParams, + options?: InternalAuthorizeOptions + ): Promise> { + const namespaceString = SavedObjectsUtils.namespaceIdToString(params.namespace); + const { objects } = params; + + const action = + options?.forceBulkAction || objects.length > 1 + ? SecurityAction.BULK_UPDATE + : SecurityAction.UPDATE; + + this.assertObjectsArrayNotEmpty(objects, action); + + const enforceMap = new Map>(); + const spacesToAuthorize = new Set([namespaceString]); // Always check authZ for the active space + + for (const obj of objects) { + const { + type, + objectNamespace: objectNamespace, + existingNamespaces: existingNamespaces, + } = obj; + const objectNamespaceString = objectNamespace ?? namespaceString; + + const spacesToEnforce = enforceMap.get(type) ?? new Set([namespaceString]); // Always enforce authZ for the active space + spacesToEnforce.add(objectNamespaceString); + enforceMap.set(type, spacesToEnforce); + spacesToAuthorize.add(objectNamespaceString); + + for (const space of existingNamespaces) { + spacesToAuthorize.add(space); // existing namespaces are included so we can later redact if necessary + } + } + + const authorizationResult = await this.authorize({ + actions: new Set([action]), + types: new Set(enforceMap.keys()), + spaces: spacesToAuthorize, + enforceMap, + auditOptions: { objects }, + }); + + return authorizationResult; + } + + async authorizeDelete( + params: AuthorizeDeleteParams + ): Promise> { + return this.internalAuthorizeDelete({ + namespace: params.namespace, + // delete params does not contain existingNamespaces because authz + // occurs prior to the preflight check. This is ok because we are + // only concerned with enforcing the current space. + objects: [{ ...params.object, existingNamespaces: [] }], + }); + } + + async authorizeBulkDelete( + params: AuthorizeBulkDeleteParams + ): Promise> { + return this.internalAuthorizeDelete(params, { forceBulkAction: true }); + } + + private async internalAuthorizeDelete( + params: AuthorizeBulkDeleteParams, + options?: InternalAuthorizeOptions + ): Promise> { + const namespaceString = SavedObjectsUtils.namespaceIdToString(params.namespace); + const { objects } = params; + const enforceMap = new Map>(); + const spacesToAuthorize = new Set([namespaceString]); // Always check authZ for the active space + + const action = + options?.forceBulkAction || objects.length > 1 + ? SecurityAction.BULK_DELETE + : SecurityAction.DELETE; + + this.assertObjectsArrayNotEmpty(objects, action); + + for (const obj of objects) { + const { type } = obj; + const spacesToEnforce = enforceMap.get(type) ?? new Set([namespaceString]); // Always enforce authZ for the active space + enforceMap.set(type, spacesToEnforce); + for (const space of obj.existingNamespaces) { + spacesToAuthorize.add(space); // existing namespaces are authorized but not enforced + } + } + + return this.authorize({ + actions: new Set([action]), + types: new Set(enforceMap.keys()), + spaces: spacesToAuthorize, + enforceMap, + auditOptions: { + objects, + }, + }); + } + + async authorizeGet( + params: AuthorizeGetParams + ): Promise> { + const { namespace, object, objectNotFound } = params; + const spacesToEnforce = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check/enforce authZ for the active space + const existingNamespaces = object.existingNamespaces; + + return await this.authorize({ + actions: new Set([SecurityAction.GET]), + types: new Set([object.type]), + spaces: new Set([...spacesToEnforce, ...existingNamespaces]), // existing namespaces are included so we can later redact if necessary + enforceMap: new Map([[object.type, spacesToEnforce]]), + auditOptions: { objects: [object], bypass: objectNotFound ? 'on_success' : 'never' }, // Do not audit on success if the object was not found + }); + } + + async authorizeBulkGet( + params: AuthorizeBulkGetParams + ): Promise> { + const action = SecurityAction.BULK_GET; + const namespace = SavedObjectsUtils.namespaceIdToString(params.namespace); + const { objects } = params; + this.assertObjectsArrayNotEmpty(objects, action); + + const successAuditObjects = new Array<{ type: string; id: string }>(); + const enforceMap = new Map>(); + const spacesToAuthorize = new Set([namespace]); // Always check authZ for the active space + + for (const obj of objects) { + const spacesToEnforce = enforceMap.get(obj.type) ?? new Set([namespace]); // Always enforce authZ for the active space + + // Object namespaces are passed into the repo's bulkGet method per object + for (const space of obj.objectNamespaces ?? []) { + spacesToEnforce.add(space); + enforceMap.set(obj.type, spacesToEnforce); + spacesToAuthorize.add(space); + } + + // Existing namespaces are populated fom the bulkGet response docs + for (const space of obj.existingNamespaces) { + spacesToAuthorize.add(space); // existing namespaces are included so we can later redact if necessary + } + + // We only log success events for objects that were actually found (and are being returned to the user) + // If enforce fails, we audit for all objects + if (!obj.error) { + successAuditObjects.push(obj); + } + } + + const authorizationResult = await this.authorize({ + actions: new Set([action]), + types: new Set(enforceMap.keys()), + spaces: spacesToAuthorize, + enforceMap, + auditOptions: { + objects, + useSuccessOutcome: true, + bypass: 'on_success', // We will override the success case below + }, + }); + + // if we made it here, enforce was a success, so let's audit... + const { auditAction } = this.decodeSecurityAction(SecurityAction.BULK_GET); + if (auditAction) { + this.auditHelper({ + action: auditAction, + objects: successAuditObjects.length ? successAuditObjects : undefined, + useSuccessOutcome: true, + }); + } + + return authorizationResult; + } + + async authorizeCheckConflicts( + params: AuthorizeCheckConflictsParams + ): Promise> { + const action = SecurityAction.CHECK_CONFLICTS; + const { namespace, objects } = params; + this.assertObjectsArrayNotEmpty(objects, action); + + const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); + const typesAndSpaces = new Map>(); + for (const obj of params.objects) { + typesAndSpaces.set(obj.type, new Set([namespaceString])); // Always enforce authZ for the active space + } + + return this.authorize({ + actions: new Set([SecurityAction.CHECK_CONFLICTS]), + types: new Set(typesAndSpaces.keys()), + spaces: new Set([namespaceString]), // Always check authZ for the active space + enforceMap: typesAndSpaces, + // auditing is intentionally bypassed, this function in the previous Security SOC wrapper implementation + // did not have audit logging. This is primarily because it is only used by Kibana and is not exposed in a + // public HTTP API + auditOptions: { bypass: 'always' }, + }); + } + + async authorizeRemoveReferences( + params: AuthorizeDeleteParams + ): Promise> { + // TODO: Improve authorization and auditing (https://github.com/elastic/kibana/issues/135259) + const { namespace, object } = params; + const spaces = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check/enforce authZ for the active space + return this.authorize({ + actions: new Set([SecurityAction.REMOVE_REFERENCES]), + types: new Set([object.type]), + spaces, + enforceMap: new Map([[object.type, spaces]]), + auditOptions: { objects: [object] }, + }); + } + + async authorizeOpenPointInTime( + params: AuthorizeOpenPointInTimeParams + ): Promise> { + const { namespaces, types } = params; + + const preAuthorizationResult = await this.authorize({ + actions: new Set([SecurityAction.OPEN_POINT_IN_TIME]), + types, + spaces: namespaces, + // No need to bypass in audit options - enforce is completely bypassed (no enforce map) + }); + + if (preAuthorizationResult?.status === 'unauthorized') { + // If the user is unauthorized to find *anything* they requested, throw + this.addAuditEvent({ + action: AuditAction.OPEN_POINT_IN_TIME, + error: new Error('User is unauthorized for any requested types/spaces'), + // TODO: include object type(s) that were requested? + // requestedTypes: types, + // requestedSpaces: namespaces, + }); + throw SavedObjectsErrorHelpers.decorateForbiddenError(new Error('unauthorized')); + } + this.addAuditEvent({ + action: AuditAction.OPEN_POINT_IN_TIME, + outcome: 'unknown', + // TODO: include object type(s) that were requested? + // requestedTypes: types, + // requestedSpaces: namespaces, + }); + + return preAuthorizationResult; + } + + auditClosePointInTime() { + this.addAuditEvent({ + action: AuditAction.CLOSE_POINT_IN_TIME, + outcome: 'unknown', + }); + } + + async authorizeAndRedactMultiNamespaceReferences( + params: AuthorizeAndRedactMultiNamespaceReferencesParams + ): Promise { + const namespaceString = SavedObjectsUtils.namespaceIdToString(params.namespace); + const { objects, options = {} } = params; + if (objects.length === 0) return objects; + const { purpose } = options; + + // Check authorization based on all *found* object types / spaces + const typesToAuthorize = new Set(); + const spacesToAuthorize = new Set([namespaceString]); + const addSpacesToAuthorize = (spaces: string[] = []) => { + for (const space of spaces) spacesToAuthorize.add(space); + }; + for (const obj of objects) { + typesToAuthorize.add(obj.type); + addSpacesToAuthorize(obj.spaces); + addSpacesToAuthorize(obj.spacesWithMatchingAliases); + addSpacesToAuthorize(obj.spacesWithMatchingOrigins); + } + const action = + purpose === 'updateObjectsSpaces' + ? SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES_UPDATE_SPACES + : SecurityAction.COLLECT_MULTINAMESPACE_REFERENCES; + + // Enforce authorization based on all *requested* object types and the current space + const typesAndSpaces = objects.reduce( + (acc, { type }) => (acc.has(type) ? acc : acc.set(type, new Set([namespaceString]))), // Always enforce authZ for the active space + new Map>() + ); + + const { typeMap } = (await this.authorize({ + actions: new Set([action]), + types: typesToAuthorize, + spaces: spacesToAuthorize, + enforceMap: typesAndSpaces, + auditOptions: { bypass: 'on_success' }, // We will audit success results below, after redaction + })) ?? { typeMap: new Map() }; + + // Now, filter/redact the results. Most SOR functions just redact the `namespaces` field from each returned object. However, this function + // will actually filter the returned object graph itself. + // This is done in two steps: (1) objects which the user can't access *in this space* are filtered from the graph, and the + // graph is rearranged to avoid leaking information. (2) any spaces that the user can't access are redacted from each individual object. + // After we finish filtering, we can write audit events for each object that is going to be returned to the user. + const requestedObjectsSet = objects.reduce( + (acc, { type, id }) => acc.add(`${type}:${id}`), + new Set() + ); + const retrievedObjectsSet = objects.reduce( + (acc, { type, id }) => acc.add(`${type}:${id}`), + new Set() + ); + const traversedObjects = new Set(); + const filteredObjectsMap = new Map(); + const getIsAuthorizedForInboundReference = (inbound: { type: string; id: string }) => { + const found = filteredObjectsMap.get(`${inbound.type}:${inbound.id}`); + return found && !found.isMissing; // If true, this object can be linked back to one of the requested objects + }; + let objectsToProcess = [...objects]; + while (objectsToProcess.length > 0) { + const obj = objectsToProcess.shift()!; + const { type, id, spaces, inboundReferences } = obj; + const objKey = `${type}:${id}`; + traversedObjects.add(objKey); + // Is the user authorized to access this object in this space? + let isAuthorizedForObject = true; + try { + this.enforceAuthorization({ + typesAndSpaces: new Map([[type, new Set([namespaceString])]]), + action, + typeMap, + auditOptions: { bypass: 'always' }, // never audit here + }); + } catch (err) { + isAuthorizedForObject = false; + } + // Redact the inbound references so we don't leak any info about other objects that the user is not authorized to access + const redactedInboundReferences = inboundReferences.filter((inbound) => { + if (inbound.type === type && inbound.id === id) { + // circular reference, don't redact it + return true; + } + return getIsAuthorizedForInboundReference(inbound); + }); + // If the user is not authorized to access at least one inbound reference of this object, then we should omit this object. + const isAuthorizedForGraph = + requestedObjectsSet.has(objKey) || // If true, this is one of the requested objects, and we checked authorization above + redactedInboundReferences.some(getIsAuthorizedForInboundReference); + + if (isAuthorizedForObject && isAuthorizedForGraph) { + if (spaces.length) { + // Only generate success audit records for "non-empty results" with 1+ spaces + // ("empty result" means the object was a non-multi-namespace type, or hidden type, or not found) + this.addAuditEvent({ + action: AuditAction.COLLECT_MULTINAMESPACE_REFERENCES, + savedObject: { type, id }, + }); + } + filteredObjectsMap.set(objKey, obj); + } else if (!isAuthorizedForObject && isAuthorizedForGraph) { + filteredObjectsMap.set(objKey, { ...obj, spaces: [], isMissing: true }); + } else if (isAuthorizedForObject && !isAuthorizedForGraph) { + const hasUntraversedInboundReferences = inboundReferences.some( + (ref) => + !traversedObjects.has(`${ref.type}:${ref.id}`) && + retrievedObjectsSet.has(`${ref.type}:${ref.id}`) + ); + + if (hasUntraversedInboundReferences) { + // this object has inbound reference(s) that we haven't traversed yet; bump it to the back of the list + objectsToProcess = [...objectsToProcess, obj]; + } else { + // There should never be a missing inbound reference. + // If there is, then something has gone terribly wrong. + const missingInboundReference = inboundReferences.find( + (ref) => + !traversedObjects.has(`${ref.type}:${ref.id}`) && + !retrievedObjectsSet.has(`${ref.type}:${ref.id}`) + ); + + if (missingInboundReference) { + throw new Error( + `Unexpected inbound reference to "${missingInboundReference.type}:${missingInboundReference.id}"` + ); + } + } + } + } + + const filteredAndRedactedObjects = [ + ...filteredObjectsMap.values(), + ].map((obj) => { + const { + type, + id, + spaces, + spacesWithMatchingAliases, + spacesWithMatchingOrigins, + inboundReferences, + } = obj; + // Redact the inbound references so we don't leak any info about other objects that the user is not authorized to access + const redactedInboundReferences = inboundReferences.filter((inbound) => { + if (inbound.type === type && inbound.id === id) { + // circular reference, don't redact it + return true; + } + return getIsAuthorizedForInboundReference(inbound); + }); + + /** Simple wrapper for the `redactNamespaces` function that expects a saved object in its params. */ + const getRedactedSpaces = (spacesArray: string[] | undefined) => { + if (!spacesArray) return; + const savedObject = { type, namespaces: spacesArray } as SavedObject; // Other SavedObject attributes aren't required + const result = this.redactNamespaces({ savedObject, typeMap }); + return result.namespaces; + }; + const redactedSpaces = getRedactedSpaces(spaces)!; + const redactedSpacesWithMatchingAliases = getRedactedSpaces(spacesWithMatchingAliases); + const redactedSpacesWithMatchingOrigins = getRedactedSpaces(spacesWithMatchingOrigins); + return { + ...obj, + spaces: redactedSpaces, + ...(redactedSpacesWithMatchingAliases && { + spacesWithMatchingAliases: redactedSpacesWithMatchingAliases, + }), + ...(redactedSpacesWithMatchingOrigins && { + spacesWithMatchingOrigins: redactedSpacesWithMatchingOrigins, + }), + inboundReferences: redactedInboundReferences, + }; + }); + + return filteredAndRedactedObjects; + } + + async authorizeAndRedactInternalBulkResolve( + params: AuthorizeAndRedactInternalBulkResolveParams + ): Promise | BulkResolveError>> { + const { namespace, objects } = params; + const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); + const typesAndSpaces = new Map>(); + const spacesToAuthorize = new Set(); + const auditableObjects: Array<{ type: string; id: string }> = []; + + for (const result of objects) { + let auditableObject: { type: string; id: string } | undefined; + if (isBulkResolveError(result)) { + const { type, id, error } = result; + if (!SavedObjectsErrorHelpers.isBadRequestError(error)) { + // Only "not found" errors should show up as audit events (not "unsupported type" errors) + auditableObject = { type, id }; + } + } else { + const { type, id, namespaces = [] } = (result as SavedObjectsResolveResponse).saved_object; + auditableObject = { type, id }; + for (const space of namespaces) { + spacesToAuthorize.add(space); + } + } + if (auditableObject) { + auditableObjects.push(auditableObject); + const spacesToEnforce = + typesAndSpaces.get(auditableObject.type) ?? new Set([namespaceString]); // Always enforce authZ for the active space + spacesToEnforce.add(namespaceString); + typesAndSpaces.set(auditableObject.type, spacesToEnforce); + spacesToAuthorize.add(namespaceString); + } + } + + if (typesAndSpaces.size === 0) { + // We only had "unsupported type" errors, there are no types to check privileges for, just return early + return objects; } + + const { typeMap } = await this.authorize({ + actions: new Set([SecurityAction.INTERNAL_BULK_RESOLVE]), + types: new Set(typesAndSpaces.keys()), + spaces: spacesToAuthorize, + enforceMap: typesAndSpaces, + auditOptions: { useSuccessOutcome: true }, + }); + + return objects.map((result) => { + if (isBulkResolveError(result)) { + return result; + } + return { + ...result, + saved_object: this.redactNamespaces({ + typeMap, + savedObject: result.saved_object, + }), + }; + }); + } + + async authorizeUpdateSpaces( + params: AuthorizeUpdateSpacesParams + ): Promise> { + const action = SecurityAction.UPDATE_OBJECTS_SPACES; + const { objects, spacesToAdd, spacesToRemove } = params; + this.assertObjectsArrayNotEmpty(objects, action); + + const namespaceString = SavedObjectsUtils.namespaceIdToString(params.namespace); + const typesAndSpaces = new Map>(); + const spacesToAuthorize = new Set(); + for (const obj of objects) { + const { type, existingNamespaces } = obj; + + const spacesToEnforce = + typesAndSpaces.get(type) ?? new Set([...spacesToAdd, ...spacesToRemove, namespaceString]); // Always enforce authZ for the active space + typesAndSpaces.set(type, spacesToEnforce); + + for (const space of spacesToEnforce) { + spacesToAuthorize.add(space); + } + + for (const space of existingNamespaces) { + // Existing namespaces are included so we can later redact if necessary + // If this is a specific space, add it to the spaces we'll check privileges for (don't accidentally check for global privileges) + if (space === ALL_NAMESPACES_STRING) continue; + spacesToAuthorize.add(space); + } + } + + const addToSpaces = spacesToAdd.length ? spacesToAdd : undefined; + const deleteFromSpaces = spacesToRemove.length ? spacesToRemove : undefined; + return await this.authorize({ + // If a user tries to share/unshare an object to/from '*', they need to have 'share_to_space' privileges for the Global Resource + // (e.g., All privileges for All Spaces). + actions: new Set([SecurityAction.UPDATE_OBJECTS_SPACES]), + types: new Set(typesAndSpaces.keys()), + spaces: spacesToAuthorize, + enforceMap: typesAndSpaces, + options: { allowGlobalResource: true }, + auditOptions: { + objects, + addToSpaces, + deleteFromSpaces, + }, + }); + } + + async authorizeFind( + params: AuthorizeFindParams + ): Promise> { + const { types, namespaces } = params; + + const preAuthorizationResult = await this.authorize({ + actions: new Set([SecurityAction.FIND]), + types: new Set(types), + spaces: new Set(namespaces), + }); + if (preAuthorizationResult?.status === 'unauthorized') { + // If the user is unauthorized to find *anything* they requested, audit but don't throw + // This is one of the last remaining calls to addAuditEvent outside of the sec ext + this.addAuditEvent({ + action: AuditAction.FIND, + error: new Error(`User is unauthorized for any requested types/spaces`), + // TODO: Improve authorization and auditing (https://github.com/elastic/kibana/issues/135259) + // include object type(s) that were requested? + // requestedTypes: types, + // requestedSpaces: namespaces, + }); + } + return preAuthorizationResult; + } + + async getFindRedactTypeMap( + params: GetFindRedactTypeMapParams + ): Promise | undefined> { + const { previouslyCheckedNamespaces: authorizeNamespaces, objects } = params; + + const spacesToAuthorize = new Set(authorizeNamespaces); // only for namespace redaction + for (const { type, id, existingNamespaces } of objects) { + for (const space of existingNamespaces) { + spacesToAuthorize.add(space); + } + this.addAuditEvent({ + action: AuditAction.FIND, + savedObject: { type, id }, + }); + } + if (spacesToAuthorize.size > authorizeNamespaces.size) { + // If there are any namespaces in the object results that were not already checked during pre-authorization, we need *another* + // authorization check so we can correctly redact the object namespaces below. + const authorizationResult = await this.authorize({ + actions: new Set([SecurityAction.FIND]), + types: new Set(objects.map((obj) => obj.type)), + spaces: spacesToAuthorize, + }); + return authorizationResult.typeMap; + } + } + + async authorizeDisableLegacyUrlAliases(aliases: LegacyUrlAliasTarget[]) { + if (aliases.length === 0) throw new Error(`No aliases specified for authorization`); + + const [uniqueSpaces, typesAndSpaces] = aliases.reduce( + ([spaces, typesAndSpacesMap], { targetSpace, targetType }) => { + const spacesForType = typesAndSpacesMap.get(targetType) ?? new Set(); + return [ + spaces.add(targetSpace), + typesAndSpacesMap.set(targetType, spacesForType.add(targetSpace)), + ]; + }, + [new Set(), new Map>()] + ); + + await this.authorize({ + actions: new Set([SecurityAction.BULK_UPDATE]), + types: new Set(typesAndSpaces.keys()), + spaces: uniqueSpaces, + enforceMap: typesAndSpaces, + auditOptions: { + objects: aliases.map((alias) => { + return { + type: LEGACY_URL_ALIAS_TYPE, + id: `${alias.targetSpace}:${alias.targetType}:${alias.sourceId}`, + }; + }), + }, + }); + } + + auditObjectsForSpaceDeletion( + spaceId: string, + resultObjects: Array> + ) { + resultObjects.forEach((obj) => { + const { namespaces = [] } = obj; + const isOnlySpace = namespaces.length === 1; // We can always rely on the `namespaces` field having >=1 element + if (namespaces.includes(ALL_SPACES_ID) && !namespaces.includes(spaceId)) { + // This object exists in All Spaces and its `namespaces` field isn't going to change; there's nothing to audit + return; + } + this.addAuditEvent({ + action: isOnlySpace ? AuditAction.DELETE : AuditAction.UPDATE_OBJECTS_SPACES, + outcome: 'unknown', + savedObject: { type: obj.type, id: obj.id }, + ...(!isOnlySpace && { deleteFromSpaces: [spaceId] }), + }); + }); } } diff --git a/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.test.ts b/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.test.ts index 085ab11076a57..8479b2f25f8c2 100644 --- a/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.test.ts +++ b/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.test.ts @@ -7,12 +7,10 @@ import { savedObjectsExtensionsMock } from '@kbn/core-saved-objects-api-server-mocks'; import type { ISavedObjectsSecurityExtension } from '@kbn/core-saved-objects-server'; -import { AuditAction } from '@kbn/core-saved-objects-server'; -import { setMapsAreEqual, setsAreEqual } from '@kbn/core-saved-objects-utils-server'; import type { EcsEvent, SavedObjectsFindResponse } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { httpServerMock } from '@kbn/core/server/mocks'; -import type { GetAllSpacesPurpose, LegacyUrlAliasTarget, Space } from '@kbn/spaces-plugin/server'; +import type { GetAllSpacesPurpose, Space } from '@kbn/spaces-plugin/server'; import { spacesClientMock } from '@kbn/spaces-plugin/server/mocks'; import { deepFreeze } from '@kbn/std'; @@ -25,11 +23,7 @@ import type { } from '../authorization'; import { authorizationMock } from '../authorization/index.mock'; import type { CheckPrivilegesResponse } from '../authorization/types'; -import { - getAliasId, - LEGACY_URL_ALIAS_TYPE, - SecureSpacesClientWrapper, -} from './secure_spaces_client_wrapper'; +import { SecureSpacesClientWrapper } from './secure_spaces_client_wrapper'; interface Opts { securityEnabled?: boolean; @@ -670,7 +664,9 @@ describe('SecureSpacesClientWrapper', () => { const username = 'some_user'; const { wrapper, baseClient, authorization, auditLogger, request, securityExtension } = setup( - { securityEnabled: true } + { + securityEnabled: true, + } ); const checkPrivileges = jest.fn().mockResolvedValue({ @@ -698,18 +694,13 @@ describe('SecureSpacesClientWrapper', () => { type: 'space', id: space.id, }); - expect(securityExtension!.addAuditEvent).toHaveBeenCalledTimes(2); - expect(securityExtension!.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.DELETE, - outcome: 'unknown', - savedObject: { type: 'dashboard', id: '2' }, - }); - expect(securityExtension!.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE_OBJECTS_SPACES, - outcome: 'unknown', - savedObject: { type: 'dashboard', id: '3' }, - deleteFromSpaces: [space.id], - }); + + expect(securityExtension!.auditObjectsForSpaceDeletion).toHaveBeenCalledTimes(1); + expect(securityExtension!.auditObjectsForSpaceDeletion).toHaveBeenCalledWith(space.id, [ + { id: '1', namespaces: ['*'], type: 'dashboard' }, + { id: '2', namespaces: ['existing_space'], type: 'dashboard' }, + { id: '3', namespaces: ['default', 'existing_space'], type: 'dashboard' }, + ]); }); }); @@ -717,50 +708,15 @@ describe('SecureSpacesClientWrapper', () => { const alias1 = { targetSpace: 'space-1', targetType: 'type-1', sourceId: 'id' }; const alias2 = { targetSpace: 'space-2', targetType: 'type-2', sourceId: 'id' }; - function expectAuditEvents( - securityExtension: jest.Mocked, - aliases: LegacyUrlAliasTarget[], - { error }: { error: boolean } - ) { - aliases.forEach((alias) => { - expect(securityExtension!.addAuditEvent).toHaveBeenCalledWith({ - action: AuditAction.UPDATE, - savedObject: { type: LEGACY_URL_ALIAS_TYPE, id: getAliasId(alias) }, - ...(error ? { error: expect.anything() } : { outcome: 'unknown' }), - }); - }); - } - function expectAuthorizationCheck( securityExtension: jest.Mocked, aliases: Array<{ targetSpace: string; targetType: string }> ) { - expect(securityExtension.performAuthorization).toHaveBeenCalledTimes(1); - - const targetTypes = aliases.map((alias) => alias.targetType); - const targetSpaces = aliases.map((alias) => alias.targetSpace); - - const expectedActions = new Set(['bulk_update']); - const expectedSpaces = new Set(targetSpaces); - const expectedTypes = new Set(targetTypes); - const expectedEnforceMap = new Map>(); - aliases.forEach((alias) => { - expectedEnforceMap.set(alias.targetType, new Set([alias.targetSpace])); - }); - - const { - actions: actualActions, - spaces: actualSpaces, - types: actualTypes, - enforceMap: actualEnforceMap, - options: actualOptions, - } = securityExtension.performAuthorization.mock.calls[0][0]; - - expect(setsAreEqual(expectedActions, actualActions)).toBeTruthy(); - expect(setsAreEqual(expectedSpaces, actualSpaces)).toBeTruthy(); - expect(setsAreEqual(expectedTypes, actualTypes)).toBeTruthy(); - expect(setMapsAreEqual(expectedEnforceMap, actualEnforceMap)).toBeTruthy(); - expect(actualOptions).toBeUndefined(); + expect(securityExtension.authorizeDisableLegacyUrlAliases).toHaveBeenCalledTimes(1); + expect(securityExtension.authorizeDisableLegacyUrlAliases).toHaveBeenCalledWith([ + alias1, + alias2, + ]); } describe('when security is not enabled', () => { @@ -780,12 +736,12 @@ describe('SecureSpacesClientWrapper', () => { describe('when security is enabled', () => { const securityEnabled = true; - it('throws a forbidden error when unauthorized', async () => { + it('propagates decorated error when authorizeDisableLegacyUrlAliases throws', async () => { const { wrapper, baseClient, forbiddenError, securityExtension } = setup({ securityEnabled, }); - securityExtension!.performAuthorization.mockImplementation(() => { - throw new Error('Oh no!'); + securityExtension!.authorizeDisableLegacyUrlAliases.mockImplementation(() => { + throw forbiddenError; }); const aliases = [alias1, alias2]; await expect(() => wrapper.disableLegacyUrlAliases(aliases)).rejects.toThrow( @@ -793,23 +749,15 @@ describe('SecureSpacesClientWrapper', () => { ); expectAuthorizationCheck(securityExtension!, aliases); - expectAuditEvents(securityExtension!, aliases, { error: true }); expect(baseClient.disableLegacyUrlAliases).not.toHaveBeenCalled(); }); it('updates the legacy URL aliases when authorized', async () => { const { wrapper, baseClient, securityExtension } = setup({ securityEnabled }); - securityExtension!.performAuthorization.mockResolvedValue({ - // These values don't actually matter, the call to enforceAuthorization matters - status: 'fully_authorized', - typeMap: new Map(), - }); - // enforceAuthorization does *not* throw an error by default const aliases = [alias1, alias2]; await wrapper.disableLegacyUrlAliases(aliases); expectAuthorizationCheck(securityExtension!, aliases); - expectAuditEvents(securityExtension!, aliases, { error: false }); expect(baseClient.disableLegacyUrlAliases).toHaveBeenCalledTimes(1); expect(baseClient.disableLegacyUrlAliases).toHaveBeenCalledWith(aliases); }); diff --git a/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.ts b/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.ts index ae89dc5991ee7..5449407f8d5a7 100644 --- a/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.ts +++ b/x-pack/plugins/security/server/spaces/secure_spaces_client_wrapper.ts @@ -7,19 +7,17 @@ import Boom from '@hapi/boom'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; import type { ISavedObjectsSecurityExtension } from '@kbn/core-saved-objects-server'; -import { AuditAction } from '@kbn/core-saved-objects-server'; import type { KibanaRequest, SavedObjectsClient } from '@kbn/core/server'; import type { GetAllSpacesOptions, GetAllSpacesPurpose, GetSpaceResult, ISpacesClient, - LegacyUrlAliasTarget, Space, } from '@kbn/spaces-plugin/server'; -import { ALL_SPACES_ID } from '../../common/constants'; import type { AuditLogger } from '../audit'; import { SpaceAuditAction, spaceAuditEvent } from '../audit'; import type { AuthorizationServiceSetup } from '../authorization'; @@ -278,20 +276,7 @@ export class SecureSpacesClientWrapper implements ISpacesClient { const finder = this.spacesClient.createSavedObjectFinder(id); try { for await (const response of finder.find()) { - response.saved_objects.forEach((savedObject) => { - const { namespaces = [] } = savedObject; - const isOnlySpace = namespaces.length === 1; // We can always rely on the `namespaces` field having >=1 element - if (namespaces.includes(ALL_SPACES_ID) && !namespaces.includes(id)) { - // This object exists in All Spaces and its `namespaces` field isn't going to change; there's nothing to audit - return; - } - securityExtension.addAuditEvent({ - action: isOnlySpace ? AuditAction.DELETE : AuditAction.UPDATE_OBJECTS_SPACES, - outcome: 'unknown', - savedObject: { type: savedObject.type, id: savedObject.id }, - ...(!isOnlySpace && { deleteFromSpaces: [id] }), - }); - }); + this.securityExtension?.auditObjectsForSpaceDeletion(id, response.saved_objects); } } finally { await finder.close(); @@ -310,46 +295,13 @@ export class SecureSpacesClientWrapper implements ISpacesClient { } public async disableLegacyUrlAliases(aliases: LegacyUrlAliasTarget[]) { - if (this.securityExtension) { - const [uniqueSpaces, typesAndSpaces] = aliases.reduce( - ([spaces, typesAndSpacesMap], { targetSpace, targetType }) => { - const spacesForType = typesAndSpacesMap.get(targetType) ?? new Set(); - return [ - spaces.add(targetSpace), - typesAndSpacesMap.set(targetType, spacesForType.add(targetSpace)), - ]; - }, - [new Set(), new Map>()] + try { + await this.securityExtension?.authorizeDisableLegacyUrlAliases(aliases); // will throw if unauthorized + } catch (err) { + throw this.errors.decorateForbiddenError( + new Error(`Unable to disable aliases: ${err.message}`) ); - - let error: Error | undefined; - try { - await this.securityExtension.performAuthorization({ - actions: new Set(['bulk_update']), - types: new Set(typesAndSpaces.keys()), - spaces: uniqueSpaces, - enforceMap: typesAndSpaces, - }); - } catch (err) { - error = this.errors.decorateForbiddenError( - new Error(`Unable to disable aliases: ${err.message}`) - ); - } - - for (const alias of aliases) { - const id = getAliasId(alias); - this.securityExtension.addAuditEvent({ - action: AuditAction.UPDATE, - savedObject: { type: LEGACY_URL_ALIAS_TYPE, id }, - error, - ...(!error && { outcome: 'unknown' }), // If authorization was a success, the outcome is unknown because the update operation has not occurred yet - }); - } - if (error) { - throw error; - } } - return this.spacesClient.disableLegacyUrlAliases(aliases); } diff --git a/x-pack/plugins/security/tsconfig.json b/x-pack/plugins/security/tsconfig.json index 1ca14763ef532..6106c3e34792b 100644 --- a/x-pack/plugins/security/tsconfig.json +++ b/x-pack/plugins/security/tsconfig.json @@ -49,9 +49,13 @@ "@kbn/logging-mocks", "@kbn/web-worker-stub", "@kbn/core-saved-objects-utils-server", + "@kbn/core-saved-objects-api-server", + "@kbn/core-saved-objects-base-server-internal", + "@kbn/core-saved-objects-common", "@kbn/core-custom-branding-browser-mocks", "@kbn/core-custom-branding-common", "@kbn/core-custom-branding-server-mocks", + "@kbn/ecs", "@kbn/shared-ux-router", ], "exclude": [ diff --git a/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts b/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts index 1ae9b046dc636..a0521b31ae904 100644 --- a/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts +++ b/x-pack/plugins/security_solution/server/__mocks__/core.mock.ts @@ -8,7 +8,8 @@ // See: https://github.com/elastic/kibana/issues/117255, this creates mocks to avoid memory leaks from kibana core. // We _must_ import from the restricted path or we pull in _everything_ including memory leaks from Kibana core -import { SavedObjectsUtils, SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; +import { SavedObjectsErrorHelpers } from '@kbn/core-saved-objects-server'; module.exports = { SavedObjectsUtils, diff --git a/x-pack/plugins/spaces/common/index.ts b/x-pack/plugins/spaces/common/index.ts index 13a5d5e5ef5ae..18bc6bbaed8be 100644 --- a/x-pack/plugins/spaces/common/index.ts +++ b/x-pack/plugins/spaces/common/index.ts @@ -13,10 +13,4 @@ export { DEFAULT_SPACE_ID, } from './constants'; export { addSpaceIdToPath, getSpaceIdFromPath } from './lib/spaces_url_parser'; -export type { - Space, - GetAllSpacesOptions, - GetAllSpacesPurpose, - GetSpaceResult, - LegacyUrlAliasTarget, -} from './types'; +export type { Space, GetAllSpacesOptions, GetAllSpacesPurpose, GetSpaceResult } from './types'; diff --git a/x-pack/plugins/spaces/common/types.ts b/x-pack/plugins/spaces/common/types.ts index 39864447310b4..0d0a32d758da8 100644 --- a/x-pack/plugins/spaces/common/types.ts +++ b/x-pack/plugins/spaces/common/types.ts @@ -103,21 +103,3 @@ export interface GetSpaceResult extends Space { */ authorizedPurposes?: Record; } - -/** - * Client interface for interacting with legacy URL aliases. - */ -export interface LegacyUrlAliasTarget { - /** - * The namespace that the object existed in when it was converted. - */ - targetSpace: string; - /** - * The type of the object when it was converted. - */ - targetType: string; - /** - * The original ID of the object, before it was converted. - */ - sourceId: string; -} diff --git a/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/types.ts b/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/types.ts index ba39dd2499f4c..9e16925451e4f 100644 --- a/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/types.ts +++ b/x-pack/plugins/spaces/public/share_saved_objects_to_space/components/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { LegacyUrlAliasTarget } from '../../../common'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; export interface InternalLegacyUrlAliasTarget extends LegacyUrlAliasTarget { /** diff --git a/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts b/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts index 50b9660dc0577..e08e8c4b29ae0 100644 --- a/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts +++ b/x-pack/plugins/spaces/public/spaces_manager/spaces_manager.ts @@ -10,14 +10,10 @@ import { BehaviorSubject } from 'rxjs'; import { skipWhile } from 'rxjs/operators'; import type { SavedObjectsCollectMultiNamespaceReferencesResponse } from '@kbn/core-saved-objects-api-server'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; import type { HttpSetup } from '@kbn/core/public'; -import type { - GetAllSpacesOptions, - GetSpaceResult, - LegacyUrlAliasTarget, - Space, -} from '../../common'; +import type { GetAllSpacesOptions, GetSpaceResult, Space } from '../../common'; import type { CopySavedObjectsToSpaceResponse } from '../copy_saved_objects_to_space/types'; interface SavedObjectTarget { diff --git a/x-pack/plugins/spaces/server/index.ts b/x-pack/plugins/spaces/server/index.ts index bad6969f2a3a1..b866042f991ee 100644 --- a/x-pack/plugins/spaces/server/index.ts +++ b/x-pack/plugins/spaces/server/index.ts @@ -27,13 +27,7 @@ export type { SpacesClientWrapper, } from './spaces_client'; -export type { - Space, - GetAllSpacesOptions, - GetAllSpacesPurpose, - GetSpaceResult, - LegacyUrlAliasTarget, -} from '../common'; +export type { Space, GetAllSpacesOptions, GetAllSpacesPurpose, GetSpaceResult } from '../common'; export const config: PluginConfigDescriptor = { schema: ConfigSchema, diff --git a/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts b/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts index cfc001d570c8d..b06187c032662 100644 --- a/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts +++ b/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts @@ -8,19 +8,14 @@ import Boom from '@hapi/boom'; import { omit } from 'lodash'; +import type { LegacyUrlAliasTarget } from '@kbn/core-saved-objects-common'; import type { ISavedObjectsPointInTimeFinder, ISavedObjectsRepository, SavedObject, } from '@kbn/core/server'; -import type { - GetAllSpacesOptions, - GetAllSpacesPurpose, - GetSpaceResult, - LegacyUrlAliasTarget, - Space, -} from '../../common'; +import type { GetAllSpacesOptions, GetAllSpacesPurpose, GetSpaceResult, Space } from '../../common'; import { isReservedSpace } from '../../common'; import type { ConfigType } from '../config'; diff --git a/x-pack/plugins/spaces/tsconfig.json b/x-pack/plugins/spaces/tsconfig.json index 735c6eedbdb16..3db72a1217db3 100644 --- a/x-pack/plugins/spaces/tsconfig.json +++ b/x-pack/plugins/spaces/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/test", "@kbn/utils", "@kbn/shared-ux-page-kibana-template", + "@kbn/core-saved-objects-common", "@kbn/shared-ux-router", "@kbn/core-custom-branding-browser-mocks", "@kbn/core-custom-branding-common", From 241b5b779989e9a32d07790850d4fff2d7e301e6 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 15 Feb 2023 09:41:12 -0600 Subject: [PATCH 025/210] Enterprise Search: include search experiences engines side nav (#151227) ## Summary When initially implementing the updates side nav with the feature flagged Engines feature, we did not include Search Experiences in the nav. Upon learning more about this page I think its best we keep it included in the nav as long as it's still included in the shortcut nav and has a guided onboarding step. We may still remove this before engines is released in 8.8, but we can remove it with those other usages as well then. ### Screenshots ![image](https://user-images.githubusercontent.com/1972968/218875418-f7543f8d-cabf-4f7e-b2ad-c7f393e1d348.png) --- .../public/applications/shared/layout/nav.test.tsx | 10 ++++++++++ .../public/applications/shared/layout/nav.tsx | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx index 7bb55a4ac8b2d..4433d7d4a5804 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx @@ -258,6 +258,11 @@ describe('useEnterpriseSearchContentNav Engines feature flag', () => { name: 'Engines', href: '/app/enterprise_search/content/engines', }, + { + id: 'searchExperiences', + name: 'Search Experiences', + href: '/app/enterprise_search/search_experiences', + }, ], }, { @@ -399,6 +404,11 @@ describe('useEnterpriseSearchEngineNav', () => { name: 'Engines', href: '/app/enterprise_search/content/engines', }, + { + id: 'searchExperiences', + name: 'Search Experiences', + href: '/app/enterprise_search/search_experiences', + }, ], }, { diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx index db5cc82d166b4..bd28fb86175f5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx @@ -179,6 +179,16 @@ export const useEnterpriseSearchNav = () => { to: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL + ENGINES_PATH, }), }, + { + id: 'searchExperiences', + name: i18n.translate('xpack.enterpriseSearch.nav.searchExperiencesTitle', { + defaultMessage: 'Search Experiences', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + to: SEARCH_EXPERIENCES_PLUGIN.URL, + }), + }, ], name: i18n.translate('xpack.enterpriseSearch.nav.searchTitle', { defaultMessage: 'Search', From 7906c76749fa89f56df626e1e4012e01bfe14753 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Wed, 15 Feb 2023 09:47:47 -0600 Subject: [PATCH 026/210] [ML] Add functional tests for Field stats flyout in Transforms & DFA creation wizard (#150927) --- .../field_stats_content.tsx | 2 +- .../field_stats_flyout/field_stats_flyout.tsx | 8 +- .../field_stats_info_button.tsx | 2 +- .../classification_creation.ts | 33 +++- .../classification_creation_saved_search.ts | 63 +++++++- .../outlier_detection_creation.ts | 25 ++- .../regression_creation.ts | 46 +++++- .../apps/ml/data_frame_analytics/types.ts | 8 + .../index_pattern/creation_index_pattern.ts | 87 ++++++++++- .../test/functional/apps/transform/helpers.ts | 8 + .../ml/data_frame_analytics_creation.ts | 44 +++++- .../services/ml/field_stats_flyout.ts | 144 ++++++++++++++++++ x-pack/test/functional/services/ml/index.ts | 6 +- .../functional/services/transform/wizard.ts | 44 ++++++ 14 files changed, 496 insertions(+), 24 deletions(-) create mode 100644 x-pack/test/functional/apps/ml/data_frame_analytics/types.ts create mode 100644 x-pack/test/functional/services/ml/field_stats_flyout.ts diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx index ddf082cbd7e96..c73bdf49b031a 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_content.tsx @@ -62,7 +62,7 @@ export const FieldStatsContent: FC<{ toDate={timeRange.to} dataViewOrDataViewId={currentDataView} field={fieldForStats} - data-test-subj={`jobCreatorFieldStatsPopover ${fieldForStats.name}`} + data-test-subj={`mlFieldStatsFlyoutContent ${fieldForStats.name}`} color={DEFAULT_COLOR} /> ) : null; diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout.tsx b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout.tsx index 89d53a1fe0ba3..6c8c7612d8bbf 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_flyout.tsx @@ -40,7 +40,13 @@ export const FieldStatsFlyout: FC<{ if (isFlyoutVisible) { return ( - +

diff --git a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx index dd500416c8fb6..728ae5ed0f3af 100644 --- a/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx +++ b/x-pack/plugins/ml/public/application/components/field_stats_flyout/field_stats_info_button.tsx @@ -36,6 +36,7 @@ export const FieldStatsInfoButton = ({ )} > diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts index 2ba4ac6f08350..df6d53974d876 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from './types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -16,7 +17,7 @@ export default function ({ getService }: FtrProviderContext) { describe('classification creation', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/bm_classification'); - await ml.testResources.createIndexPatternIfNeeded('ft_bank_marketing', '@timestamp'); + await ml.testResources.createIndexPatternIfNeeded('ft_bank_marketing'); await ml.testResources.setKibanaTimeZoneToUTC(); await ml.securityUI.loginAsMlPowerUser(); @@ -49,6 +50,18 @@ export default function ({ getService }: FtrProviderContext) { trainingPercent: 20, modelMemory: '60mb', createIndexPattern: true, + fieldStatsEntries: [ + { + fieldName: 'age', + type: 'number' as FieldStatsType, + isDependentVariableInput: true, + }, + { + fieldName: 'balance.keyword', + type: 'keyword' as FieldStatsType, + isDependentVariableInput: true, + }, + ], expected: { rocCurveColorState: [ // tick/grid/axis @@ -138,8 +151,20 @@ export default function ({ getService }: FtrProviderContext) { testData.expected.runtimeFieldsEditorContent ); - await ml.testExecution.logTestStep('inputs the dependent variable'); + await ml.testExecution.logTestStep( + 'opens field stats flyout from dependent variable input' + ); await ml.dataFrameAnalyticsCreation.assertDependentVariableInputExists(); + for (const { fieldName, type: fieldType } of testData.fieldStatsEntries.filter( + (e) => e.isDependentVariableInput + )) { + await ml.dataFrameAnalyticsCreation.assertFieldStatsFlyoutContentFromDependentVariableInputTrigger( + fieldName, + fieldType + ); + } + + await ml.testExecution.logTestStep('inputs the dependent variable'); await ml.dataFrameAnalyticsCreation.selectDependentVariable(testData.dependentVariable); await ml.testExecution.logTestStep('inputs the training percent'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts index b47a80c3041e2..872ffb2294af9 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from './types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -38,6 +39,20 @@ export default function ({ getService }: FtrProviderContext) { }); const dateNow = Date.now(); + const fieldStatsEntries = [ + { + fieldName: 'airline', + type: 'keyword' as FieldStatsType, + isDependentVariableInput: true, + isIncludeFieldInput: true, + }, + { + fieldName: '@version', + type: 'keyword' as FieldStatsType, + isIncludeFieldInput: true, + }, + ]; + const testDataList = [ { suiteTitle: 'with lucene query', @@ -48,6 +63,7 @@ export default function ({ getService }: FtrProviderContext) { get destinationIndex(): string { return `user-${this.jobId}`; }, + fieldStatsEntries, runtimeFields: { uppercase_airline: { type: 'keyword', @@ -59,6 +75,10 @@ export default function ({ getService }: FtrProviderContext) { modelMemory: '20mb', createIndexPattern: true, expected: { + fieldStatsValues: { airline: ['AAL', 'AWE', 'ASA', 'ACA', 'AMX'] } as Record< + string, + string[] + >, source: 'ft_farequote_small', rocCurveColorState: [ // tick/grid/axis @@ -99,6 +119,7 @@ export default function ({ getService }: FtrProviderContext) { get destinationIndex(): string { return `user-${this.jobId}`; }, + fieldStatsEntries, runtimeFields: { uppercase_airline: { type: 'keyword', @@ -110,6 +131,10 @@ export default function ({ getService }: FtrProviderContext) { modelMemory: '20mb', createIndexPattern: true, expected: { + fieldStatsValues: { airline: ['AAL', 'AWE', 'ASA', 'ACA', 'AMX'] } as Record< + string, + string[] + >, source: 'ft_farequote_small', rocCurveColorState: [ // tick/grid/axis @@ -150,6 +175,7 @@ export default function ({ getService }: FtrProviderContext) { get destinationIndex(): string { return `user-${this.jobId}`; }, + fieldStatsEntries, runtimeFields: { uppercase_airline: { type: 'keyword', @@ -161,6 +187,9 @@ export default function ({ getService }: FtrProviderContext) { modelMemory: '20mb', createIndexPattern: true, expected: { + fieldStatsValues: { + airline: ['AAL', 'ASA'], + } as Record, source: 'ft_farequote_small', rocCurveColorState: [ // tick/grid/axis @@ -213,6 +242,7 @@ export default function ({ getService }: FtrProviderContext) { modelMemory: '20mb', createIndexPattern: true, expected: { + fieldStatsValues: { airline: ['ASA', 'FFT'] } as Record, source: 'ft_farequote_small', rocCurveColorState: [ // tick/grid/axis @@ -293,9 +323,23 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataFrameAnalyticsCreation.assertRuntimeMappingsEditorContent( testData.expected.runtimeFieldsEditorContent ); + await ml.testExecution.logTestStep( + 'opens field stats flyout from dependent variable input' + ); + await ml.dataFrameAnalyticsCreation.assertDependentVariableInputExists(); + for (const { fieldName, type: fieldType } of fieldStatsEntries.filter( + (e) => e.isDependentVariableInput + )) { + await ml.dataFrameAnalyticsCreation.assertFieldStatsFlyoutContentFromDependentVariableInputTrigger( + fieldName, + fieldType, + testData.expected.fieldStatsValues && fieldName in testData.expected.fieldStatsValues + ? (testData.expected.fieldStatsValues[fieldName] as string[]) + : undefined + ); + } await ml.testExecution.logTestStep('inputs the dependent variable'); - await ml.dataFrameAnalyticsCreation.assertDependentVariableInputExists(); await ml.dataFrameAnalyticsCreation.selectDependentVariable(testData.dependentVariable); await ml.testExecution.logTestStep('inputs the training percent'); @@ -308,6 +352,19 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the include fields selection'); await ml.dataFrameAnalyticsCreation.assertIncludeFieldsSelectionExists(); + await ml.testExecution.logTestStep('opens field stats flyout from include fields input'); + for (const { fieldName, type: fieldType } of fieldStatsEntries.filter( + (e) => e.isIncludeFieldInput + )) { + await ml.dataFrameAnalyticsCreation.assertFieldStatFlyoutContentFromIncludeFieldTrigger( + fieldName, + fieldType, + testData.expected.fieldStatsValues && fieldName in testData.expected.fieldStatsValues + ? (testData.expected.fieldStatsValues[fieldName] as string[]) + : undefined + ); + } + await ml.testExecution.logTestStep('continues to the additional options step'); await ml.dataFrameAnalyticsCreation.continueToAdditionalOptionsStep(); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts index 21dd61e9d5249..576fcc259315d 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; -import { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; +import type { FieldStatsType } from './types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -16,7 +17,7 @@ export default function ({ getService }: FtrProviderContext) { describe('outlier detection creation', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ihp_outlier'); - await ml.testResources.createIndexPatternIfNeeded('ft_ihp_outlier', '@timestamp'); + await ml.testResources.createIndexPatternIfNeeded('ft_ihp_outlier'); await ml.testResources.setKibanaTimeZoneToUTC(); await ml.securityUI.loginAsMlPowerUser(); @@ -29,6 +30,14 @@ export default function ({ getService }: FtrProviderContext) { const jobId = `ihp_1_${Date.now()}`; + const fieldStatsEntries = [ + { + fieldName: '1stFlrSF', + type: 'keyword' as FieldStatsType, + isIncludeFieldInput: true, + }, + ]; + const testDataList = [ { suiteTitle: 'iowa house prices', @@ -171,6 +180,16 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the include fields selection'); await ml.dataFrameAnalyticsCreation.assertIncludeFieldsSelectionExists(); + await ml.testExecution.logTestStep('opens field stats flyout from include fields input'); + for (const { fieldName, type: fieldType } of fieldStatsEntries.filter( + (e) => e.isIncludeFieldInput + )) { + await ml.dataFrameAnalyticsCreation.assertFieldStatFlyoutContentFromIncludeFieldTrigger( + fieldName, + fieldType + ); + } + await ml.testExecution.logTestStep( 'sets the sample size to 10000 for the scatterplot matrix' ); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts index 7a84c41aa4a66..4f89d5875165d 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts @@ -5,18 +5,33 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; -import { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; +import type { FieldStatsType } from './types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const ml = getService('ml'); const editedDescription = 'Edited description'; + const fieldStatsEntries = [ + { + fieldName: 'g1', + type: 'number' as FieldStatsType, + isDependentVariableInput: true, + isIncludeFieldInput: true, + }, + { + fieldName: 'g2', + type: 'number' as FieldStatsType, + isIncludeFieldInput: true, + }, + ]; + describe('regression creation', function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/egs_regression'); - await ml.testResources.createIndexPatternIfNeeded('ft_egs_regression', '@timestamp'); + await ml.testResources.createIndexPatternIfNeeded('ft_egs_regression'); await ml.testResources.setKibanaTimeZoneToUTC(); await ml.securityUI.loginAsMlPowerUser(); @@ -38,6 +53,7 @@ export default function ({ getService }: FtrProviderContext) { get destinationIndex(): string { return `user-${jobId}`; }, + fieldStatsEntries, runtimeFields: { uppercase_stab: { type: 'keyword', @@ -132,8 +148,20 @@ export default function ({ getService }: FtrProviderContext) { testData.expected.runtimeFieldsEditorContent ); - await ml.testExecution.logTestStep('inputs the dependent variable'); + await ml.testExecution.logTestStep( + 'opens field stats flyout from dependent variable input' + ); await ml.dataFrameAnalyticsCreation.assertDependentVariableInputExists(); + for (const { fieldName, type: fieldType } of fieldStatsEntries.filter( + (e) => e.isDependentVariableInput + )) { + await ml.dataFrameAnalyticsCreation.assertFieldStatsFlyoutContentFromDependentVariableInputTrigger( + fieldName, + fieldType + ); + } + + await ml.testExecution.logTestStep('inputs the dependent variable'); await ml.dataFrameAnalyticsCreation.selectDependentVariable(testData.dependentVariable); await ml.testExecution.logTestStep('inputs the training percent'); @@ -146,6 +174,16 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('displays the include fields selection'); await ml.dataFrameAnalyticsCreation.assertIncludeFieldsSelectionExists(); + await ml.testExecution.logTestStep('opens field stats flyout from include fields input'); + for (const { fieldName, type: fieldType } of fieldStatsEntries.filter( + (e) => e.isIncludeFieldInput + )) { + await ml.dataFrameAnalyticsCreation.assertFieldStatFlyoutContentFromIncludeFieldTrigger( + fieldName, + fieldType + ); + } + await ml.testExecution.logTestStep( 'sets the sample size to 10000 for the scatterplot matrix' ); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/types.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/types.ts new file mode 100644 index 0000000000000..c80873334c7a1 --- /dev/null +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/types.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 type FieldStatsType = 'number' | 'keyword' | 'date'; diff --git a/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts b/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts index a383d471ceccd..e8ded6f662867 100644 --- a/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts +++ b/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts @@ -7,7 +7,7 @@ import { TRANSFORM_STATE } from '@kbn/transform-plugin/common/constants'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../../ftr_provider_context'; import { GroupByEntry, isLatestTransformTestData, @@ -36,12 +36,38 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await transform.testResources.deleteIndexPatternByTitle('ft_ecommerce'); }); + const fieldStatsEntries = [ + { + identifier: 'terms(customer_gender)', + fieldName: 'customer_gender', + type: 'keyword', + isGroupByInput: true, + }, + { + fieldName: 'category.keyword', + type: 'keyword', + isAggInput: true, + isUniqueKeyInput: true, + }, + { + fieldName: 'currency', + type: 'keyword', + isAggInput: true, + isUniqueKeyInput: true, + }, + { + fieldName: 'order_date', + type: 'date', + isSortFieldInput: true, + }, + ]; const DEFAULT_NUM_FAILURE_RETRIES = '5'; const testDataList: Array = [ { type: 'pivot', suiteTitle: 'batch transform with terms+date_histogram groups and avg agg', source: 'ft_ecommerce', + fieldStatsEntries, groupByEntries: [ { identifier: 'terms(category)', @@ -419,6 +445,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { type: 'latest', suiteTitle: 'batch transform with the latest function', source: 'ft_ecommerce', + fieldStatsEntries, uniqueKeys: [ { identifier: 'geoip.country_iso_code', @@ -570,7 +597,21 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await canvasElement.resetAntiAliasing(); if (isPivotTransformTestData(testData)) { - await transform.testExecution.logTestStep('adds the group by entries'); + await transform.testExecution.logTestStep( + 'opens field stats flyout from group by input' + ); + + const groupByFieldStatsEntries = testData.fieldStatsEntries + ? testData.fieldStatsEntries.filter((e) => e.isGroupByInput) + : []; + + for (const { fieldName, type } of groupByFieldStatsEntries) { + await transform.wizard.assertFieldStatFlyoutContentFromGroupByInputTrigger( + fieldName, + type + ); + } + for (const [index, entry] of testData.groupByEntries.entries()) { await transform.wizard.assertGroupByInputExists(); await transform.wizard.assertGroupByInputValue([]); @@ -582,6 +623,18 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); } + await transform.testExecution.logTestStep('opens field stats flyout from agg input'); + const aggInputFieldStatsEntries = testData.fieldStatsEntries + ? testData.fieldStatsEntries.filter((e) => e.isAggInput) + : []; + + for (const { fieldName, type } of aggInputFieldStatsEntries) { + await transform.wizard.assertFieldStatFlyoutContentFromAggInputTrigger( + fieldName, + type + ); + } + await transform.testExecution.logTestStep('adds the aggregation entries'); await transform.wizard.addAggregationEntries(testData.aggregationEntries); @@ -599,12 +652,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { if (isLatestTransformTestData(testData)) { await transform.testExecution.logTestStep('sets latest transform method'); await transform.wizard.selectTransformFunction('latest'); + + await transform.testExecution.logTestStep( + 'opens field stats flyout from unique keys input' + ); + const uniqueKeyInputFieldStatsEntries = testData.fieldStatsEntries + ? testData.fieldStatsEntries.filter((e) => e.isUniqueKeyInput) + : []; + + for (const { fieldName, type } of uniqueKeyInputFieldStatsEntries) { + await transform.wizard.assertFieldStatsFlyoutContentFromUniqueKeysInputTrigger( + fieldName, + type + ); + } + await transform.testExecution.logTestStep('adds unique keys'); for (const { identifier, label } of testData.uniqueKeys) { await transform.wizard.assertUniqueKeysInputExists(); await transform.wizard.assertUniqueKeysInputValue([]); await transform.wizard.addUniqueKeyEntry(identifier, label); } + + await transform.testExecution.logTestStep( + 'opens field stats flyout from sort by input' + ); + const sortFieldInputFieldStatsEntries = testData.fieldStatsEntries + ? testData.fieldStatsEntries.filter((e) => e.isSortFieldInput) + : []; + + for (const { fieldName, type } of sortFieldInputFieldStatsEntries) { + await transform.wizard.assertFieldStatFlyoutContentFromSortFieldInputTrigger( + fieldName, + type + ); + } + await transform.testExecution.logTestStep('sets the sort field'); await transform.wizard.assertSortFieldInputExists(); await transform.wizard.assertSortFieldInputValue(''); diff --git a/x-pack/test/functional/apps/transform/helpers.ts b/x-pack/test/functional/apps/transform/helpers.ts index c422ea6dfca0f..d4b163871cc4c 100644 --- a/x-pack/test/functional/apps/transform/helpers.ts +++ b/x-pack/test/functional/apps/transform/helpers.ts @@ -30,6 +30,14 @@ export interface BaseTransformTestData { destinationDataViewTimeField?: string; discoverAdjustSuperDatePicker: boolean; numFailureRetries?: string; + fieldStatsEntries?: Array<{ + fieldName: string; + type: 'keyword' | 'number' | 'date'; + isGroupByInput?: boolean; + isAggInput?: boolean; + isUniqueKeyInput?: boolean; + isSortFieldInput?: boolean; + }>; } export interface PivotTransformTestData extends BaseTransformTestData { diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts index 91ff6af4f5397..c20e73d0f51f8 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts @@ -15,20 +15,22 @@ import { import { FtrProviderContext } from '../../ftr_provider_context'; import type { CanvasElementColorStats } from '../canvas_element'; import type { MlCommonUI } from './common_ui'; -import { MlApi } from './api'; +import type { MlApi } from './api'; +import type { MlFieldStatsFlyout } from './field_stats_flyout'; export function MachineLearningDataFrameAnalyticsCreationProvider( { getPageObject, getService }: FtrProviderContext, mlCommonUI: MlCommonUI, - mlApi: MlApi + mlApi: MlApi, + mlFieldStatsFlyout: MlFieldStatsFlyout ) { const headerPage = getPageObject('header'); const commonPage = getPageObject('common'); - const testSubjects = getService('testSubjects'); + const aceEditor = getService('aceEditor'); const comboBox = getService('comboBox'); const retry = getService('retry'); - const aceEditor = getService('aceEditor'); + const testSubjects = getService('testSubjects'); return { async assertJobTypeSelectExists() { @@ -202,6 +204,19 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( }); }, + async assertFieldStatFlyoutContentFromIncludeFieldTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedContent?: string[] + ) { + await mlFieldStatsFlyout.assertFieldStatFlyoutContentFromTrigger( + 'mlAnalyticsCreateJobWizardIncludesSelect', + fieldName, + fieldType, + expectedContent + ); + }, + async assertIncludeFieldsSelectionExists() { await testSubjects.existOrFail('mlAnalyticsCreateJobWizardIncludesTable', { timeout: 8000 }); @@ -255,6 +270,27 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( }); }, + async assertFieldStatsFlyoutContentFromDependentVariableInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedContent?: string[] + ) { + await mlFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlAnalyticsCreateJobWizardDependentVariableSelect loaded', + fieldName, + fieldType, + expectedContent + ); + }, + + async assertFieldStatTopValuesContent( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedContent: string[] + ) { + await mlFieldStatsFlyout.assertTopValuesContent(fieldName, fieldType, expectedContent); + }, + async assertDependentVariableInputMissing() { await testSubjects.missingOrFail( '~mlAnalyticsCreateJobWizardDependentVariableSelect > comboBoxInput' diff --git a/x-pack/test/functional/services/ml/field_stats_flyout.ts b/x-pack/test/functional/services/ml/field_stats_flyout.ts new file mode 100644 index 0000000000000..826af0a4e31c7 --- /dev/null +++ b/x-pack/test/functional/services/ml/field_stats_flyout.ts @@ -0,0 +1,144 @@ +/* + * Copyright 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 { ProvidedType } from '@kbn/test'; +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export type MlFieldStatsFlyout = ProvidedType; + +export function MachineLearningFieldStatsFlyoutProvider({ getService }: FtrProviderContext) { + const browser = getService('browser'); + const comboBox = getService('comboBox'); + const find = getService('find'); + const retry = getService('retry'); + const testSubjects = getService('testSubjects'); + + return { + async assertFieldStatContentByType( + testSubj: string, + fieldName: string, + fieldType: 'keyword' | 'date' | 'number' + ) { + await retry.tryForTime(2000, async () => { + // escape popover + await browser.pressKeys(browser.keys.ESCAPE); + + if (fieldType === 'date') { + await testSubjects.existOrFail(`mlFieldStatsFlyoutContent ${fieldName}-histogram`); + } + + if (fieldType === 'keyword') { + await testSubjects.existOrFail(`mlFieldStatsFlyoutContent ${fieldName}-topValues`); + } + + // For numeric fields, we expect both the top values and the distribution chart + if (fieldType === 'number') { + // Assert top values exist + await testSubjects.existOrFail( + `mlFieldStatsFlyoutContent ${fieldName}-buttonGroup-topValuesButton` + ); + await testSubjects.click( + `mlFieldStatsFlyoutContent ${fieldName}-buttonGroup-topValuesButton` + ); + + await testSubjects.existOrFail(`mlFieldStatsFlyoutContent ${fieldName}-topValues`); + + // Assert distribution chart exists + await testSubjects.existOrFail( + `mlFieldStatsFlyoutContent ${fieldName}-buttonGroup-distributionButton` + ); + await testSubjects.click( + `mlFieldStatsFlyoutContent ${fieldName}-buttonGroup-distributionButton` + ); + expect( + await find.existsByCssSelector('[data-test-subj="mlFieldStatsFlyout"] .echChart') + ).to.eql(true); + } + }); + }, + + async assertFieldStatFlyoutContentFromTrigger( + testSubj: string, + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValuesContent?: string[] + ) { + const selector = `~${testSubj} > ~mlInspectFieldStatsButton-${fieldName}`; + + await retry.tryForTime(2000, async () => { + await testSubjects.existOrFail(selector); + await testSubjects.click(selector); + await testSubjects.existOrFail('mlFieldStatsFlyout'); + await testSubjects.existOrFail(`mlFieldStatsFlyoutContent ${fieldName}-title`); + }); + await this.assertFieldStatContentByType(testSubj, fieldName, fieldType); + if (Array.isArray(expectedTopValuesContent)) { + await this.assertTopValuesContent(fieldName, fieldType, expectedTopValuesContent); + } + await this.ensureFieldStatsFlyoutClosed(); + }, + + async assertFieldStatFlyoutContentFromComboBoxTrigger( + parentComboBoxSelector: string, + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValuesContent?: string[] + ) { + const selector = `mlInspectFieldStatsButton-${fieldName}`; + + await retry.tryForTime(2000, async () => { + const fieldTarget = await testSubjects.find(parentComboBoxSelector); + await comboBox.openOptionsList(fieldTarget); + + await testSubjects.existOrFail(selector); + await testSubjects.click(selector); + await testSubjects.existOrFail('mlFieldStatsFlyout'); + + await testSubjects.existOrFail(`mlFieldStatsFlyoutContent ${fieldName}-title`); + + await this.assertFieldStatContentByType(parentComboBoxSelector, fieldName, fieldType); + + if (Array.isArray(expectedTopValuesContent)) { + await this.assertTopValuesContent(fieldName, fieldType, expectedTopValuesContent); + } + await this.ensureFieldStatsFlyoutClosed(); + }); + }, + + async assertTopValuesContent(fieldName: string, fieldType: string, expectedValues: string[]) { + await retry.tryForTime(2000, async () => { + // check for top values rows + await testSubjects.existOrFail(`mlFieldStatsFlyoutContent ${fieldName}-topValues`); + const topValuesRows = await testSubjects.findAll( + `mlFieldStatsFlyoutContent ${fieldName}-topValues-formattedFieldValue` + ); + expect(topValuesRows.length).to.eql( + expectedValues.length, + `Expected top values to have ${expectedValues.length} (got ${topValuesRows.length})` + ); + for (const [idx, expectedValue] of expectedValues.entries()) { + const actualValue = await topValuesRows[idx].getVisibleText(); + expect(actualValue).to.eql( + expectedValue, + `Expected top value row to be ${expectedValue} (got ${actualValue})` + ); + } + }); + }, + + async ensureFieldStatsFlyoutClosed() { + const flyoutIsOpen = await testSubjects.exists('mlFieldStatsFlyout'); + if (flyoutIsOpen) { + await retry.tryForTime(2000, async () => { + await testSubjects.click('mlFieldStatsFlyout > euiFlyoutCloseButton'); + await testSubjects.missingOrFail('mlFieldStatsFlyout'); + }); + } + }, + }; +} diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index 4ac41a25a556e..ca9698b7813e5 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -62,11 +62,13 @@ import { MachineLearningCasesProvider } from './cases'; import { AnomalyChartsProvider } from './anomaly_charts'; import { NotificationsProvider } from './notifications'; import { MlTableServiceProvider } from './common_table_service'; +import { MachineLearningFieldStatsFlyoutProvider } from './field_stats_flyout'; export function MachineLearningProvider(context: FtrProviderContext) { const commonAPI = MachineLearningCommonAPIProvider(context); const commonUI = MachineLearningCommonUIProvider(context); const commonDataGrid = MachineLearningCommonDataGridProvider(context); + const commonFieldStatsFlyout = MachineLearningFieldStatsFlyoutProvider(context); const anomaliesTable = MachineLearningAnomaliesTableProvider(context); const anomalyCharts = AnomalyChartsProvider(context); @@ -85,7 +87,8 @@ export function MachineLearningProvider(context: FtrProviderContext) { const dataFrameAnalyticsCreation = MachineLearningDataFrameAnalyticsCreationProvider( context, commonUI, - api + api, + commonFieldStatsFlyout ); const dataFrameAnalyticsEdit = MachineLearningDataFrameAnalyticsEditProvider(context, commonUI); const dataFrameAnalyticsResults = MachineLearningDataFrameAnalyticsResultsProvider( @@ -149,6 +152,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { commonAPI, commonConfig, commonDataGrid, + commonFieldStatsFlyout, commonUI, customUrls, dashboardJobSelectionTable, diff --git a/x-pack/test/functional/services/transform/wizard.ts b/x-pack/test/functional/services/transform/wizard.ts index e1370706d2902..69332c8947d58 100644 --- a/x-pack/test/functional/services/transform/wizard.ts +++ b/x-pack/test/functional/services/transform/wizard.ts @@ -378,6 +378,17 @@ export function TransformWizardProvider({ getService, getPageObjects }: FtrProvi await this.assertSelectedTransformFunction(transformFunction); }, + async assertFieldStatsFlyoutContentFromUniqueKeysInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number' + ) { + await ml.commonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'transformWizardUniqueKeysSelector', + fieldName, + fieldType + ); + }, + async assertUniqueKeysInputExists() { await testSubjects.existOrFail('transformWizardUniqueKeysSelector > comboBoxInput'); }, @@ -405,6 +416,17 @@ export function TransformWizardProvider({ getService, getPageObjects }: FtrProvi ]); }, + async assertFieldStatFlyoutContentFromSortFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number' + ) { + await ml.commonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'transformWizardSortFieldSelector', + fieldName, + fieldType + ); + }, + async assertSortFieldInputExists() { await testSubjects.existOrFail('transformWizardSortFieldSelector > comboBoxInput'); }, @@ -426,6 +448,17 @@ export function TransformWizardProvider({ getService, getPageObjects }: FtrProvi await this.assertSortFieldInputValue(identificator); }, + async assertFieldStatFlyoutContentFromGroupByInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number' + ) { + await ml.commonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'transformGroupBySelection', + fieldName, + fieldType + ); + }, + async assertGroupByInputExists() { await testSubjects.existOrFail('transformGroupBySelection > comboBoxInput'); }, @@ -485,6 +518,17 @@ export function TransformWizardProvider({ getService, getPageObjects }: FtrProvi } > comboBoxInput`; }, + async assertFieldStatFlyoutContentFromAggInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number' + ) { + await ml.commonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'transformAggregationSelection', + fieldName, + fieldType + ); + }, + async assertAggregationInputExists(parentSelector?: string) { await testSubjects.existOrFail(this.getAggComboBoxInputSelector(parentSelector)); }, From a37dea72926f669c248aa28f22cfa1a4d7280dee Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Wed, 15 Feb 2023 16:02:17 +0000 Subject: [PATCH 027/210] [Fleet] Add tests to verify package policy bulk upgrade API creates correct assets (#151174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Closes #149423 Turns out no code changes needed after https://github.com/elastic/kibana/pull/150199 🥳 Add tests for the `/api/fleet/package_policies/upgrade` and `/api/fleet/package_policies/upgrade/dryrun` endpoints to verify they create the package policy assets when upgrading from an integration of type integration to type input. --- .../scripts/create_agents/create_agents.ts | 2 +- .../3.0.0/agent/input/input.yml.hbs | 18 +++ .../integration_to_input/3.0.0/changelog.yml | 16 ++ .../integration_to_input/3.0.0/docs/README.md | 1 + .../3.0.0/fields/input.yml | 4 + .../3.0.0/img/sample-logo.svg | 1 + .../3.0.0/img/sample-screenshot.png | Bin 0 -> 18849 bytes .../integration_to_input/3.0.0/manifest.yml | 45 ++++++ .../apis/package_policy/upgrade.ts | 139 +++++++++++++++++- 9 files changed, 224 insertions(+), 2 deletions(-) create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/agent/input/input.yml.hbs create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/changelog.yml create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/docs/README.md create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/fields/input.yml create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-logo.svg create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-screenshot.png create mode 100644 x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/manifest.yml diff --git a/x-pack/plugins/fleet/scripts/create_agents/create_agents.ts b/x-pack/plugins/fleet/scripts/create_agents/create_agents.ts index 683d45a03757c..4436c07cc07b9 100644 --- a/x-pack/plugins/fleet/scripts/create_agents/create_agents.ts +++ b/x-pack/plugins/fleet/scripts/create_agents/create_agents.ts @@ -337,7 +337,7 @@ export async function run() { Array(currentBatchSize) .fill(0) .map(async (__, i) => { - const agentPolicyId = 'script-create-agent-' + uuidv4(); + const agentPolicyId = uuidv4(); const agentPolicy = await createAgentPolicy(agentPolicyId); logger.info(`Created agent policy ${agentPolicy.item.id}`); diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/agent/input/input.yml.hbs b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/agent/input/input.yml.hbs new file mode 100644 index 0000000000000..1ba86fa98a2f8 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/agent/input/input.yml.hbs @@ -0,0 +1,18 @@ +paths: +{{#each paths}} + - {{this}} +{{/each}} + +{{#if tags}} +tags: +{{#each tags as |tag i|}} + - {{tag}} +{{/each}} +{{/if}} + +{{#if pipeline}} +pipeline: {{pipeline}} +{{/if}} + +data_stream: + dataset: {{data_stream.dataset}} \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/changelog.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/changelog.yml new file mode 100644 index 0000000000000..e7244221457b0 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/changelog.yml @@ -0,0 +1,16 @@ +# newer versions go on top +- version: "3.0.0" + changes: + - description: Remove required variable + type: enhancement + link: http://some.url +- version: "2.0.0" + changes: + - description: Changed to input pkg + type: enhancement + link: http://some.url +- version: "1.0.0" + changes: + - description: test + type: enhancement + link: http://some.url diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/docs/README.md b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/docs/README.md new file mode 100644 index 0000000000000..9f29c89e0f5ef --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/docs/README.md @@ -0,0 +1 @@ +# Custom Logs \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/fields/input.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/fields/input.yml new file mode 100644 index 0000000000000..f5851c64b6b3a --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/fields/input.yml @@ -0,0 +1,4 @@ +- name: input.name + type: constant_keyword + description: Sample field to be added. + value: logs \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-logo.svg b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-logo.svg new file mode 100644 index 0000000000000..6268dd88f3b3d --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-screenshot.png b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/img/sample-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d7a56a3ecc078c38636698cefba33f86291dd178 GIT binary patch literal 18849 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

}qal5$moSACwfNXLXG5|3R0AtBcN` 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 literal 0 HcmV?d00001 diff --git a/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/manifest.yml b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/manifest.yml new file mode 100644 index 0000000000000..37452fc08a02f --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/fixtures/test_packages/integration_to_input/3.0.0/manifest.yml @@ -0,0 +1,45 @@ +format_version: 1.0.0 +name: integration_to_input +title: Custom Logs +description: >- + This package goes from an integration package to an input package +type: input +version: 3.0.0 +license: basic +categories: + - custom +policy_templates: + - name: logs + type: logs + title: Custom log file + description: Collect your custom log files. + input: logfile + template_path: input.yml.hbs + vars: + - name: paths + type: text + title: Paths + multi: true + required: true + show_user: true + - name: tags + type: text + title: Tags + multi: true + required: false + show_user: false + - name: ignore_older + type: text + title: Ignore events older than + required: false + default: 72h +icons: + - src: "/img/sample-logo.svg" + type: "image/svg+xml" +screenshots: + - src: "/img/sample-screenshot.png" + title: "Sample screenshot" + size: "600x600" + type: "image/png" +owner: + github: elastic/integrations \ No newline at end of file diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts b/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts index bad75e9746e6a..11f315237024f 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts @@ -9,16 +9,21 @@ import { UpgradePackagePolicyDryRunResponse, UpgradePackagePolicyResponse, } from '@kbn/fleet-plugin/common/types'; +import { sortBy } from 'lodash'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; import { setupFleetAndAgents } from '../agents/services'; +const expectIdArraysEqual = (arr1: any[], arr2: any[]) => { + expect(sortBy(arr1, 'id')).to.eql(sortBy(arr2, 'id')); +}; + export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); - + const es = getService('es'); function withTestPackage(name: string, version: string) { const pkgRoute = `/api/fleet/epm/packages/${name}/${version}`; before(async function () { @@ -30,6 +35,25 @@ export default function (providerContext: FtrProviderContext) { }); } + const getInstallationSavedObject = async (name: string, version: string) => { + const res = await supertest.get(`/api/fleet/epm/packages/${name}-${version}`).expect(200); + return res.body.item.savedObject.attributes; + }; + + const getComponentTemplate = async (name: string) => { + try { + const { component_templates: templates } = await es.cluster.getComponentTemplate({ name }); + + return templates?.[0] || null; + } catch (e) { + if (e.statusCode === 404) { + return null; + } + + throw e; + } + }; + describe('Package Policy - upgrade', async function () { skipIfNoDockerRegistry(providerContext); let agentPolicyId: string; @@ -1226,5 +1250,118 @@ export default function (providerContext: FtrProviderContext) { }); }); }); + + describe('when upgrading from an integration package to an input package where no required variable has been added', function () { + withTestPackage('integration_to_input', '3.0.0'); + const POLICY_COUNT = 5; + let packagePolicyIds: string[] = []; + let expectedAssets: Array<{ type: string; id: string }> = []; + beforeEach(async function () { + packagePolicyIds = []; + expectedAssets = []; + const { body: agentPolicyResponse } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Another Test policy', + namespace: 'default', + }) + .expect(200); + + agentPolicyId = agentPolicyResponse.item.id; + + const createPackagePolicy = async (id: string) => { + const { body: packagePolicyResponse } = await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + policy_id: agentPolicyId, + package: { + name: 'integration_to_input', + version: '1.0.0', + }, + name: 'integration_to_input-' + id, + description: '', + namespace: 'default', + inputs: { + 'logs-logfile': { + enabled: true, + streams: { + 'integration_to_input.log': { + enabled: true, + vars: { + paths: ['/tmp/test.log'], + 'data_stream.dataset': 'somedataset' + id, + custom: '', + }, + }, + }, + }, + }, + }); + + packagePolicyIds.push(packagePolicyResponse.item.id); + expectedAssets.push( + { id: `logs-somedataset${id}-3.0.0`, type: 'ingest_pipeline' }, + { id: `logs-somedataset${id}`, type: 'index_template' }, + { id: `logs-somedataset${id}@package`, type: 'component_template' }, + { id: `logs-somedataset${id}@custom`, type: 'component_template' } + ); + }; + + await Promise.all( + new Array(POLICY_COUNT).fill(0).map((_, i) => createPackagePolicy(i.toString())) + ); + }); + + afterEach(async function () { + await supertest + .post(`/api/fleet/package_policies/delete`) + .set('kbn-xsrf', 'xxxx') + .send({ packagePolicyIds }) + .expect(200); + + await supertest + .post('/api/fleet/agent_policies/delete') + .set('kbn-xsrf', 'xxxx') + .send({ agentPolicyId }) + .expect(200); + }); + + describe('dry run', function () { + it('returns a diff with no errors', async function () { + const { body }: { body: UpgradePackagePolicyDryRunResponse } = await supertest + .post(`/api/fleet/package_policies/upgrade/dryrun`) + .set('kbn-xsrf', 'xxxx') + .send({ + packagePolicyIds, + }) + .expect(200); + expect(body[0].hasErrors).to.be(false); + }); + }); + + describe('upgrade', function () { + it('upgrades the package policy and creates the correct templates', async function () { + await supertest + .post(`/api/fleet/package_policies/upgrade`) + .set('kbn-xsrf', 'xxxx') + .send({ + packagePolicyIds, + }) + .expect(200); + + const installation = await getInstallationSavedObject('integration_to_input', '3.0.0'); + expectIdArraysEqual(installation.installed_es, expectedAssets); + + for (const expectedAsset of expectedAssets) { + if (expectedAsset.type === 'component_template') { + const componentTemplate = await getComponentTemplate(expectedAsset.id); + expect(componentTemplate).not.to.be(null); + } + } + }); + }); + }); }); } From 15d558c36b0d0be096c5c555dcc025749176cebd Mon Sep 17 00:00:00 2001 From: Lola Date: Wed, 15 Feb 2023 11:08:04 -0500 Subject: [PATCH 028/210] [Cloud Posture][Benchmark] add avatar to username in benchmark table (#150824) ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. Issue [139](https://github.com/elastic/kibana/issues/151141) Render the `CreatedBy` cell with the user avatar and username image --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/pages/benchmarks/benchmarks_table.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx index ed276dc374744..dcef8163f028b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx @@ -12,6 +12,8 @@ import { type Pagination, type CriteriaWithPagination, EuiLink, + EuiToolTip, + EuiAvatar, } from '@elastic/eui'; import React from 'react'; import { generatePath } from 'react-router-dom'; @@ -144,6 +146,15 @@ const BENCHMARKS_TABLE_COLUMNS: Array> = [ truncateText: true, sortable: true, 'data-test-subj': TEST_SUBJ.BENCHMARKS_TABLE_COLUMNS.CREATED_BY, + render: (createdBy: Benchmark['package_policy']['created_by']) => { + return ( + + + {createdBy} + + + ); + }, }, { field: 'package_policy.created_at', From 5b0b09b59b81a96ebe5719b48cdf492e642fcdde Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Wed, 15 Feb 2023 17:13:27 +0100 Subject: [PATCH 029/210] [Saved Objects] Remove deprecation notices from server SO types (#150839) ## Summary After merging https://github.com/elastic/kibana/pull/148979 there are a few interfaces in the server-side code that export a reference to a deprecated SO type. In this PR we fix them by updating a few imports to use the non-deprecated SO type. Additionally, we resolve a potential circular reference issue between `core-saved-objects-server` and `core-saved-objects-api-server` by "moving" saved objects and related types exports to `core-saved-objects-api-server` --- .../saved-objects/core-saved-objects-api-server/index.ts | 8 ++++++++ .../core-saved-objects-api-server/src/apis/base.ts | 2 +- .../core-saved-objects-api-server/src/apis/bulk_create.ts | 6 ++---- .../core-saved-objects-api-server/src/apis/create.ts | 2 +- .../core-saved-objects-api-server/src/apis/find.ts | 2 +- .../core-saved-objects-api-server/src/apis/resolve.ts | 2 +- .../core-saved-objects-api-server/src/apis/update.ts | 2 +- .../src/saved_objects_client.ts | 2 +- .../core/saved-objects/core-saved-objects-server/index.ts | 3 ++- 9 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/core/saved-objects/core-saved-objects-api-server/index.ts b/packages/core/saved-objects/core-saved-objects-api-server/index.ts index 467b5891ffb85..812ae5376d775 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/index.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/index.ts @@ -60,3 +60,11 @@ export type { SavedObjectsBulkDeleteStatus, SavedObjectsBulkDeleteResponse, } from './src/apis'; + +export type { + SavedObject, + SavedObjectAttribute, + SavedObjectAttributes, + SavedObjectAttributeSingle, + SavedObjectReference, +} from '@kbn/core-saved-objects-common/src/server_types'; diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts index eb80df8d96d44..08cc7580278cd 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { SavedObject } from '@kbn/core-saved-objects-common'; +import type { SavedObject } from '../..'; /** * Base options used by most of the savedObject APIs. diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts index 7a38a909155ff..9e945990141e1 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts @@ -6,10 +6,8 @@ * Side Public License, v 1. */ -import type { - SavedObjectReference, - SavedObjectsMigrationVersion, -} from '@kbn/core-saved-objects-common'; +import type { SavedObjectsMigrationVersion } from '@kbn/core-saved-objects-common'; +import type { SavedObjectReference } from '../..'; /** * Object parameters for the bulk create operation diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts index f26e75bd37865..cf472754acaee 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts @@ -7,7 +7,7 @@ */ import type { SavedObjectsMigrationVersion } from '@kbn/core-saved-objects-common'; -import type { SavedObjectReference } from '@kbn/core-saved-objects-common'; +import type { SavedObjectReference } from '../..'; import type { MutatingOperationRefreshSetting, SavedObjectsBaseOptions } from './base'; /** diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts index 5c57043754161..311be05126a76 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts @@ -11,7 +11,7 @@ import type { AggregationsAggregationContainer, SortResults, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { SavedObject } from '@kbn/core-saved-objects-common'; +import type { SavedObject } from '../..'; type KueryNode = any; diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts index 9e764053392a5..b15075a67aa0c 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { SavedObject } from '@kbn/core-saved-objects-common'; +import type { SavedObject } from '../..'; /** * diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts index db494d9d8d7a7..66f7103102b6e 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { SavedObjectReference, SavedObject } from '@kbn/core-saved-objects-common'; +import type { SavedObject, SavedObjectReference } from '../..'; import type { MutatingOperationRefreshSetting, SavedObjectsBaseOptions } from './base'; /** diff --git a/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts b/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts index a7ba3f2818971..bdc3f3950f8cc 100644 --- a/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts +++ b/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { SavedObject } from '@kbn/core-saved-objects-common'; +import type { SavedObject } from '..'; import type { SavedObjectsBaseOptions, SavedObjectsFindOptions, diff --git a/packages/core/saved-objects/core-saved-objects-server/index.ts b/packages/core/saved-objects/core-saved-objects-server/index.ts index e3a56f4ce0529..d3d2ffe71aa34 100644 --- a/packages/core/saved-objects/core-saved-objects-server/index.ts +++ b/packages/core/saved-objects/core-saved-objects-server/index.ts @@ -122,10 +122,11 @@ export type { SavedObjectModelTransformationResult, } from './src/model_version'; +// We re-export the SavedObject types here for convenience. export type { SavedObject, SavedObjectAttribute, SavedObjectAttributes, SavedObjectAttributeSingle, SavedObjectReference, -} from '@kbn/core-saved-objects-common/src/server_types'; +} from '@kbn/core-saved-objects-api-server'; From ab3ecbd4874835064aaf305ee687945ea18f68b4 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Wed, 15 Feb 2023 17:23:43 +0100 Subject: [PATCH 030/210] [Files] Add missing interface (#151323) ## Summary Part of https://github.com/elastic/kibana/pull/146284 it looks like the `HttpEndpointDefinition` interface was accidentally deleted. Due to the transient/cross file nature of `.d.ts` file this was not marked as an issue by TS. --- packages/shared-ux/file/types/index.d.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/shared-ux/file/types/index.d.ts b/packages/shared-ux/file/types/index.d.ts index ff9d83b2cfddc..9d63635179ca5 100644 --- a/packages/shared-ux/file/types/index.d.ts +++ b/packages/shared-ux/file/types/index.d.ts @@ -23,6 +23,19 @@ export type FileStatus = 'AWAITING_UPLOAD' | 'UPLOADING' | 'READY' | 'UPLOAD_ERR */ export type FileCompression = 'br' | 'gzip' | 'deflate' | 'none'; +/** Definition for an endpoint that the File's service will generate */ +interface HttpEndpointDefinition { + /** + * Specify the tags for this endpoint. + * + * @example + * // This will enable access control to this endpoint for users that can access "myApp" only. + * { tags: ['access:myApp'] } + * + */ + tags: string[]; +} + /** * File metadata fields are defined per the ECS specification: * From 82b44b6399189542a9b50b57506eaef8d1ca774b Mon Sep 17 00:00:00 2001 From: Carlos Crespo Date: Wed, 15 Feb 2023 17:33:03 +0100 Subject: [PATCH 031/210] [Infrastructure UI] Fix condition to show k8s dashboard link (#151279) ## Summary closes #151273 This PR fixes a bug when the Kubernetes Dashboards link is displayed. It will only show when Kubernetes Pods is selected ![out](https://user-images.githubusercontent.com/2767137/219019027-2b6624e9-2396-4950-b34e-5090ff170577.gif) ### How to test it - Connect your local kibana to an oblt cluster - Go to Observability > Inventory UI - Change "Show" and select Kubernetes Pods to see the link and any other option to hide it. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/bottom_drawer.tsx | 26 ++++++++++++------- .../inventory_view/components/layout.tsx | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/bottom_drawer.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/bottom_drawer.tsx index 4ebaeb0d874b7..bb3a92d1e04ea 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/bottom_drawer.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/bottom_drawer.tsx @@ -11,6 +11,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiButtonEmpty, EuiPanel } from '@elastic/eu import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { useUiTracker } from '@kbn/observability-plugin/public'; import useLocalStorage from 'react-use/lib/useLocalStorage'; +import { InventoryItemType } from '../../../../../common/inventory_models/types'; import { TryItButton } from '../../../../components/try_it_button'; import { useWaffleOptionsContext } from '../hooks/use_waffle_options'; import { InfraFormatter } from '../../../../lib/lib'; @@ -27,6 +28,7 @@ interface Props { interval: string; formatter: InfraFormatter; view: string; + nodeType: InventoryItemType; } const LOCAL_STORAGE_KEY = 'inventoryUI:k8sDashboardClicked'; @@ -57,7 +59,7 @@ const KubernetesButton = () => { /> ); }; -export const BottomDrawer = ({ interval, formatter, view }: Props) => { +export const BottomDrawer = ({ interval, formatter, view, nodeType }: Props) => { const { timelineOpen, changeTimelineOpen } = useWaffleOptionsContext(); const [isOpen, setIsOpen] = useState(Boolean(timelineOpen)); @@ -73,11 +75,15 @@ export const BottomDrawer = ({ interval, formatter, view }: Props) => { changeTimelineOpen(!isOpen); }, [isOpen, trackDrawerOpen, changeTimelineOpen]); - return view === 'table' ? ( - - - - ) : ( + if (view === 'table') { + return nodeType === 'pod' ? ( + + + + ) : null; + } + + return ( @@ -91,9 +97,11 @@ export const BottomDrawer = ({ interval, formatter, view }: Props) => { {isOpen ? hideHistory : showHistory} - - - + {nodeType === 'pod' && ( + + + + )} - + ); } From 75812a725d0c5b4636f8908b00e64d0f2aa2c9f6 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 15 Feb 2023 18:56:20 +0200 Subject: [PATCH 032/210] [Cloud Security] Fix search bar UI for rule page (#151294) --- .../public/pages/rules/rules_table_header.tsx | 50 ++----------------- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 4 files changed, 5 insertions(+), 51 deletions(-) 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 5f6e3887647c8..2cebe21dac53d 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 @@ -5,8 +5,7 @@ * 2.0. */ import React, { useState } from 'react'; -import { EuiFieldSearch, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; +import { EuiFieldSearch, EuiFlexItem } from '@elastic/eui'; import useDebounce from 'react-use/lib/useDebounce'; import { i18n } from '@kbn/i18n'; @@ -17,28 +16,8 @@ interface RulesTableToolbarProps { isSearching: boolean; } -interface CounterProps { - count: number; -} - -export const RulesTableHeader = ({ - search, - totalRulesCount, - searchValue, - isSearching, -}: RulesTableToolbarProps) => ( -

- - - - -
-); - -const Counters = ({ total }: { total: number }) => ( - - - +export const RulesTableHeader = ({ search, searchValue, isSearching }: RulesTableToolbarProps) => ( + ); const SEARCH_DEBOUNCE_MS = 300; @@ -53,11 +32,11 @@ const SearchField = ({ useDebounce(() => search(localValue), SEARCH_DEBOUNCE_MS, [localValue]); return ( - + setLocalValue(e.target.value)} @@ -67,22 +46,3 @@ const SearchField = ({ ); }; - -const TotalRulesCount = ({ count }: CounterProps) => ( - }} - /> -); - -const RulesCountBold = ({ count }: CounterProps) => ( - <> - {count} - - -); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 8182c753868a9..cbca7476239df 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10024,8 +10024,6 @@ "xpack.csp.findings.distributionBar.showingPageOfTotalLabel": "Affichage de {pageStart}-{pageEnd} sur {total} {type}", "xpack.csp.findings.findingsTableCell.addFilterButton": "Ajouter un filtre {field}", "xpack.csp.findings.findingsTableCell.addNegateFilterButton": "Ajouter un filtre {field} négatif", - "xpack.csp.rules.header.rulesCountLabel": "{count, plural, one { règle} other { règles}}", - "xpack.csp.rules.header.totalRulesCount": "Affichage des {rules}", "xpack.csp.rules.rulePageHeader.pageHeaderTitle": "Règles - {integrationName}", "xpack.csp.subscriptionNotAllowed.promptDescription": "Pour utiliser ces fonctionnalités de sécurité du cloud, vous devez {link}.", "xpack.csp.benchmarks.benchmarkEmptyState.integrationsNotFoundTitle": "Aucune intégration Benchmark trouvée", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ece6fbb1d5c31..89c266124c0d7 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10013,8 +10013,6 @@ "xpack.csp.findings.distributionBar.showingPageOfTotalLabel": "{total}件中{pageStart}-{pageEnd}件の{type}を表示しています", "xpack.csp.findings.findingsTableCell.addFilterButton": "{field}フィルターを追加", "xpack.csp.findings.findingsTableCell.addNegateFilterButton": "{field}否定フィルターを追加", - "xpack.csp.rules.header.rulesCountLabel": "{count, plural, other {個のルール}}", - "xpack.csp.rules.header.totalRulesCount": "{rules}を表示しています", "xpack.csp.rules.rulePageHeader.pageHeaderTitle": "ルール - {integrationName}", "xpack.csp.subscriptionNotAllowed.promptDescription": "これらのクラウドセキュリティ機能を使用するには、{link}する必要があります。", "xpack.csp.benchmarks.benchmarkEmptyState.integrationsNotFoundTitle": "ベンチマーク統合が見つかりません", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a8acae9de7337..bc922fb478e65 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10028,8 +10028,6 @@ "xpack.csp.findings.distributionBar.showingPageOfTotalLabel": "正在显示第 {pageStart}-{pageEnd} 个(共 {total} 个){type}", "xpack.csp.findings.findingsTableCell.addFilterButton": "添加 {field} 筛选", "xpack.csp.findings.findingsTableCell.addNegateFilterButton": "添加 {field} 作废筛选", - "xpack.csp.rules.header.rulesCountLabel": "{count, plural, other { 规则}}", - "xpack.csp.rules.header.totalRulesCount": "正在显示 {rules}", "xpack.csp.rules.rulePageHeader.pageHeaderTitle": "规则 - {integrationName}", "xpack.csp.subscriptionNotAllowed.promptDescription": "要使用这些云安全功能,您必须 {link}。", "xpack.csp.benchmarks.benchmarkEmptyState.integrationsNotFoundTitle": "找不到基准集成", From 1ef33c488f24135dcedec87ecd5be9c2470ec1de Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 15 Feb 2023 18:58:05 +0200 Subject: [PATCH 033/210] [Cloud Security] Center evaluation badge text (#151261) --- .../public/components/csp_evaluation_badge.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/csp_evaluation_badge.tsx b/x-pack/plugins/cloud_security_posture/public/components/csp_evaluation_badge.tsx index 24ca4cd4fe4eb..c1e1b52963805 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/csp_evaluation_badge.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/csp_evaluation_badge.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { EuiBadge, type EuiBadgeProps } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { css } from '@emotion/react'; interface Props { type: 'passed' | 'failed'; @@ -15,7 +16,7 @@ interface Props { // 'fail' / 'pass' are same chars length, but not same width size. // 46px is used to make sure the badge is always the same width. -const BADGE_WIDTH = 46; +const BADGE_WIDTH = '46px'; const getColor = (type: Props['type']): EuiBadgeProps['color'] => { if (type === 'passed') return 'success'; @@ -26,7 +27,11 @@ const getColor = (type: Props['type']): EuiBadgeProps['color'] => { export const CspEvaluationBadge = ({ type }: Props) => ( {type === 'failed' ? ( From 6c828cf72df77cd8d5d8573b1d0e87fb6784610e Mon Sep 17 00:00:00 2001 From: Nathan L Smith Date: Wed, 15 Feb 2023 11:03:59 -0600 Subject: [PATCH 034/210] Add `ReactQueryDevTools` to cases (#151180) I noticed the fleet plugin is also using React Query and has the dev tools enabled. This adds the same to cases. ![CleanShot 2023-02-14 at 11 01 37](https://user-images.githubusercontent.com/9912/218806318-5acb21d3-e24b-46e3-8b2e-2c845e658ab3.gif) --- .../all_cases/selector_modal/all_cases_selector_modal.tsx | 2 ++ x-pack/plugins/cases/public/components/app/routes.tsx | 2 ++ .../public/components/create/flyout/create_case_flyout.tsx | 2 ++ x-pack/plugins/cases/public/components/recent_cases/index.tsx | 2 ++ 4 files changed, 8 insertions(+) diff --git a/x-pack/plugins/cases/public/components/all_cases/selector_modal/all_cases_selector_modal.tsx b/x-pack/plugins/cases/public/components/all_cases/selector_modal/all_cases_selector_modal.tsx index c04ea59dfebc5..6a9629699734b 100644 --- a/x-pack/plugins/cases/public/components/all_cases/selector_modal/all_cases_selector_modal.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/selector_modal/all_cases_selector_modal.tsx @@ -16,6 +16,7 @@ import { } from '@elastic/eui'; import styled from 'styled-components'; import { QueryClientProvider } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import type { Case, CaseStatusWithAllStatus } from '../../../../common/ui/types'; import * as i18n from '../../../common/translations'; import { AllCasesList } from '../all_cases_list'; @@ -56,6 +57,7 @@ export const AllCasesSelectorModal = React.memo( return isModalOpen ? ( + {i18n.SELECT_CASE_TITLE} diff --git a/x-pack/plugins/cases/public/components/app/routes.tsx b/x-pack/plugins/cases/public/components/app/routes.tsx index 1d8b4249899e5..8f544a900b879 100644 --- a/x-pack/plugins/cases/public/components/app/routes.tsx +++ b/x-pack/plugins/cases/public/components/app/routes.tsx @@ -10,6 +10,7 @@ import { Redirect, Switch } from 'react-router-dom'; import { Route } from '@kbn/shared-ux-router'; import { QueryClientProvider } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { EuiLoadingSpinner } from '@elastic/eui'; import { AllCases } from '../all_cases'; import { CreateCase } from '../create'; @@ -53,6 +54,7 @@ const CasesRoutesComponent: React.FC = ({ return ( + diff --git a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx index d20d14c574698..3cab988a5ab74 100644 --- a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx +++ b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.tsx @@ -10,6 +10,7 @@ import styled, { createGlobalStyle } from 'styled-components'; import { EuiFlyout, EuiFlyoutHeader, EuiTitle, EuiFlyoutBody } from '@elastic/eui'; import { QueryClientProvider } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import type { CasePostRequest } from '../../../../common/api'; import * as i18n from '../translations'; import type { Case } from '../../../../common/ui/types'; @@ -80,6 +81,7 @@ export const CreateCaseFlyout = React.memo( return ( + { return ( + ); From ceb01e4100673a7f6eea600f983a369e0dadb522 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 15 Feb 2023 11:15:17 -0600 Subject: [PATCH 035/210] [build] Fix chromium install path (#151208) Fixes an issue introduced in 1b8581540295fde746dae6b4a09d74fb5821bfef Currently during builds chromium is installed to the `x-pack/reporting` directory. Under the new package management system plugins are installed in node_modules, and the reporting plugin is not able to find the path of chromium. This patches the path. Ideally we could install chromium before the plugin is installed as a package, but plugin installation is run once for all platforms, and later reporting is run for each platform. https://buildkite.com/elastic/kibana-artifacts-snapshot/builds/1222 --- src/dev/build/tasks/install_chromium.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/dev/build/tasks/install_chromium.js b/src/dev/build/tasks/install_chromium.js index 542b36086d3ff..23e7ba6b5998c 100644 --- a/src/dev/build/tasks/install_chromium.js +++ b/src/dev/build/tasks/install_chromium.js @@ -39,7 +39,10 @@ export const InstallChromium = { log: log.write.bind(log), }; - const path = build.resolvePathForPlatform(platform, 'x-pack/plugins/screenshotting/chromium'); + const path = build.resolvePathForPlatform( + platform, + 'node_modules/@kbn/screenshotting-plugin/chromium' + ); await install(logger, pkg, path); } }, From 02eccd8081cec5dc036f389675ad470915637a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20=C3=81brah=C3=A1m?= Date: Wed, 15 Feb 2023 18:17:16 +0100 Subject: [PATCH 036/210] [Security Solution] Fix flaky policy list page integration test (#150204) ## Summary This PR updates the Policy List (used to be unit but now) integration tests with the modifications that have been implemented since the test was skipped, and tried to fix the flakiness. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../integration_tests/policy_list.test.tsx | 101 +++++++++--------- .../services/policies/test_mock_utils.ts | 22 ++-- 2 files changed, 62 insertions(+), 61 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/integration_tests/policy_list.test.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/integration_tests/policy_list.test.tsx index 3709e2dad8378..369df34fdff4a 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/integration_tests/policy_list.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/integration_tests/policy_list.test.tsx @@ -6,32 +6,36 @@ */ import React from 'react'; -import { act, waitFor, fireEvent } from '@testing-library/react'; +import { act, waitFor } from '@testing-library/react'; import type { AppContextTestRender } from '../../../../../common/mock/endpoint'; import { createAppRootMockRenderer } from '../../../../../common/mock/endpoint'; import { sendGetEndpointSpecificPackagePolicies } from '../../../../services/policies/policies'; import { sendGetEndpointSpecificPackagePoliciesMock } from '../../../../services/policies/test_mock_utils'; import { PolicyList } from '../policy_list'; -import { sendBulkGetAgentPolicyList } from '../../../../services/policies/ingest'; import type { GetPolicyListResponse } from '../../types'; import { getEndpointListPath, getPoliciesPath } from '../../../../common/routing'; import { APP_UI_ID } from '../../../../../../common/constants'; +import { useUserPrivileges } from '../../../../../common/components/user_privileges'; +import userEvent from '@testing-library/user-event'; +import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; jest.mock('../../../../services/policies/policies'); -jest.mock('../../../../services/policies/ingest'); +jest.mock('../../../../../common/components/user_privileges'); const getPackagePolicies = sendGetEndpointSpecificPackagePolicies as jest.Mock; +const useUserPrivilegesMock = useUserPrivileges as jest.Mock; -const mockedSendBulkGetAgentPolicies = sendBulkGetAgentPolicyList as jest.Mock; - -// FLAKY: https://github.com/elastic/kibana/issues/143436 -describe.skip('When on the policy list page', () => { +describe('When on the policy list page', () => { let render: () => ReturnType; let renderResult: ReturnType; let history: AppContextTestRender['history']; let mockedContext: AppContextTestRender; beforeEach(() => { + useUserPrivilegesMock.mockReturnValue({ + endpointPrivileges: { canReadEndpointList: true, canAccessFleet: true, loading: false }, + }); + mockedContext = createAppRootMockRenderer(); ({ history } = mockedContext); render = () => (renderResult = mockedContext.render()); @@ -58,39 +62,36 @@ describe.skip('When on the policy list page', () => { afterEach(() => { getPackagePolicies.mockReset(); }); - it('should show the empty page', () => { - expect(renderResult.getByTestId('emptyPolicyTable')).toBeTruthy(); + it('should show the empty page', async () => { + await waitFor(() => { + expect(renderResult.getByTestId('emptyPolicyTable')).toBeTruthy(); + }); }); it('should show instruction text and a button to add the Endpoint Security integration', async () => { - expect( - renderResult.findByText( - 'From this page, you’ll be able to view and manage the Elastic Defend Integration policies in your environment running Elastic Defend.' - ) - ).toBeTruthy(); await waitFor(() => { + expect( + renderResult.getByText( + 'From this page, you’ll be able to view and manage the Elastic Defend Integration policies in your environment running Elastic Defend.' + ) + ).toBeTruthy(); + expect(renderResult.getByTestId('onboardingStartButton')).toBeTruthy(); }); }); }); describe('and data exists', () => { - const policies: GetPolicyListResponse = sendGetEndpointSpecificPackagePoliciesMock(); + const policies: GetPolicyListResponse = sendGetEndpointSpecificPackagePoliciesMock({ + agentsPerPolicy: 4, + }); beforeEach(async () => { getPackagePolicies.mockReturnValue(policies); - mockedSendBulkGetAgentPolicies.mockReturnValue({ - items: [ - { package_policies: [{ id: policies.items[0].id }], agents: 4 }, - { package_policies: [{ id: policies.items[1].id }], agents: 2 }, - { package_policies: [{ id: policies.items[2].id }], agents: 5 }, - { package_policies: [{ id: policies.items[3].id }], agents: 1 }, - { package_policies: [{ id: policies.items[4].id }], agents: 3 }, - ], - }); render(); await waitFor(() => { expect(sendGetEndpointSpecificPackagePolicies).toHaveBeenCalled(); - expect(sendBulkGetAgentPolicyList).toHaveBeenCalled(); + expect(getPackagePolicies).toHaveBeenCalled(); + expect(renderResult.getByTestId('policyListTable')).toBeTruthy(); }); }); it('should display the policy list table', () => { @@ -120,7 +121,7 @@ describe.skip('When on the policy list page', () => { expect(firstUpdatedByName.textContent).toEqual(expectedAvatarName); }); - it('should show the correct endpoint count', async () => { + it('should show the correct endpoint count', () => { const endpointCount = renderResult.getAllByTestId('policyEndpointCountLink'); expect(endpointCount[0].textContent).toBe('4'); }); @@ -141,15 +142,16 @@ describe.skip('When on the policy list page', () => { }, }; const endpointCount = renderResult.getAllByTestId('policyEndpointCountLink')[0]; - fireEvent.click(endpointCount); + userEvent.click(endpointCount); expect(history.location.pathname).toEqual(getEndpointListPath({ name: 'endpointList' })); expect(history.location.search).toEqual(filterByPolicyQuery); expect(history.location.state).toEqual(backLink); // reset test to the policy page - history.push('/administration/policies'); - render(); + act(() => { + history.push('/administration/policies'); + }); }); }); describe('pagination', () => { @@ -166,7 +168,6 @@ describe.skip('When on the policy list page', () => { await waitFor(() => { expect(getPackagePolicies).toHaveBeenCalled(); expect(sendGetEndpointSpecificPackagePolicies).toHaveBeenCalled(); - expect(mockedSendBulkGetAgentPolicies).toHaveBeenCalled(); }); }); afterEach(() => { @@ -176,15 +177,14 @@ describe.skip('When on the policy list page', () => { await waitFor(() => { expect(renderResult.getByTestId('pagination-button-next')).toBeTruthy(); }); - act(() => { - renderResult.getByTestId('pagination-button-next').click(); - }); + userEvent.click(renderResult.getByTestId('pagination-button-next')); await waitFor(() => { expect(getPackagePolicies).toHaveBeenCalledTimes(2); }); expect(getPackagePolicies.mock.calls[1][1].query).toEqual({ page: 2, perPage: 10, + withAgentCount: true, }); }); @@ -192,13 +192,9 @@ describe.skip('When on the policy list page', () => { await waitFor(() => { expect(renderResult.getByTestId('tablePaginationPopoverButton')).toBeTruthy(); }); - act(() => { - renderResult.getByTestId('tablePaginationPopoverButton').click(); - }); - const pageSize20 = await renderResult.findByTestId('tablePagination-20-rows'); - act(() => { - pageSize20.click(); - }); + userEvent.click(renderResult.getByTestId('tablePaginationPopoverButton')); + await waitForEuiPopoverOpen(); + userEvent.click(renderResult.getByTestId('tablePagination-20-rows')); await waitFor(() => { expect(getPackagePolicies).toHaveBeenCalledTimes(2); @@ -206,6 +202,7 @@ describe.skip('When on the policy list page', () => { expect(getPackagePolicies.mock.calls[1][1].query).toEqual({ page: 1, perPage: 20, + withAgentCount: true, }); }); @@ -218,6 +215,7 @@ describe.skip('When on the policy list page', () => { expect(getPackagePolicies.mock.calls[1][1].query).toEqual({ page: 3, perPage: 50, + withAgentCount: true, }); }); }); @@ -231,19 +229,15 @@ describe.skip('When on the policy list page', () => { }); // change pageSize - await act(async () => { - (await renderResult.getByTestId('tablePaginationPopoverButton')).click(); - }); - const pageSize10 = await renderResult.findByTestId('tablePagination-10-rows'); - act(() => { - pageSize10.click(); - }); + userEvent.click(renderResult.getByTestId('tablePaginationPopoverButton')); + await waitForEuiPopoverOpen(); + userEvent.click(renderResult.getByTestId('tablePagination-10-rows')); - expect(sendGetEndpointSpecificPackagePolicies).toHaveBeenLastCalledWith(expect.any(Object), { - query: { - page: 1, - perPage: 10, - }, + await waitFor(() => { + expect(sendGetEndpointSpecificPackagePolicies).toHaveBeenLastCalledWith( + expect.any(Object), + { query: { page: 1, perPage: 10, withAgentCount: true } } + ); }); }); it('should set page to 1 if user tries to force an invalid page number', async () => { @@ -257,6 +251,7 @@ describe.skip('When on the policy list page', () => { expect(getPackagePolicies.mock.calls[1][1].query).toEqual({ page: 1, perPage: 20, + withAgentCount: true, }); }); it('should set page size to 10 (management default) if page size is set to anything other than 10, 20, or 50', async () => { @@ -270,6 +265,7 @@ describe.skip('When on the policy list page', () => { expect(getPackagePolicies.mock.calls[1][1].query).toEqual({ page: 2, perPage: 10, + withAgentCount: true, }); }); it('should set page to last defined page number value if multiple values exist for page in the URL, i.e. page=2&page=4&page=3 then page is set to 3', async () => { @@ -283,6 +279,7 @@ describe.skip('When on the policy list page', () => { expect(getPackagePolicies.mock.calls[1][1].query).toEqual({ page: 3, perPage: 10, + withAgentCount: true, }); }); }); diff --git a/x-pack/plugins/security_solution/public/management/services/policies/test_mock_utils.ts b/x-pack/plugins/security_solution/public/management/services/policies/test_mock_utils.ts index af7a531d5a352..b2a34318bf704 100644 --- a/x-pack/plugins/security_solution/public/management/services/policies/test_mock_utils.ts +++ b/x-pack/plugins/security_solution/public/management/services/policies/test_mock_utils.ts @@ -7,17 +7,21 @@ import { FleetPackagePolicyGenerator } from '../../../../common/endpoint/data_generators/fleet_package_policy_generator'; import type { GetPolicyListResponse } from '../../pages/policy/types'; -export const sendGetEndpointSpecificPackagePoliciesMock = ( - params: { - page: number; - perPage: number; - count: number; - } = { page: 1, perPage: 20, count: 5 } -): GetPolicyListResponse => { - const { page, perPage, count } = params; +export const sendGetEndpointSpecificPackagePoliciesMock = ({ + page = 1, + perPage = 20, + count = 5, + agentsPerPolicy, +}: { + page?: number; + perPage?: number; + count?: number; + agentsPerPolicy?: number; +} = {}): GetPolicyListResponse => { const generator = new FleetPackagePolicyGenerator(); const items = Array.from({ length: count }, (_, index) => { - const policy = generator.generateEndpointPackagePolicy(); + const overrides = agentsPerPolicy !== undefined ? { agents: agentsPerPolicy } : undefined; + const policy = generator.generateEndpointPackagePolicy(overrides); policy.name += ` ${index}`; return policy; }); From 79b0f04d77b80dafc1de24748ad68a7d2acad3c8 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 15 Feb 2023 19:19:18 +0200 Subject: [PATCH 037/210] [Unified search] Add locale to the date picker (#151258) ## Summary Part of https://github.com/elastic/kibana/issues/151051 Passes the locale to the Date Picker Component image --- .../public/query_string_input/query_bar_top_row.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index d4d35f2545b73..8d1e733cc0593 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -405,6 +405,7 @@ export const QueryBarTopRow = React.memo( onRefreshChange={props.onRefreshChange} showUpdateButton={false} recentlyUsedRanges={recentlyUsedRanges} + locale={i18n.getLocale()} commonlyUsedRanges={commonlyUsedRanges} dateFormat={uiSettings.get('dateFormat')} isAutoRefreshOnly={showAutoRefreshOnly} From 1535378b45667fc986fa676ce641ff0fa1e54dc6 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 15 Feb 2023 19:49:35 +0200 Subject: [PATCH 038/210] [Cloud Security] Close rule flyout on outside click (#151313) --- .../cloud_security_posture/public/pages/rules/rules_flyout.tsx | 1 + 1 file changed, 1 insertion(+) 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 eb6f2aeb526f7..ca7afa76984dc 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 @@ -55,6 +55,7 @@ export const RuleFlyout = ({ onClose, rule }: RuleFlyoutProps) => { ownFocus={false} onClose={onClose} data-test-subj={TEST_SUBJECTS.CSP_RULES_FLYOUT_CONTAINER} + outsideClickCloses > From 12ae1a966be9bb18a2fc0d17afe18883c77c9c55 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Feb 2023 11:56:50 -0600 Subject: [PATCH 039/210] Update dependency chromedriver to v110 (main) (#151329) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [chromedriver](https://togithub.com/giggio/node-chromedriver) | [`^109.0.0` -> `^110.0.0`](https://renovatebot.com/diffs/npm/chromedriver/109.0.0/110.0.0) | [![age](https://badges.renovateapi.com/packages/npm/chromedriver/110.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/chromedriver/110.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/chromedriver/110.0.0/compatibility-slim/109.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/chromedriver/110.0.0/confidence-slim/109.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
giggio/node-chromedriver ### [`v110.0.0`](https://togithub.com/giggio/node-chromedriver/compare/109.0.0...110.0.0) [Compare Source](https://togithub.com/giggio/node-chromedriver/compare/109.0.0...110.0.0)
--- ### 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 [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/elastic/kibana). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 996b65f226ccb..61441db1fd8ef 100644 --- a/package.json +++ b/package.json @@ -1309,7 +1309,7 @@ "backport": "^8.9.7", "callsites": "^3.1.0", "chance": "1.0.18", - "chromedriver": "^109.0.0", + "chromedriver": "^110.0.0", "clean-webpack-plugin": "^3.0.0", "compression-webpack-plugin": "^4.0.0", "copy-webpack-plugin": "^6.0.2", diff --git a/yarn.lock b/yarn.lock index 188c3c05eec83..164ecb0e54d82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11797,10 +11797,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromedriver@^109.0.0: - version "109.0.0" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-109.0.0.tgz#9407af72f2a01bb19e6db1b85cfc87eb3acd4f6b" - integrity sha512-jdmBq11IUwfThLFiygGTZ89qbROSQI4bICQjvOVQy2Bqr1LwC+MFkhwyZp3YG99eehQbZuTlQmmfCZBfpewTNA== +chromedriver@^110.0.0: + version "110.0.0" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-110.0.0.tgz#d00a1a2976592d933faa8e9839e97692922834a4" + integrity sha512-Le6q8xrA/3fAt+g8qiN0YjsYxINIhQMC6wj9X3W5L77uN4NspEzklDrqYNwBcEVn7PcAEJ73nLlS7mTyZRspHA== dependencies: "@testim/chrome-version" "^1.1.3" axios "^1.2.1" From 168b9fd395bc9e2729e8b98046cfcffdcfb69aff Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 15 Feb 2023 10:00:47 -0800 Subject: [PATCH 040/210] [DOCS] Fix automated screenshot for ML rule notification (#151239) Co-authored-by: Robert Oskamp --- .../anomaly_detection/generate_anomaly_alerts.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/x-pack/test/screenshot_creation/apps/ml_docs/anomaly_detection/generate_anomaly_alerts.ts b/x-pack/test/screenshot_creation/apps/ml_docs/anomaly_detection/generate_anomaly_alerts.ts index 5246eee8c5ab3..57bae974ce273 100644 --- a/x-pack/test/screenshot_creation/apps/ml_docs/anomaly_detection/generate_anomaly_alerts.ts +++ b/x-pack/test/screenshot_creation/apps/ml_docs/anomaly_detection/generate_anomaly_alerts.ts @@ -69,6 +69,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const commonScreenshots = getService('commonScreenshots'); const browser = getService('browser'); const actions = getService('actions'); + const testSubjects = getService('testSubjects'); const screenshotDirectories = ['ml_docs', 'anomaly_detection']; @@ -105,13 +106,14 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await ml.navigation.navigateToAlertsAndAction(); await pageObjects.triggersActionsUI.clickCreateAlertButton(); await ml.alerting.setRuleName('test-ecommerce'); - - await ml.alerting.openNotifySelection(); + const searchBox = await testSubjects.find('ruleSearchField'); + await searchBox.click(); + await searchBox.clearValue(); + await searchBox.type('ml'); + await searchBox.pressKeys(browser.keys.ENTER); + await ml.testExecution.logTestStep('take screenshot'); await commonScreenshots.takeScreenshot('ml-rule', screenshotDirectories, 1920, 1400); - // close popover - await browser.pressKeys(browser.keys.ESCAPE); - await ml.alerting.selectAnomalyDetectionJobHealthAlertType(); await ml.alerting.selectJobs([testJobId]); await ml.testExecution.logTestStep('take screenshot'); From e5895c30ba3eb21eb9121bf2007b0e9f55616c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Wed, 15 Feb 2023 19:02:46 +0100 Subject: [PATCH 041/210] [Defend Workflows] PoC of e2e endpoint testing (#148893) --- .buildkite/ftr_configs.yml | 1 + .../index_fleet_endpoint_policy.ts | 6 ++- x-pack/plugins/security_solution/package.json | 2 + .../public/management/cypress.config.ts | 2 +- .../cypress/e2e/endpoint/endpoints.cy.ts | 19 ++++++++ .../artifact_tabs_in_policy_details.cy.ts | 12 ++--- .../e2e/{ => mocked_data}/artifacts.cy.ts | 10 ++--- .../e2e/{ => mocked_data}/endpoints.cy.ts | 4 +- .../management/cypress_endpoint.config.ts | 41 +++++++++++++++++ .../scripts/endpoint/common/fleet_services.ts | 2 +- .../endpoint/common/localhost_services.ts | 24 ++++++---- .../endpoint_agent_runner/elastic_endpoint.ts | 7 ++- .../endpoint_agent_runner/fleet_server.ts | 18 +++++--- .../endpoint/endpoint_agent_runner/runtime.ts | 5 ++- .../endpoint/endpoint_agent_runner/types.ts | 4 +- x-pack/test/defend_workflows_cypress/agent.ts | 35 +++++++++++++++ .../test/defend_workflows_cypress/config.ts | 7 +++ .../endpoint_config.ts | 32 ++++++++++++++ .../defend_workflows_cypress/fleet_server.ts | 37 ++++++++++++++++ .../resource_manager.ts | 15 +++++++ .../test/defend_workflows_cypress/runner.ts | 44 ++++++++++++++++++- x-pack/test/defend_workflows_cypress/utils.ts | 41 +++++++++++++++++ 22 files changed, 330 insertions(+), 38 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/endpoints.cy.ts rename x-pack/plugins/security_solution/public/management/cypress/e2e/{ => mocked_data}/artifact_tabs_in_policy_details.cy.ts (95%) rename x-pack/plugins/security_solution/public/management/cypress/e2e/{ => mocked_data}/artifacts.cy.ts (93%) rename x-pack/plugins/security_solution/public/management/cypress/e2e/{ => mocked_data}/endpoints.cy.ts (82%) create mode 100644 x-pack/plugins/security_solution/public/management/cypress_endpoint.config.ts create mode 100644 x-pack/test/defend_workflows_cypress/agent.ts create mode 100644 x-pack/test/defend_workflows_cypress/endpoint_config.ts create mode 100644 x-pack/test/defend_workflows_cypress/fleet_server.ts create mode 100644 x-pack/test/defend_workflows_cypress/resource_manager.ts create mode 100644 x-pack/test/defend_workflows_cypress/utils.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 2bfcce064d5ce..62a42c4d4335e 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -26,6 +26,7 @@ disabled: - x-pack/test/functional_enterprise_search/cypress.config.ts - x-pack/test/defend_workflows_cypress/cli_config.ts - x-pack/test/defend_workflows_cypress/config.ts + - x-pack/test/defend_workflows_cypress/endpoint_config.ts - x-pack/test/defend_workflows_cypress/visual_config.ts - x-pack/test/osquery_cypress/cli_config.ts - x-pack/test/osquery_cypress/config.ts diff --git a/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_fleet_endpoint_policy.ts b/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_fleet_endpoint_policy.ts index 1c2326832402e..312809e2f48e4 100644 --- a/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_fleet_endpoint_policy.ts +++ b/x-pack/plugins/security_solution/common/endpoint/data_loaders/index_fleet_endpoint_policy.ts @@ -16,6 +16,7 @@ import type { DeleteAgentPolicyResponse, PostDeletePackagePoliciesResponse, } from '@kbn/fleet-plugin/common'; +import { kibanaPackageJson } from '@kbn/repo-info'; import { AGENT_POLICY_API_ROUTES, PACKAGE_POLICY_API_ROUTES } from '@kbn/fleet-plugin/common'; import type { PolicyData } from '../types'; import { policyFactory as policyConfigFactory } from '../models/policy_config'; @@ -33,7 +34,7 @@ export interface IndexedFleetEndpointPolicyResponse { export const indexFleetEndpointPolicy = async ( kbnClient: KbnClient, policyName: string, - endpointPackageVersion: string = '8.0.0', + endpointPackageVersion: string = kibanaPackageJson.version, agentPolicyName?: string ): Promise => { const response: IndexedFleetEndpointPolicyResponse = { @@ -47,6 +48,7 @@ export const indexFleetEndpointPolicy = async ( agentPolicyName || `Policy for ${policyName} (${Math.random().toString(36).substr(2, 5)})`, description: `Policy created with endpoint data generator (${policyName})`, namespace: 'default', + monitoring_enabled: ['logs', 'metrics'], }; let agentPolicy: AxiosResponse; @@ -86,7 +88,7 @@ export const indexFleetEndpointPolicy = async ( namespace: 'default', package: { name: 'endpoint', - title: 'endpoint', + title: 'Elastic Defend', version: endpointPackageVersion, }, }; diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index b886836ec9b18..6bee06261023a 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -26,6 +26,8 @@ "cypress:dw:open-as-ci": "node ../../../scripts/functional_tests --config ../../test/defend_workflows_cypress/visual_config.ts", "cypress:dw:run": "yarn cypress run --config-file ./public/management/cypress.config.ts", "cypress:dw:run-as-ci": "node ../../../scripts/functional_tests --config ../../test/defend_workflows_cypress/cli_config.ts", + "cypress:dw:endpoint:open": "yarn cypress open --config-file ./public/management/cypress_endpoint.config.ts", + "cypress:dw:endpoint:open-as-ci": "node ../../../scripts/functional_tests --config ../../test/defend_workflows_cypress/endpoint_config.ts", "junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/", "test:generate": "node scripts/endpoint/resolver_generator" } diff --git a/x-pack/plugins/security_solution/public/management/cypress.config.ts b/x-pack/plugins/security_solution/public/management/cypress.config.ts index 6ff919ea7effe..feaa2c8459e46 100644 --- a/x-pack/plugins/security_solution/public/management/cypress.config.ts +++ b/x-pack/plugins/security_solution/public/management/cypress.config.ts @@ -34,7 +34,7 @@ export default defineCypressConfig({ e2e: { baseUrl: 'http://localhost:5620', supportFile: 'public/management/cypress/support/e2e.ts', - specPattern: 'public/management/cypress/e2e/**/*.cy.{js,jsx,ts,tsx}', + specPattern: 'public/management/cypress/e2e/mocked_data/*.cy.{js,jsx,ts,tsx}', experimentalRunAllSpecs: true, }, }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/endpoints.cy.ts new file mode 100644 index 0000000000000..3eec34c967c21 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoint/endpoints.cy.ts @@ -0,0 +1,19 @@ +/* + * Copyright 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 { login } from '../../tasks/login'; + +describe('Endpoints page', () => { + beforeEach(() => { + login(); + }); + + it('Loads the endpoints page', () => { + cy.visit('/app/security/administration/endpoints'); + cy.contains('Hosts running Elastic Defend').should('exist'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifact_tabs_in_policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts similarity index 95% rename from x-pack/plugins/security_solution/public/management/cypress/e2e/artifact_tabs_in_policy_details.cy.ts rename to x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts index a74eba6274034..02c11cd441e3f 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifact_tabs_in_policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts @@ -5,18 +5,18 @@ * 2.0. */ -import { getEndpointSecurityPolicyManager } from '../../../../scripts/endpoint/common/roles_users/endpoint_security_policy_manager'; -import { getArtifactsListTestsData } from '../fixtures/artifacts_page'; +import { getEndpointSecurityPolicyManager } from '../../../../../scripts/endpoint/common/roles_users/endpoint_security_policy_manager'; +import { getArtifactsListTestsData } from '../../fixtures/artifacts_page'; import { createPerPolicyArtifact, createArtifactList, removeAllArtifacts, removeExceptionsList, yieldFirstPolicyID, -} from '../tasks/artifacts'; -import { loadEndpointDataForEventFiltersIfNeeded } from '../tasks/load_endpoint_data'; -import { login, loginWithCustomRole, loginWithRole, ROLE } from '../tasks/login'; -import { performUserActions } from '../tasks/perform_user_actions'; +} from '../../tasks/artifacts'; +import { loadEndpointDataForEventFiltersIfNeeded } from '../../tasks/load_endpoint_data'; +import { login, loginWithCustomRole, loginWithRole, ROLE } from '../../tasks/login'; +import { performUserActions } from '../../tasks/perform_user_actions'; const loginWithPrivilegeAll = () => { loginWithRole(ROLE.endpoint_security_policy_manager); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts similarity index 93% rename from x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts.cy.ts rename to x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts index 166d506514553..6c8c345674d20 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/artifacts.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts @@ -5,12 +5,12 @@ * 2.0. */ -import { login, loginWithRole, ROLE } from '../tasks/login'; +import { login, loginWithRole, ROLE } from '../../tasks/login'; -import { getArtifactsListTestsData } from '../fixtures/artifacts_page'; -import { removeAllArtifacts } from '../tasks/artifacts'; -import { performUserActions } from '../tasks/perform_user_actions'; -import { loadEndpointDataForEventFiltersIfNeeded } from '../tasks/load_endpoint_data'; +import { getArtifactsListTestsData } from '../../fixtures/artifacts_page'; +import { removeAllArtifacts } from '../../tasks/artifacts'; +import { performUserActions } from '../../tasks/perform_user_actions'; +import { loadEndpointDataForEventFiltersIfNeeded } from '../../tasks/load_endpoint_data'; const loginWithWriteAccess = (url: string) => { loginWithRole(ROLE.analyst_hunter); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoints.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts similarity index 82% rename from x-pack/plugins/security_solution/public/management/cypress/e2e/endpoints.cy.ts rename to x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts index 508b606f24263..35b931675a6c2 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/endpoints.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/endpoints.cy.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { login } from '../tasks/login'; -import { runEndpointLoaderScript } from '../tasks/run_endpoint_loader'; +import { login } from '../../tasks/login'; +import { runEndpointLoaderScript } from '../../tasks/run_endpoint_loader'; describe('Endpoints page', () => { before(() => { diff --git a/x-pack/plugins/security_solution/public/management/cypress_endpoint.config.ts b/x-pack/plugins/security_solution/public/management/cypress_endpoint.config.ts new file mode 100644 index 0000000000000..d1487b6d990d6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/cypress_endpoint.config.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 { defineCypressConfig } from '@kbn/cypress-config'; + +// eslint-disable-next-line import/no-default-export +export default defineCypressConfig({ + defaultCommandTimeout: 60000, + execTimeout: 120000, + pageLoadTimeout: 12000, + + retries: { + runMode: 1, + openMode: 0, + }, + + screenshotsFolder: + '../../../target/kibana-security-solution/public/management/cypress/screenshots', + trashAssetsBeforeRuns: false, + video: false, + viewportHeight: 900, + viewportWidth: 1440, + experimentalStudio: true, + + env: { + 'cypress-react-selector': { + root: '#security-solution-app', + }, + }, + + e2e: { + baseUrl: 'http://localhost:5620', + supportFile: 'public/management/cypress/support/e2e.ts', + specPattern: 'public/management/cypress/e2e/endpoint/*.cy.{js,jsx,ts,tsx}', + experimentalRunAllSpecs: true, + }, +}); 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 effa09db0c388..1f4d28cecc569 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 @@ -5,6 +5,7 @@ * 2.0. */ +import { pick } from 'lodash'; import type { Client, estypes } from '@elastic/elasticsearch'; import type { Agent, @@ -14,7 +15,6 @@ import type { GetAgentsResponse, } from '@kbn/fleet-plugin/common'; import { AGENT_API_ROUTES, agentPolicyRouteService, AGENTS_INDEX } from '@kbn/fleet-plugin/common'; -import { pick } from 'lodash'; import { ToolingLog } from '@kbn/tooling-log'; import type { KbnClient } from '@kbn/test'; import type { GetFleetServerHostsResponse } from '@kbn/fleet-plugin/common/types/rest_spec/fleet_server_hosts'; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts index 3b985f76dcd81..6a771d498f347 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/localhost_services.ts @@ -5,7 +5,7 @@ * 2.0. */ -import execa from 'execa'; +import { networkInterfaces } from 'node:os'; const POSSIBLE_LOCALHOST_VALUES: readonly string[] = [ 'localhost', @@ -15,13 +15,21 @@ const POSSIBLE_LOCALHOST_VALUES: readonly string[] = [ '0000:0000:0000:0000:0000:0000:0000:0000', ]; -export const getLocalhostRealIp = async (): Promise => { - // TODO:PT find better way to get host machine public IP. Command below is not x-platform - - return execa.commandSync( - "ipconfig getifaddr `scutil --dns |awk -F'[()]' '$1~/if_index/ {print $2;exit;}'`", - { shell: true } - ).stdout; +export const getLocalhostRealIp = (): string => { + for (const netInterfaceList of Object.values(networkInterfaces())) { + if (netInterfaceList) { + const netInterface = netInterfaceList.find( + (networkInterface) => + networkInterface.family === 'IPv4' && + networkInterface.internal === false && + networkInterface.address + ); + if (netInterface) { + return netInterface.address; + } + } + } + return '0.0.0.0'; }; export const isLocalhost = (hostname: string): boolean => { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts index e0938707ea5a0..dd123622d9c49 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/elastic_endpoint.ts @@ -44,7 +44,8 @@ interface ElasticArtifactSearchResponse { }; } -export const enrollEndpointHost = async () => { +export const enrollEndpointHost = async (): Promise => { + let vmName; const { log, kbnClient, @@ -80,7 +81,7 @@ export const enrollEndpointHost = async () => { throw new Error(`No API enrollment key found for policy id [${policyId}]`); } - const vmName = `${username}-dev-${uniqueId}`; + vmName = `${username}-dev-${uniqueId}`; log.info(`Creating VM named: ${vmName}`); @@ -166,6 +167,8 @@ export const enrollEndpointHost = async () => { } log.indent(-4); + + return vmName; }; const getAgentDownloadUrl = async (version: string): Promise => { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts index e8891f04aa6e9..5ca183e550c6f 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/fleet_server.ts @@ -44,7 +44,8 @@ import { } from '../common/fleet_services'; import { getRuntimeServices } from './runtime'; -export const runFleetServerIfNeeded = async () => { +export const runFleetServerIfNeeded = async (): Promise => { + let fleetServerContainerId; const { log, kibana: { isLocalhost: isKibanaOnLocalhost }, @@ -69,7 +70,7 @@ export const runFleetServerIfNeeded = async () => { await configureFleetIfNeeded(); } - await startFleetServerWithDocker({ + fleetServerContainerId = await startFleetServerWithDocker({ policyId: fleetServerAgentPolicyId, serviceToken, }); @@ -80,6 +81,8 @@ export const runFleetServerIfNeeded = async () => { } log.indent(-4); + + return fleetServerContainerId; }; const isFleetServerEnrolled = async () => { @@ -178,13 +181,14 @@ const generateFleetServiceToken = async (): Promise => { return serviceToken; }; -const startFleetServerWithDocker = async ({ +export const startFleetServerWithDocker = async ({ policyId, serviceToken, }: { policyId: string; serviceToken: string; }) => { + let containerId; const { log, localhostRealIp, @@ -256,16 +260,16 @@ const startFleetServerWithDocker = async ({ (This is ok if one was not running already)`); }); + await addFleetServerHostToFleetSettings(`https://${localhostRealIp}:8220`); + log.verbose(`docker arguments:\n${dockerArgs.join(' ')}`); - const containerId = (await execa('docker', dockerArgs)).stdout; + containerId = (await execa('docker', dockerArgs)).stdout; const fleetServerAgent = await waitForHostToEnroll(kbnClient, containerName); log.verbose(`Fleet server enrolled agent:\n${JSON.stringify(fleetServerAgent, null, 2)}`); - await addFleetServerHostToFleetSettings(`https://${localhostRealIp}:8220`); - log.info(`Done. Fleet Server is running and connected to Fleet. Container Name: ${containerName} Container Id: ${containerId} @@ -280,6 +284,8 @@ const startFleetServerWithDocker = async ({ } log.indent(-4); + + return containerId; }; const configureFleetIfNeeded = async () => { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/runtime.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/runtime.ts index 989b99690c4ec..24007b7ba3479 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/runtime.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/runtime.ts @@ -12,8 +12,9 @@ import type { RuntimeServices } from '../common/stack_services'; import { createRuntimeServices } from '../common/stack_services'; interface EndpointRunnerRuntimeServices extends RuntimeServices { - options: Required< - Omit + options: Omit< + StartRuntimeServicesOptions, + 'kibanaUrl' | 'elasticUrl' | 'username' | 'password' | 'log' >; } diff --git a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/types.ts b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/types.ts index 2af229bc74a57..09adc50b098af 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/types.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/endpoint_agent_runner/types.ts @@ -12,7 +12,7 @@ export interface StartRuntimeServicesOptions { elasticUrl: string; username: string; password: string; - version: string; - policy: string; + version?: string; + policy?: string; log?: ToolingLog; } diff --git a/x-pack/test/defend_workflows_cypress/agent.ts b/x-pack/test/defend_workflows_cypress/agent.ts new file mode 100644 index 0000000000000..c34eb728432c9 --- /dev/null +++ b/x-pack/test/defend_workflows_cypress/agent.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 execa from 'execa'; +import { ToolingLog } from '@kbn/tooling-log'; +import { enrollEndpointHost } from '@kbn/security-solution-plugin/scripts/endpoint/endpoint_agent_runner/elastic_endpoint'; +import { Manager } from './resource_manager'; + +export class AgentManager extends Manager { + private log: ToolingLog; + private vmName?: string; + constructor(log: ToolingLog) { + super(); + this.log = log; + this.vmName = undefined; + } + + public async setup() { + this.vmName = await enrollEndpointHost(); + } + + public cleanup() { + super.cleanup(); + this.log.info('Cleaning up the agent process'); + if (this.vmName) { + execa.commandSync(`multipass delete -p ${this.vmName}`); + + this.log.info('Agent process closed'); + } + } +} diff --git a/x-pack/test/defend_workflows_cypress/config.ts b/x-pack/test/defend_workflows_cypress/config.ts index 37d25c47825c2..a86916951c1fd 100644 --- a/x-pack/test/defend_workflows_cypress/config.ts +++ b/x-pack/test/defend_workflows_cypress/config.ts @@ -7,6 +7,7 @@ import { FtrConfigProviderContext } from '@kbn/test'; import { CA_CERT_PATH } from '@kbn/dev-utils'; +import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/localhost_services'; import { services } from './services'; export default async function ({ readConfigFile }: FtrConfigProviderContext) { @@ -17,6 +18,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('../functional/config.base.js') ); + const hostIp = getLocalhostRealIp(); + return { ...kibanaCommonTestsConfig.getAll(), @@ -41,6 +44,10 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { '--csp.strict=false', // define custom kibana server args here `--elasticsearch.ssl.certificateAuthorities=${CA_CERT_PATH}`, + `--xpack.fleet.agents.fleet_server.hosts=["https://${hostIp}:8220"]`, + `--xpack.fleet.agents.elasticsearch.host=http://${hostIp}:${kibanaCommonTestsConfig.get( + 'servers.elasticsearch.port' + )}`, // always install Endpoint package by default when Fleet sets up `--xpack.fleet.packages.0.name=endpoint`, `--xpack.fleet.packages.0.version=latest`, diff --git a/x-pack/test/defend_workflows_cypress/endpoint_config.ts b/x-pack/test/defend_workflows_cypress/endpoint_config.ts new file mode 100644 index 0000000000000..6dacf56791539 --- /dev/null +++ b/x-pack/test/defend_workflows_cypress/endpoint_config.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getLocalhostRealIp } from '@kbn/security-solution-plugin/scripts/endpoint/common/localhost_services'; +import { FtrConfigProviderContext } from '@kbn/test'; + +import { DefendWorkflowsCypressEndpointTestRunner } from './runner'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const defendWorkflowsCypressConfig = await readConfigFile(require.resolve('./config.ts')); + const config = defendWorkflowsCypressConfig.getAll(); + const hostIp = getLocalhostRealIp(); + + return { + ...config, + kbnTestServer: { + ...config.kbnTestServer, + serverArgs: [ + ...config.kbnTestServer.serverArgs, + `--xpack.fleet.agents.fleet_server.hosts=["https://${hostIp}:8220"]`, + `--xpack.fleet.agents.elasticsearch.host=http://${hostIp}:${defendWorkflowsCypressConfig.get( + 'servers.elasticsearch.port' + )}`, + ], + }, + testRunner: DefendWorkflowsCypressEndpointTestRunner, + }; +} diff --git a/x-pack/test/defend_workflows_cypress/fleet_server.ts b/x-pack/test/defend_workflows_cypress/fleet_server.ts new file mode 100644 index 0000000000000..c24cd9bb17e4c --- /dev/null +++ b/x-pack/test/defend_workflows_cypress/fleet_server.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import execa from 'execa'; +import { ToolingLog } from '@kbn/tooling-log'; +import { runFleetServerIfNeeded } from '@kbn/security-solution-plugin/scripts/endpoint/endpoint_agent_runner/fleet_server'; +import { Manager } from './resource_manager'; + +export class FleetManager extends Manager { + private fleetContainerId?: string; + private log: ToolingLog; + + constructor(log: ToolingLog) { + super(); + this.log = log; + } + + public async setup(): Promise { + this.fleetContainerId = await runFleetServerIfNeeded(); + } + + public cleanup() { + super.cleanup(); + + this.log.info('Removing old fleet config'); + if (this.fleetContainerId) { + this.log.info('Closing fleet process'); + + execa.sync('docker', ['kill', this.fleetContainerId]); + this.log.info('Fleet server process closed'); + } + } +} diff --git a/x-pack/test/defend_workflows_cypress/resource_manager.ts b/x-pack/test/defend_workflows_cypress/resource_manager.ts new file mode 100644 index 0000000000000..0c030ebfa9f56 --- /dev/null +++ b/x-pack/test/defend_workflows_cypress/resource_manager.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +const CLEANUP_EVENTS = ['SIGINT', 'exit', 'uncaughtException', 'unhandledRejection']; +export class Manager { + constructor() { + const cleanup = () => this.cleanup(); + CLEANUP_EVENTS.forEach((ev) => process.on(ev, cleanup)); + } + cleanup() {} +} diff --git a/x-pack/test/defend_workflows_cypress/runner.ts b/x-pack/test/defend_workflows_cypress/runner.ts index 2053a6b67b3bc..fddf7867ba28c 100644 --- a/x-pack/test/defend_workflows_cypress/runner.ts +++ b/x-pack/test/defend_workflows_cypress/runner.ts @@ -8,8 +8,46 @@ import { resolve } from 'path'; import Url from 'url'; import { withProcRunner } from '@kbn/dev-proc-runner'; - +import { startRuntimeServices } from '@kbn/security-solution-plugin/scripts/endpoint/endpoint_agent_runner/runtime'; import { FtrProviderContext } from './ftr_provider_context'; +import { AgentManager } from './agent'; +import { FleetManager } from './fleet_server'; +import { getLatestAvailableAgentVersion } from './utils'; + +async function withFleetAgent( + { getService }: FtrProviderContext, + runner: (runnerEnv: Record) => Promise +) { + const log = getService('log'); + const config = getService('config'); + const kbnClient = getService('kibanaServer'); + + const elasticUrl = Url.format(config.get('servers.elasticsearch')); + const kibanaUrl = Url.format(config.get('servers.kibana')); + const username = config.get('servers.elasticsearch.username'); + const password = config.get('servers.elasticsearch.password'); + + await startRuntimeServices({ + log, + elasticUrl, + kibanaUrl, + username, + password, + version: await getLatestAvailableAgentVersion(kbnClient), + }); + + const fleetManager = new FleetManager(log); + const agentManager = new AgentManager(log); + + await fleetManager.setup(); + await agentManager.setup(); + try { + await runner({}); + } finally { + agentManager.cleanup(); + fleetManager.cleanup(); + } +} export async function DefendWorkflowsCypressCliTestRunner(context: FtrProviderContext) { await startDefendWorkflowsCypress(context, 'dw:run'); @@ -19,6 +57,10 @@ export async function DefendWorkflowsCypressVisualTestRunner(context: FtrProvide await startDefendWorkflowsCypress(context, 'dw:open'); } +export async function DefendWorkflowsCypressEndpointTestRunner(context: FtrProviderContext) { + await withFleetAgent(context, () => startDefendWorkflowsCypress(context, 'dw:endpoint:open')); +} + function startDefendWorkflowsCypress(context: FtrProviderContext, cypressCommand: string) { const log = context.getService('log'); const config = context.getService('config'); diff --git a/x-pack/test/defend_workflows_cypress/utils.ts b/x-pack/test/defend_workflows_cypress/utils.ts new file mode 100644 index 0000000000000..2f0b8baa1e856 --- /dev/null +++ b/x-pack/test/defend_workflows_cypress/utils.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 axios from 'axios'; +import semver from 'semver'; +import { filter } from 'lodash'; +import { KbnClient } from '@kbn/test'; + +/** + * Returns the Agent version that is available for install (will check `artifacts-api.elastic.co/v1/versions`) + * that is equal to or less than `maxVersion`. + * @param maxVersion + */ + +export const getLatestAvailableAgentVersion = async (kbnClient: KbnClient): Promise => { + const kbnStatus = await kbnClient.status.get(); + const agentVersions = await axios + .get('https://artifacts-api.elastic.co/v1/versions') + .then((response) => + filter(response.data.versions, (versionString) => !versionString.includes('SNAPSHOT')) + ); + + let version = + semver.maxSatisfying(agentVersions, `<=${kbnStatus.version.number}`) ?? + kbnStatus.version.number; + + // Add `-SNAPSHOT` if version indicates it was from a snapshot or the build hash starts + // with `xxxxxxxxx` (value that seems to be present when running kibana from source) + if ( + kbnStatus.version.build_snapshot || + kbnStatus.version.build_hash.startsWith('XXXXXXXXXXXXXXX') + ) { + version += '-SNAPSHOT'; + } + + return version; +}; From 2205ba74886577f818bd43ece5c0817daea56b5b Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Wed, 15 Feb 2023 18:12:27 +0000 Subject: [PATCH 042/210] [SecuritySolution] Fix index filters (#151069) ## Summary Relevant issues: https://github.com/elastic/kibana/pull/148681/files#r1104594568 https://github.com/elastic/kibana/pull/136407 Please enable feature flag: chartEmbeddablesEnabled ### Steps to verify: 1. Check the selected index patterns you have from the sourcerer 2. Inspect KPIs on host / network / users pages, make sure it matches the selected index patterns from the sourcerer 3. Click `...` button of each KPIs and `Open in Lens`, Inspect > request, and check the displayed index patterns matches index filters. ### Before: Indices were missing from the inspect panel: Screenshot 2023-02-13 at 19 50 47 Index patterns were missing from Lens inspect panel: Screenshot 2023-02-13 at 19 51 14 ### After: Screenshot 2023-02-13 at 19 57 46 Screenshot 2023-02-13 at 19 58 11 ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../search_source/search_source.test.ts | 26 +++++ .../search/search_source/search_source.ts | 18 +++- .../__snapshots__/authentication.test.ts.snap | 34 +++--- .../common/__snapshots__/event.test.ts.snap | 34 +++--- .../__snapshots__/external_alert.test.ts.snap | 34 +++--- .../alerts_by_status_donut.test.ts.snap | 34 +++--- .../alerts_histogram.test.ts.snap | 68 ++++++------ .../__snapshots__/alerts_table.test.ts.snap | 102 +++++++++--------- .../risk_score_over_time_area.test.ts.snap | 12 +-- .../__snapshots__/kpi_host_area.test.ts.snap | 34 +++--- .../kpi_host_metric.test.ts.snap | 34 +++--- .../kpi_unique_ips_area.test.ts.snap | 34 +++--- .../kpi_unique_ips_bar.test.ts.snap | 34 +++--- ...unique_ips_destination_metric.test.ts.snap | 34 +++--- .../kpi_unique_ips_source_metric.test.ts.snap | 34 +++--- .../dns_top_domains.test.ts.snap | 34 +++--- .../kpi_dns_queries.test.ts.snap | 34 +++--- .../kpi_network_events.test.ts.snap | 34 +++--- .../kpi_tls_handshakes.test.ts.snap | 34 +++--- .../kpi_unique_flow_ids.test.ts.snap | 34 +++--- .../kpi_unique_private_ips_area.test.ts.snap | 34 +++--- .../kpi_unique_private_ips_bar.test.ts.snap | 34 +++--- ...rivate_ips_destination_metric.test.ts.snap | 34 +++--- ...que_private_ips_source_metric.test.ts.snap | 34 +++--- .../kpi_total_users_area.test.ts.snap | 34 +++--- .../kpi_total_users_metric.test.ts.snap | 34 +++--- ...authentication_metric_failure.test.ts.snap | 34 +++--- ...kpi_user_authentications_area.test.ts.snap | 34 +++--- .../kpi_user_authentications_bar.test.ts.snap | 34 +++--- ...uthentications_metric_success.test.ts.snap | 34 +++--- .../use_lens_attributes.test.tsx | 6 +- .../use_lens_attributes.tsx | 2 +- 32 files changed, 560 insertions(+), 524 deletions(-) diff --git a/src/plugins/data/common/search/search_source/search_source.test.ts b/src/plugins/data/common/search/search_source/search_source.test.ts index f06a15edf044a..af83fb6c6de4a 100644 --- a/src/plugins/data/common/search/search_source/search_source.test.ts +++ b/src/plugins/data/common/search/search_source/search_source.test.ts @@ -163,6 +163,32 @@ describe('SearchSource', () => { expect(searchSource.getActiveIndexFilter()).toMatchObject(['auditbeat-*']); }); + test('pass _index from filter - phrases filter', () => { + const filter: Filter[] = [ + { + meta: { + type: 'phrases', + key: '_index', + params: ['auditbeat-*', 'packetbeat-*'], + alias: null, + negate: false, + disabled: false, + }, + query: { + bool: { + should: [ + { match_phrase: { _index: 'auditbeat-*' } }, + { match_phrase: { _index: 'packetbeat-*' } }, + ], + minimum_should_match: 1, + }, + }, + }, + ]; + searchSource.setField('filter', filter); + expect(searchSource.getActiveIndexFilter()).toMatchObject(['auditbeat-*', 'packetbeat-*']); + }); + test('pass _index from query and filter with negate equals to true', () => { const filter = [ { diff --git a/src/plugins/data/common/search/search_source/search_source.ts b/src/plugins/data/common/search/search_source/search_source.ts index 0d79d469f40c8..be7bef0339f3f 100644 --- a/src/plugins/data/common/search/search_source/search_source.ts +++ b/src/plugins/data/common/search/search_source/search_source.ts @@ -82,7 +82,13 @@ import { } from 'rxjs/operators'; import { defer, EMPTY, from, lastValueFrom, Observable } from 'rxjs'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { buildEsQuery, Filter, isOfQueryType, isPhraseFilter } from '@kbn/es-query'; +import { + buildEsQuery, + Filter, + isOfQueryType, + isPhraseFilter, + isPhrasesFilter, +} from '@kbn/es-query'; import { fieldWildcardFilter } from '@kbn/kibana-utils-plugin/common'; import { getHighlightRequest } from '@kbn/field-formats-plugin/common'; import type { DataView } from '@kbn/data-views-plugin/common'; @@ -279,12 +285,16 @@ export class SearchSource { }, []) ?? []; const activeIndexPattern = filters?.reduce((acc, f) => { - if (isPhraseFilter(f)) { + const isPhraseFilterType = isPhraseFilter(f); + const isPhrasesFilterType = isPhrasesFilter(f); + const filtersToChange = isPhraseFilterType ? f.meta.params?.query : f.meta.params; + const filtersArray = Array.isArray(filtersToChange) ? filtersToChange : [filtersToChange]; + if (isPhraseFilterType || isPhrasesFilterType) { if (f.meta.key === '_index' && f.meta.disabled === false) { if (f.meta.negate === false) { - return concat(acc, f.meta.params?.query ?? f.meta.params); + return concat(acc, filtersArray); } else { - return difference(acc, [f.meta.params?.query]); + return difference(acc, filtersArray); } } else { return acc; diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/authentication.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/authentication.test.ts.snap index a00e6517914da..7df379780a565 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/authentication.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/authentication.test.ts.snap @@ -124,23 +124,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -204,6 +187,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/event.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/event.test.ts.snap index ab1eed774e8aa..dbe4ca9818123 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/event.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/event.test.ts.snap @@ -68,23 +68,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -148,6 +131,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/external_alert.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/external_alert.test.ts.snap index 7d06e63032e95..6c56414f3c05e 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/external_alert.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/__snapshots__/external_alert.test.ts.snap @@ -104,23 +104,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -184,6 +167,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_by_status_donut.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_by_status_donut.test.ts.snap index 12de83c43fc33..93d3341b066c2 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_by_status_donut.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_by_status_donut.test.ts.snap @@ -91,23 +91,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -132,6 +115,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "internalReferences": Array [], "query": Object { diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_histogram.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_histogram.test.ts.snap index d0b6f7a79ce34..dda6e51c180a2 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_histogram.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_histogram.test.ts.snap @@ -94,23 +94,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -135,6 +118,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "internalReferences": Array [], "query": Object { @@ -253,23 +253,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -294,6 +277,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "internalReferences": Array [], "query": Object { diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_table.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_table.test.ts.snap index 58ecf5d44d015..c18b413cd2a57 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_table.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/alerts/__snapshots__/alerts_table.test.ts.snap @@ -94,23 +94,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -135,6 +118,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "internalReferences": Array [], "query": Object { @@ -284,23 +284,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -325,6 +308,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "internalReferences": Array [], "query": Object { @@ -450,23 +450,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -491,6 +474,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "internalReferences": Array [], "query": Object { diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/risk_scores/__snapshots__/risk_score_over_time_area.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/risk_scores/__snapshots__/risk_score_over_time_area.test.ts.snap index c178855402cc1..8a37b8b9fe54b 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/risk_scores/__snapshots__/risk_score_over_time_area.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/common/risk_scores/__snapshots__/risk_score_over_time_area.test.ts.snap @@ -96,16 +96,16 @@ Object { "meta": Object { "alias": null, "disabled": false, - "key": "host.id", + "key": "host.name", "negate": false, "params": Object { - "query": "123", + "query": "mockHost", }, "type": "phrase", }, "query": Object { "match_phrase": Object { - "host.id": "123", + "host.name": "mockHost", }, }, }, @@ -113,16 +113,16 @@ Object { "meta": Object { "alias": null, "disabled": false, - "key": "host.name", + "key": "host.id", "negate": false, "params": Object { - "query": "mockHost", + "query": "123", }, "type": "phrase", }, "query": Object { "match_phrase": Object { - "host.name": "mockHost", + "host.id": "123", }, }, }, diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_area.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_area.test.ts.snap index c8de37bfbd678..dd51f28c6c448 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_area.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_area.test.ts.snap @@ -52,23 +52,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -132,6 +115,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_metric.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_metric.test.ts.snap index e4328cb0178e2..1877d7d544a9a 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_metric.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_host_metric.test.ts.snap @@ -40,23 +40,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -120,6 +103,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_area.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_area.test.ts.snap index 18d0e8f86d936..f10087899d289 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_area.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_area.test.ts.snap @@ -86,23 +86,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -166,6 +149,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_bar.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_bar.test.ts.snap index ea60bad9c8efd..1f1cdf9bb04d5 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_bar.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_bar.test.ts.snap @@ -99,23 +99,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -179,6 +162,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_destination_metric.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_destination_metric.test.ts.snap index 48eff6c978975..4dd91ed447904 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_destination_metric.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_destination_metric.test.ts.snap @@ -40,23 +40,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -120,6 +103,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_source_metric.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_source_metric.test.ts.snap index 31f9e00156dd1..7e72be59b669c 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_source_metric.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/hosts/__snapshots__/kpi_unique_ips_source_metric.test.ts.snap @@ -40,23 +40,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -120,6 +103,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/dns_top_domains.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/dns_top_domains.test.ts.snap index a261abe99ffcf..278b3af5dc411 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/dns_top_domains.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/dns_top_domains.test.ts.snap @@ -96,23 +96,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -193,6 +176,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_dns_queries.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_dns_queries.test.ts.snap index 6629abc42f569..4484f4e776dc8 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_dns_queries.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_dns_queries.test.ts.snap @@ -83,23 +83,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -180,6 +163,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_network_events.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_network_events.test.ts.snap index e7fd2d8bf70a4..f10f59f8e5a73 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_network_events.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_network_events.test.ts.snap @@ -88,23 +88,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -185,6 +168,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_tls_handshakes.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_tls_handshakes.test.ts.snap index 250c1b1d02c35..e28dab070bd3a 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_tls_handshakes.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_tls_handshakes.test.ts.snap @@ -107,23 +107,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -204,6 +187,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_flow_ids.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_flow_ids.test.ts.snap index 05209c4a42444..03deef8e5eeb3 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_flow_ids.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_flow_ids.test.ts.snap @@ -71,23 +71,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -168,6 +151,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_area.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_area.test.ts.snap index de3a0dde9ef2f..71722765d8314 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_area.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_area.test.ts.snap @@ -93,23 +93,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -190,6 +173,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_bar.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_bar.test.ts.snap index 35f177ca4b357..455356e8cd5ae 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_bar.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_bar.test.ts.snap @@ -106,23 +106,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -203,6 +186,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_destination_metric.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_destination_metric.test.ts.snap index 6318b784c653e..aadbc3d380a23 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_destination_metric.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_destination_metric.test.ts.snap @@ -44,23 +44,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -141,6 +124,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_source_metric.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_source_metric.test.ts.snap index fae2f1c32e12a..20e51077ade8a 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_source_metric.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/network/__snapshots__/kpi_unique_private_ips_source_metric.test.ts.snap @@ -44,23 +44,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -141,6 +124,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_area.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_area.test.ts.snap index 3130c179fd779..43bc6ff353a42 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_area.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_area.test.ts.snap @@ -52,23 +52,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -110,6 +93,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_metric.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_metric.test.ts.snap index a513615dff945..6e22cc1876d6f 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_metric.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_total_users_metric.test.ts.snap @@ -39,23 +39,6 @@ Object { }, }, "filters": Array [ - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -97,6 +80,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentication_metric_failure.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentication_metric_failure.test.ts.snap index b14661069853b..587af046984d6 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentication_metric_failure.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentication_metric_failure.test.ts.snap @@ -68,23 +68,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -126,6 +109,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_area.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_area.test.ts.snap index ed3c98a263fca..9216cabe9f508 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_area.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_area.test.ts.snap @@ -119,23 +119,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -177,6 +160,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_bar.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_bar.test.ts.snap index 421ee7cd49801..5c814accf07c2 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_bar.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_bar.test.ts.snap @@ -124,23 +124,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -182,6 +165,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_metric_success.test.ts.snap b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_metric_success.test.ts.snap index bb021ebb9abe6..cf82e144bbb09 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_metric_success.test.ts.snap +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/lens_attributes/users/__snapshots__/kpi_user_authentications_metric_success.test.ts.snap @@ -69,23 +69,6 @@ Object { }, }, }, - Object { - "meta": Object { - "alias": null, - "disabled": false, - "key": "host.id", - "negate": false, - "params": Object { - "query": "123", - }, - "type": "phrase", - }, - "query": Object { - "match_phrase": Object { - "host.id": "123", - }, - }, - }, Object { "meta": Object { "alias": null, @@ -127,6 +110,23 @@ Object { }, }, }, + Object { + "meta": Object { + "alias": null, + "disabled": false, + "key": "host.id", + "negate": false, + "params": Object { + "query": "123", + }, + "type": "phrase", + }, + "query": Object { + "match_phrase": Object { + "host.id": "123", + }, + }, + }, ], "query": Object { "language": "kql", diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx index 6fd82d4b0e1e9..070bd87ad6d94 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.test.tsx @@ -69,10 +69,10 @@ describe('useLensAttributes', () => { expect(result?.current?.state.filters).toEqual([ ...getExternalAlertLensAttributes().state.filters, - ...filterFromSearchBar, ...getDetailsPageFilter('hosts', 'mockHost'), ...hostNameExistsFilter, ...getIndexFilters(['auditbeat-*']), + ...filterFromSearchBar, ]); }); @@ -95,10 +95,10 @@ describe('useLensAttributes', () => { expect(result?.current?.state.filters).toEqual([ ...getExternalAlertLensAttributes().state.filters, - ...filterFromSearchBar, ...getNetworkDetailsPageFilter('192.168.1.1'), ...sourceOrDestinationIpExistsFilter, ...getIndexFilters(['auditbeat-*']), + ...filterFromSearchBar, ]); }); @@ -121,9 +121,9 @@ describe('useLensAttributes', () => { expect(result?.current?.state.filters).toEqual([ ...getExternalAlertLensAttributes().state.filters, - ...filterFromSearchBar, ...getDetailsPageFilter('user', 'elastic'), ...getIndexFilters(['auditbeat-*']), + ...filterFromSearchBar, ]); }); diff --git a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx index 9b5ef16dddd22..2cadf8129ce07 100644 --- a/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx +++ b/x-pack/plugins/security_solution/public/common/components/visualization_actions/use_lens_attributes.tsx @@ -108,10 +108,10 @@ export const useLensAttributes = ({ ...(applyGlobalQueriesAndFilters ? { query } : {}), filters: [ ...attrs.state.filters, - ...(applyGlobalQueriesAndFilters ? filters : []), ...pageFilters, ...tabsFilters, ...indexFilters, + ...(applyGlobalQueriesAndFilters ? filters : []), ], }, references: attrs?.references?.map((ref: { id: string; name: string; type: string }) => ({ From 0a66d93f5c275f181bcd743f90acbf5234155c34 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 15 Feb 2023 20:31:48 +0200 Subject: [PATCH 043/210] [Cloud Security] Showing full `cloud.account.id` for cspm accounts (#151265) --- .../dashboard_sections/cluster_details_box.tsx | 18 ++++++++++++------ .../translations/translations/fr-FR.json | 2 -- .../translations/translations/ja-JP.json | 2 -- .../translations/translations/zh-CN.json | 2 -- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/cluster_details_box.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/cluster_details_box.tsx index 8e8bfc2ac0948..39fb171fbb64a 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/cluster_details_box.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/cluster_details_box.tsx @@ -32,14 +32,20 @@ const defaultClusterTitle = i18n.translate( const getClusterTitle = (cluster: Cluster) => { if (cluster.meta.benchmark.posture_type === 'cspm') return cluster.meta.cloud?.account.name; - if (cluster.meta.benchmark.posture_type === 'kspm') return cluster.meta.cluster?.name; + return cluster.meta.cluster?.name; +}; + +const getClusterId = (cluster: Cluster) => { + const assetIdentifierId = cluster.meta.assetIdentifierId; + if (cluster.meta.benchmark.posture_type === 'cspm') return assetIdentifierId; + return assetIdentifierId.slice(0, 6); }; export const ClusterDetailsBox = ({ cluster }: { cluster: Cluster }) => { const { euiTheme } = useEuiTheme(); const navToFindings = useNavigateFindings(); - const shortId = cluster.meta.assetIdentifierId.slice(0, 6); + const assetId = getClusterId(cluster); const title = getClusterTitle(cluster) || defaultClusterTitle; const handleClusterTitleClick = () => { @@ -60,10 +66,10 @@ export const ClusterDetailsBox = ({ cluster }: { cluster: Cluster }) => { @@ -75,10 +81,10 @@ export const ClusterDetailsBox = ({ cluster }: { cluster: Cluster }) => {
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index cbca7476239df..a756443479e41 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10018,8 +10018,6 @@ "xpack.csp.benchmarks.benchmarkEmptyState.integrationsNotFoundForNameTitle": " pour \"{name}\"", "xpack.csp.benchmarks.totalIntegrationsCountMessage": "Affichage de {pageCount} sur {totalCount, plural, one {# intégration} other {# intégrations}}", "xpack.csp.cloudPosturePage.errorRenderer.errorDescription": "{error} {statusCode} : {body}", - "xpack.csp.dashboard.benchmarkSection.clusterTitle": "{title} - {shortId}", - "xpack.csp.dashboard.benchmarkSection.clusterTitleTooltip.clusterTitle": "{title} - {shortId}", "xpack.csp.dashboard.benchmarkSection.lastEvaluatedTitle": "Dernière évaluation {dateFromNow}", "xpack.csp.findings.distributionBar.showingPageOfTotalLabel": "Affichage de {pageStart}-{pageEnd} sur {total} {type}", "xpack.csp.findings.findingsTableCell.addFilterButton": "Ajouter un filtre {field}", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 89c266124c0d7..5231f0235dfc0 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10007,8 +10007,6 @@ "xpack.csp.benchmarks.benchmarkEmptyState.integrationsNotFoundForNameTitle": " \"{name}\"", "xpack.csp.benchmarks.totalIntegrationsCountMessage": "{pageCount}/{totalCount, plural, other {#個の統合}}を表示しています", "xpack.csp.cloudPosturePage.errorRenderer.errorDescription": "{error} {statusCode}: {body}", - "xpack.csp.dashboard.benchmarkSection.clusterTitle": "{title} - {shortId}", - "xpack.csp.dashboard.benchmarkSection.clusterTitleTooltip.clusterTitle": "{title} - {shortId}", "xpack.csp.dashboard.benchmarkSection.lastEvaluatedTitle": "前回の評価{dateFromNow}", "xpack.csp.findings.distributionBar.showingPageOfTotalLabel": "{total}件中{pageStart}-{pageEnd}件の{type}を表示しています", "xpack.csp.findings.findingsTableCell.addFilterButton": "{field}フィルターを追加", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index bc922fb478e65..a9a79064c06fb 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10022,8 +10022,6 @@ "xpack.csp.benchmarks.benchmarkEmptyState.integrationsNotFoundForNameTitle": " 对于“{name}”", "xpack.csp.benchmarks.totalIntegrationsCountMessage": "正在显示 {pageCount}/{totalCount, plural, other {# 个集成}}", "xpack.csp.cloudPosturePage.errorRenderer.errorDescription": "{error} {statusCode}:{body}", - "xpack.csp.dashboard.benchmarkSection.clusterTitle": "{title} - {shortId}", - "xpack.csp.dashboard.benchmarkSection.clusterTitleTooltip.clusterTitle": "{title} - {shortId}", "xpack.csp.dashboard.benchmarkSection.lastEvaluatedTitle": "上次评估于 {dateFromNow}", "xpack.csp.findings.distributionBar.showingPageOfTotalLabel": "正在显示第 {pageStart}-{pageEnd} 个(共 {total} 个){type}", "xpack.csp.findings.findingsTableCell.addFilterButton": "添加 {field} 筛选", From 4e1b4c299ce6313edba6dfdcb959ccce142f498f Mon Sep 17 00:00:00 2001 From: "Christiane (Tina) Heiligers" Date: Wed, 15 Feb 2023 11:33:39 -0700 Subject: [PATCH 044/210] Core to SharedOX ownership Transfer: Updates code owners for handover to sharedUX (#151213) Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 14 +++++++------- .../core-chrome-browser-internal/kibana.jsonc | 2 +- .../core-chrome-browser-internal/package.json | 3 +-- .../chrome/core-chrome-browser-mocks/kibana.jsonc | 2 +- .../chrome/core-chrome-browser-mocks/package.json | 3 +-- .../core/chrome/core-chrome-browser/kibana.jsonc | 2 +- x-pack/plugins/banners/kibana.jsonc | 2 +- x-pack/plugins/global_search/kibana.jsonc | 2 +- x-pack/plugins/global_search_bar/kibana.jsonc | 2 +- .../plugins/global_search_providers/kibana.jsonc | 2 +- 10 files changed, 16 insertions(+), 18 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6b230be1aefeb..3dd0eae82192b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -46,7 +46,7 @@ packages/kbn-axe-config @elastic/kibana-qa packages/kbn-babel-preset @elastic/kibana-operations packages/kbn-babel-register @elastic/kibana-operations packages/kbn-babel-transform @elastic/kibana-operations -x-pack/plugins/banners @elastic/kibana-core +x-pack/plugins/banners @elastic/appex-sharedux packages/kbn-bazel-runner @elastic/kibana-operations examples/bfetch_explorer @elastic/appex-sharedux src/plugins/bfetch @elastic/appex-sharedux @@ -113,9 +113,9 @@ packages/core/capabilities/core-capabilities-common @elastic/kibana-core packages/core/capabilities/core-capabilities-server @elastic/kibana-core packages/core/capabilities/core-capabilities-server-internal @elastic/kibana-core packages/core/capabilities/core-capabilities-server-mocks @elastic/kibana-core -packages/core/chrome/core-chrome-browser @elastic/kibana-core -packages/core/chrome/core-chrome-browser-internal @elastic/kibana-core -packages/core/chrome/core-chrome-browser-mocks @elastic/kibana-core +packages/core/chrome/core-chrome-browser @elastic/appex-sharedux +packages/core/chrome/core-chrome-browser-internal @elastic/appex-sharedux +packages/core/chrome/core-chrome-browser-mocks @elastic/appex-sharedux packages/core/config/core-config-server-internal @elastic/kibana-core packages/core/custom-branding/core-custom-branding-browser @elastic/appex-sharedux packages/core/custom-branding/core-custom-branding-browser-internal @elastic/appex-sharedux @@ -373,9 +373,9 @@ packages/kbn-ftr-screenshot-filename @elastic/kibana-operations x-pack/test/functional_with_es_ssl/plugins/cases @elastic/response-ops packages/kbn-generate @elastic/kibana-operations packages/kbn-get-repo-files @elastic/kibana-operations -x-pack/plugins/global_search_bar @elastic/kibana-core -x-pack/plugins/global_search @elastic/kibana-core -x-pack/plugins/global_search_providers @elastic/kibana-core +x-pack/plugins/global_search_bar @elastic/appex-sharedux +x-pack/plugins/global_search @elastic/appex-sharedux +x-pack/plugins/global_search_providers @elastic/appex-sharedux x-pack/test/plugin_functional/plugins/global_search_test @elastic/kibana-core x-pack/plugins/graph @elastic/kibana-visualizations x-pack/plugins/grokdebugger @elastic/platform-deployment-management diff --git a/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc b/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc index 84db611a0b348..da80249250739 100644 --- a/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc +++ b/packages/core/chrome/core-chrome-browser-internal/kibana.jsonc @@ -1,5 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-chrome-browser-internal", - "owner": "@elastic/kibana-core" + "owner": "@elastic/appex-sharedux" } diff --git a/packages/core/chrome/core-chrome-browser-internal/package.json b/packages/core/chrome/core-chrome-browser-internal/package.json index 51108d8d25023..6239397e9ee04 100644 --- a/packages/core/chrome/core-chrome-browser-internal/package.json +++ b/packages/core/chrome/core-chrome-browser-internal/package.json @@ -2,6 +2,5 @@ "name": "@kbn/core-chrome-browser-internal", "private": true, "version": "1.0.0", - "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0" -} \ No newline at end of file +} diff --git a/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc b/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc index 84c0c7c07701d..b040712b338fd 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc +++ b/packages/core/chrome/core-chrome-browser-mocks/kibana.jsonc @@ -2,5 +2,5 @@ "type": "shared-common", "id": "@kbn/core-chrome-browser-mocks", "devOnly": true, - "owner": "@elastic/kibana-core" + "owner": "@elastic/appex-sharedux" } diff --git a/packages/core/chrome/core-chrome-browser-mocks/package.json b/packages/core/chrome/core-chrome-browser-mocks/package.json index f73bd5dba44f4..ff49363bd75c9 100644 --- a/packages/core/chrome/core-chrome-browser-mocks/package.json +++ b/packages/core/chrome/core-chrome-browser-mocks/package.json @@ -2,6 +2,5 @@ "name": "@kbn/core-chrome-browser-mocks", "private": true, "version": "1.0.0", - "author": "Kibana Core", "license": "SSPL-1.0 OR Elastic License 2.0" -} \ No newline at end of file +} diff --git a/packages/core/chrome/core-chrome-browser/kibana.jsonc b/packages/core/chrome/core-chrome-browser/kibana.jsonc index ea1cb4638d0f9..bac6a50bdbe01 100644 --- a/packages/core/chrome/core-chrome-browser/kibana.jsonc +++ b/packages/core/chrome/core-chrome-browser/kibana.jsonc @@ -1,5 +1,5 @@ { "type": "shared-common", "id": "@kbn/core-chrome-browser", - "owner": "@elastic/kibana-core" + "owner": "@elastic/appex-sharedux" } diff --git a/x-pack/plugins/banners/kibana.jsonc b/x-pack/plugins/banners/kibana.jsonc index 9f4f661654eed..ffd3ced829961 100644 --- a/x-pack/plugins/banners/kibana.jsonc +++ b/x-pack/plugins/banners/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/banners-plugin", - "owner": "@elastic/kibana-core", + "owner": "@elastic/appex-sharedux", "plugin": { "id": "banners", "server": true, diff --git a/x-pack/plugins/global_search/kibana.jsonc b/x-pack/plugins/global_search/kibana.jsonc index 5c70096b124c1..080d327dec4cb 100644 --- a/x-pack/plugins/global_search/kibana.jsonc +++ b/x-pack/plugins/global_search/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/global-search-plugin", - "owner": "@elastic/kibana-core", + "owner": "@elastic/appex-sharedux", "plugin": { "id": "globalSearch", "server": true, diff --git a/x-pack/plugins/global_search_bar/kibana.jsonc b/x-pack/plugins/global_search_bar/kibana.jsonc index b208f36fdd833..44689ddc5bdfd 100644 --- a/x-pack/plugins/global_search_bar/kibana.jsonc +++ b/x-pack/plugins/global_search_bar/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/global-search-bar-plugin", - "owner": "@elastic/kibana-core", + "owner": "@elastic/appex-sharedux", "plugin": { "id": "globalSearchBar", "server": false, diff --git a/x-pack/plugins/global_search_providers/kibana.jsonc b/x-pack/plugins/global_search_providers/kibana.jsonc index 5ee9946d172d0..cdfed2ebbaf5d 100644 --- a/x-pack/plugins/global_search_providers/kibana.jsonc +++ b/x-pack/plugins/global_search_providers/kibana.jsonc @@ -1,7 +1,7 @@ { "type": "plugin", "id": "@kbn/global-search-providers-plugin", - "owner": "@elastic/kibana-core", + "owner": "@elastic/appex-sharedux", "plugin": { "id": "globalSearchProviders", "server": true, From a4de864acce376bc1478a0a307f6dd88acb6b9d2 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Wed, 15 Feb 2023 13:43:17 -0500 Subject: [PATCH 045/210] feat(slo): support apm latency indicator type (#150785) --- .../kbn-slo-schema/src/schema/indicators.ts | 2 +- x-pack/plugins/observability/dev_docs/slo.md | 6 +- .../public/data/slo/indicator.ts | 2 +- .../use_fetch_apm_suggestions.ts | 19 +++ .../hooks/slo/use_fetch_apm_suggestions.ts | 76 +++++++++++ ...m_latency_indicator_type_form.stories.tsx} | 15 +-- .../apm_latency_indicator_type_form.tsx | 121 ++++++++++++++++++ .../apm_latency/field_selector.stories.tsx | 40 ++++++ .../components/apm_latency/field_selector.tsx | 121 ++++++++++++++++++ ...custom_kql_indicator_type_form.stories.tsx | 34 +++++ .../custom_kql_indicator_type_form.tsx} | 45 +++---- .../components/custom_kql/index_selection.tsx | 2 + .../components/custom_kql/query_builder.tsx | 2 + .../slo_edit/components/slo_edit_form.tsx | 58 ++++++--- .../components/slo_edit_form_description.tsx | 5 +- .../components/slo_edit_form_objectives.tsx | 6 +- .../slo_edit_form_objectives_timeslices.tsx | 6 +- .../public/pages/slo_edit/constants.ts | 19 ++- .../use_check_form_partial_validities.ts | 41 ------ .../helpers/use_section_form_validation.ts | 73 +++++++++++ .../public/pages/slo_edit/index.test.tsx | 21 +-- .../kibana_react.storybook_decorator.tsx | 2 +- .../server/services/slo/find_slo.test.ts | 2 +- .../server/services/slo/fixtures/slo.ts | 2 +- .../apm_transaction_duration.ts | 3 +- 25 files changed, 598 insertions(+), 125 deletions(-) create mode 100644 x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_apm_suggestions.ts create mode 100644 x-pack/plugins/observability/public/hooks/slo/use_fetch_apm_suggestions.ts rename x-pack/plugins/observability/public/pages/slo_edit/components/{slo_edit_form_definition_custom_kql.stories.tsx => apm_latency/apm_latency_indicator_type_form.stories.tsx} (63%) create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.tsx create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.stories.tsx rename x-pack/plugins/observability/public/pages/slo_edit/components/{slo_edit_form_definition_custom_kql.tsx => custom_kql/custom_kql_indicator_type_form.tsx} (59%) delete mode 100644 x-pack/plugins/observability/public/pages/slo_edit/helpers/use_check_form_partial_validities.ts create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts diff --git a/packages/kbn-slo-schema/src/schema/indicators.ts b/packages/kbn-slo-schema/src/schema/indicators.ts index 73933fb785794..2e20713708617 100644 --- a/packages/kbn-slo-schema/src/schema/indicators.ts +++ b/packages/kbn-slo-schema/src/schema/indicators.ts @@ -18,7 +18,7 @@ const apmTransactionDurationIndicatorSchema = t.type({ service: allOrAnyString, transactionType: allOrAnyString, transactionName: allOrAnyString, - 'threshold.us': t.number, + threshold: t.number, }), t.partial({ index: t.string, diff --git a/x-pack/plugins/observability/dev_docs/slo.md b/x-pack/plugins/observability/dev_docs/slo.md index a1a303a672afd..bd9dcc96c4c59 100644 --- a/x-pack/plugins/observability/dev_docs/slo.md +++ b/x-pack/plugins/observability/dev_docs/slo.md @@ -181,7 +181,7 @@ curl --request POST \ "service": "o11y-app", "transactionType": "request", "transactionName": "GET /api", - "threshold.us": 500000 + "threshold": 500000 } }, "timeWindow": { @@ -216,7 +216,7 @@ curl --request POST \ "service": "o11y-app", "transactionType": "request", "transactionName": "GET /api", - "threshold.us": 500000 + "threshold": 500000 } }, "timeWindow": { @@ -253,7 +253,7 @@ curl --request POST \ "service": "o11y-app", "transactionType": "request", "transactionName": "GET /api", - "threshold.us": 500000 + "threshold": 500000 } }, "timeWindow": { diff --git a/x-pack/plugins/observability/public/data/slo/indicator.ts b/x-pack/plugins/observability/public/data/slo/indicator.ts index 8e38f787c1b83..6bb36ca54d8c2 100644 --- a/x-pack/plugins/observability/public/data/slo/indicator.ts +++ b/x-pack/plugins/observability/public/data/slo/indicator.ts @@ -33,7 +33,7 @@ export const buildApmLatencyIndicator = ( service: 'o11y-app', transactionType: 'request', transactionName: 'GET /slow', - 'threshold.us': 5000000, + threshold: 5000000, ...params, }, }; diff --git a/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_apm_suggestions.ts b/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_apm_suggestions.ts new file mode 100644 index 0000000000000..5d5e65e8e114b --- /dev/null +++ b/x-pack/plugins/observability/public/hooks/slo/__storybook_mocks__/use_fetch_apm_suggestions.ts @@ -0,0 +1,19 @@ +/* + * Copyright 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 { Params, UseFetchApmSuggestions } from '../use_fetch_apm_suggestions'; + +export const useFetchApmSuggestions = ({ + fieldName, + search = '', +}: Params): UseFetchApmSuggestions => { + return { + loading: false, + error: false, + data: ['apm-suggestion-1', 'apm-suggestion-2', 'apm-suggestion-3'], + }; +}; diff --git a/x-pack/plugins/observability/public/hooks/slo/use_fetch_apm_suggestions.ts b/x-pack/plugins/observability/public/hooks/slo/use_fetch_apm_suggestions.ts new file mode 100644 index 0000000000000..eca7eeb2b7be9 --- /dev/null +++ b/x-pack/plugins/observability/public/hooks/slo/use_fetch_apm_suggestions.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 { HttpSetup } from '@kbn/core-http-browser'; +import moment from 'moment'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useDataFetcher } from '../use_data_fetcher'; + +export type Suggestion = string; +export interface UseFetchApmSuggestions { + data: Suggestion[]; + loading: boolean; + error: boolean; +} + +export interface Params { + fieldName: string; + search: string; +} + +interface ApiResponse { + terms: string[]; +} + +const EMPTY_RESPONSE: ApiResponse = { terms: [] }; + +export function useFetchApmSuggestions({ fieldName, search = '' }: Params): UseFetchApmSuggestions { + const [suggestions, setSuggestions] = useState([]); + + const params: Params = useMemo(() => ({ fieldName, search }), [fieldName, search]); + const shouldExecuteApiCall = useCallback( + (apiCallParams: Params) => !apiCallParams.search || apiCallParams.search.length > 0, + [] + ); + + const { data, loading, error } = useDataFetcher({ + paramsForApiCall: params, + initialDataState: EMPTY_RESPONSE, + executeApiCall: fetchHistoricalSummary, + shouldExecuteApiCall, + }); + + useEffect(() => { + setSuggestions(data.terms); + }, [data]); + + return { data: suggestions, loading, error }; +} + +const fetchHistoricalSummary = async ( + params: Params, + abortController: AbortController, + http: HttpSetup +): Promise => { + try { + const response = await http.get('/internal/apm/suggestions', { + query: { + fieldName: params.fieldName, + start: moment().subtract(2, 'days').toISOString(), + end: moment().toISOString(), + fieldValue: params.search, + }, + signal: abortController.signal, + }); + + return response; + } catch (error) { + // ignore error for retrieving slos + } + + return { terms: [] }; +}; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.stories.tsx similarity index 63% rename from x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx rename to x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.stories.tsx index 08c634b45faaf..7b98c21b6e5e4 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.stories.tsx @@ -9,16 +9,13 @@ import React from 'react'; import { ComponentStory } from '@storybook/react'; import { FormProvider, useForm } from 'react-hook-form'; -import { KibanaReactStorybookDecorator } from '../../../utils/kibana_react.storybook_decorator'; -import { - SloEditFormDefinitionCustomKql as Component, - Props, -} from './slo_edit_form_definition_custom_kql'; -import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../constants'; +import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; +import { ApmLatencyIndicatorTypeForm as Component, Props } from './apm_latency_indicator_type_form'; +import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../../constants'; export default { component: Component, - title: 'app/SLO/EditPage/SloEditFormDefinitionCustomKql', + title: 'app/SLO/EditPage/ApmLatency/Form', decorators: [KibanaReactStorybookDecorator], }; @@ -33,5 +30,5 @@ const Template: ComponentStory = (props: Props) => { const defaultProps = {}; -export const SloEditFormDefinitionCustomKql = Template.bind({}); -SloEditFormDefinitionCustomKql.args = defaultProps; +export const Form = Template.bind({}); +Form.args = defaultProps; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx new file mode 100644 index 0000000000000..d071dd92de358 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx @@ -0,0 +1,121 @@ +/* + * Copyright 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 { EuiFieldNumber, EuiFlexGroup, EuiFlexItem, EuiFormLabel } from '@elastic/eui'; +import { Control, Controller } from 'react-hook-form'; +import { i18n } from '@kbn/i18n'; +import type { CreateSLOInput } from '@kbn/slo-schema'; + +import { FieldSelector } from './field_selector'; + +export interface Props { + control: Control; +} + +export function ApmLatencyIndicatorTypeForm({ control }: Props) { + return ( + + + + + + + + + + + + + + + {i18n.translate('xpack.observability.slos.sloEdit.apmLatency.threshold.placeholder', { + defaultMessage: 'Threshold (ms)', + })} + + ( + field.onChange(Number(event.target.value))} + /> + )} + /> + + + + + ); +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.tsx new file mode 100644 index 0000000000000..28f98a39f9762 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.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 { ComponentStory } from '@storybook/react'; + +import { FormProvider, useForm } from 'react-hook-form'; +import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; +import { FieldSelector as Component, Props } from './field_selector'; +import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../../constants'; + +export default { + component: Component, + title: 'app/SLO/EditPage/ApmLatency/FieldSelector', + decorators: [KibanaReactStorybookDecorator], +}; + +const Template: ComponentStory = (props: Props) => { + const methods = useForm({ defaultValues: SLO_EDIT_FORM_DEFAULT_VALUES }); + return ( + + + + ); +}; + +const defaultProps: Omit = { + dataTestSubj: 'dataTestSubj', + name: 'name' as const, + placeholder: 'Select the APM service', + fieldName: 'service.name', + label: 'Service name', +}; + +export const FieldSelector = Template.bind({}); +FieldSelector.args = defaultProps; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx new file mode 100644 index 0000000000000..af3ff50954757 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx @@ -0,0 +1,121 @@ +/* + * Copyright 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, { useEffect, useState } from 'react'; +import { EuiComboBox, EuiComboBoxOptionOption, EuiFlexItem, EuiFormLabel } from '@elastic/eui'; +import { Control, Controller, FieldPath } from 'react-hook-form'; +import { CreateSLOInput } from '@kbn/slo-schema'; +import { i18n } from '@kbn/i18n'; +import { + Suggestion, + useFetchApmSuggestions, +} from '../../../../hooks/slo/use_fetch_apm_suggestions'; + +interface Option { + label: string; + value: string; +} + +export interface Props { + allowAllOption?: boolean; + control: Control; + dataTestSubj: string; + fieldName: string; + label: string; + name: FieldPath; + placeholder: string; +} + +export function FieldSelector({ + allowAllOption = true, + control, + dataTestSubj, + fieldName, + label, + name, + placeholder, +}: Props) { + const [search, setSearch] = useState(''); + const { data: suggestions, loading } = useFetchApmSuggestions({ + fieldName, + search, + }); + const [options, setOptions] = useState([]); + + useEffect(() => { + const opts = ( + allowAllOption + ? [ + { + value: '*', + label: i18n.translate('xpack.observability.slos.sloEdit.apmFieldSelector.all', { + defaultMessage: 'All', + }), + }, + ] + : [] + ).concat(createOptions(suggestions)); + + setOptions(opts); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [suggestions.length]); + + return ( + + {label} + + ( + { + if (selected.length) { + return field.onChange(selected[0].value); + } + + field.onChange(''); + }} + onSearchChange={(value: string) => { + setSearch(value); + }} + options={options} + placeholder={placeholder} + selectedOptions={ + !!field.value && typeof field.value === 'string' + ? [ + { + value: field.value, + label: field.value, + 'data-test-subj': `${dataTestSubj}SelectedValue`, + }, + ] + : [] + } + singleSelection + /> + )} + /> + + ); +} + +function createOptions(suggestions: Suggestion[]): Option[] { + return suggestions + .map((suggestion) => ({ label: suggestion, value: suggestion })) + .sort((a, b) => String(a.label).localeCompare(b.label)); +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.stories.tsx new file mode 100644 index 0000000000000..375b133adfb43 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.stories.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { ComponentStory } from '@storybook/react'; +import { FormProvider, useForm } from 'react-hook-form'; + +import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; +import { CustomKqlIndicatorTypeForm as Component, Props } from './custom_kql_indicator_type_form'; +import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../../constants'; + +export default { + component: Component, + title: 'app/SLO/EditPage/CustomKQL/Form', + decorators: [KibanaReactStorybookDecorator], +}; + +const Template: ComponentStory = (props: Props) => { + const methods = useForm({ defaultValues: SLO_EDIT_FORM_DEFAULT_VALUES }); + return ( + + + + ); +}; + +const defaultProps = {}; + +export const Form = Template.bind({}); +Form.args = defaultProps; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx similarity index 59% rename from x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx rename to x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx index 29d3386f30ad4..07b8bf4d192eb 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_definition_custom_kql.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/custom_kql/custom_kql_indicator_type_form.tsx @@ -11,15 +11,15 @@ import { i18n } from '@kbn/i18n'; import { Control, UseFormWatch } from 'react-hook-form'; import type { CreateSLOInput } from '@kbn/slo-schema'; -import { IndexSelection } from './custom_kql/index_selection'; -import { QueryBuilder } from './custom_kql/query_builder'; +import { IndexSelection } from './index_selection'; +import { QueryBuilder } from './query_builder'; export interface Props { control: Control; watch: UseFormWatch; } -export function SloEditFormDefinitionCustomKql({ control, watch }: Props) { +export function CustomKqlIndicatorTypeForm({ control, watch }: Props) { return ( @@ -29,17 +29,14 @@ export function SloEditFormDefinitionCustomKql({ control, watch }: Props) { ( diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx index 455e36d2e818e..f1faba1119652 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx @@ -24,8 +24,8 @@ import type { SLOWithSummaryResponse } from '@kbn/slo-schema'; import { useKibana } from '../../../utils/kibana_react'; import { useCreateOrUpdateSlo } from '../../../hooks/slo/use_create_slo'; -import { useCheckFormPartialValidities } from '../helpers/use_check_form_partial_validities'; -import { SloEditFormDefinitionCustomKql } from './slo_edit_form_definition_custom_kql'; +import { useSectionFormValidation } from '../helpers/use_section_form_validation'; +import { CustomKqlIndicatorTypeForm } from './custom_kql/custom_kql_indicator_type_form'; import { SloEditFormDescription } from './slo_edit_form_description'; import { SloEditFormObjectives } from './slo_edit_form_objectives'; import { @@ -35,6 +35,7 @@ import { } from '../helpers/process_slo_form_values'; import { paths } from '../../../config'; import { SLI_OPTIONS, SLO_EDIT_FORM_DEFAULT_VALUES } from '../constants'; +import { ApmLatencyIndicatorTypeForm } from './apm_latency/apm_latency_indicator_type_form'; export interface Props { slo: SLOWithSummaryResponse | undefined; @@ -56,9 +57,13 @@ export function SloEditForm({ slo }: Props) { mode: 'all', }); - const { isDefinitionValid, isDescriptionValid, isObjectiveValid } = useCheckFormPartialValidities( - { getFieldState, formState } - ); + const { isIndicatorSectionValid, isDescriptionSectionValid, isObjectiveSectionValid } = + useSectionFormValidation({ + getFieldState, + getValues, + formState, + watch, + }); const { loading, success, error, createSlo, updateSlo } = useCreateOrUpdateSlo(); @@ -99,15 +104,28 @@ export function SloEditForm({ slo }: Props) { } }, [success, error, toasts, isEditMode, getValues, navigateToUrl, basePath]); + const getIndicatorTypeForm = () => { + switch (watch('indicator.type')) { + case 'sli.kql.custom': + return ; + case 'sli.apm.transactionDuration': + return ; + default: + return null; + } + }; + return ( } > @@ -132,7 +150,7 @@ export function SloEditForm({ slo }: Props) { name="indicator.type" control={control} rules={{ required: true }} - render={({ field }) => ( + render={({ field: { ref, ...field } }) => ( - {watch('indicator.type') === 'sli.kql.custom' ? ( - - ) : null} + {getIndicatorTypeForm()} @@ -155,9 +171,11 @@ export function SloEditForm({ slo }: Props) { verticalAlign="top" icon={ } > @@ -182,9 +200,13 @@ export function SloEditForm({ slo }: Props) { verticalAlign="top" icon={ } > diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description.tsx index c169b3316a681..15e13c53862b3 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form_description.tsx @@ -39,7 +39,7 @@ export function SloEditFormDescription({ control }: Props) { name="name" control={control} rules={{ required: true }} - render={({ field }) => ( + render={({ field: { ref, ...field } }) => ( ( + render={({ field: { ref, ...field } }) => ( ( + render={({ field: { ref, ...field } }) => ( ( + render={({ field: { ref, ...field } }) => ( ( + render={({ field: { ref, ...field } }) => ( ( + render={({ field: { ref, ...field } }) => ( ( + render={({ field: { ref, ...field } }) => ( = [ { - value: 'sli.kql.custom' as const, - text: i18n.translate('xpack.observability.slos.sloTypes.kqlCustomIndicator', { - defaultMessage: 'KQL custom indicator', + value: 'sli.kql.custom', + text: i18n.translate('xpack.observability.slos.sliTypes.kqlCustomIndicator', { + defaultMessage: 'KQL custom', + }), + }, + { + value: 'sli.apm.transactionDuration', + text: i18n.translate('xpack.observability.slos.sliTypes.apmLatencyIndicator', { + defaultMessage: 'APM latency', }), }, ]; @@ -44,7 +53,7 @@ export const SLO_EDIT_FORM_DEFAULT_VALUES: CreateSLOInput = { name: '', description: '', indicator: { - type: SLI_OPTIONS[0].value, + type: 'sli.kql.custom', params: { index: '', filter: '', diff --git a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_check_form_partial_validities.ts b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_check_form_partial_validities.ts deleted file mode 100644 index 392cfd0ef5204..0000000000000 --- a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_check_form_partial_validities.ts +++ /dev/null @@ -1,41 +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 { CreateSLOInput } from '@kbn/slo-schema'; -import { FormState, UseFormGetFieldState } from 'react-hook-form'; - -interface Props { - getFieldState: UseFormGetFieldState; - formState: FormState; -} - -export function useCheckFormPartialValidities({ getFieldState, formState }: Props) { - const isDefinitionValid = ( - [ - 'indicator.params.index', - 'indicator.params.filter', - 'indicator.params.good', - 'indicator.params.total', - ] as const - ).every((field) => getFieldState(field, formState).error === undefined); - - const isObjectiveValid = ( - [ - 'budgetingMethod', - 'timeWindow.duration', - 'objective.target', - 'objective.timesliceTarget', - 'objective.timesliceWindow', - ] as const - ).every((field) => getFieldState(field, formState).error === undefined); - - const isDescriptionValid = (['name', 'description'] as const).every( - (field) => getFieldState(field, formState).error === undefined - ); - - return { isDefinitionValid, isObjectiveValid, isDescriptionValid }; -} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts new file mode 100644 index 0000000000000..0f258b6102cbe --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts @@ -0,0 +1,73 @@ +/* + * Copyright 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 { CreateSLOInput } from '@kbn/slo-schema'; +import { FormState, UseFormGetFieldState, UseFormGetValues, UseFormWatch } from 'react-hook-form'; + +interface Props { + getFieldState: UseFormGetFieldState; + getValues: UseFormGetValues; + formState: FormState; + watch: UseFormWatch; +} + +export function useSectionFormValidation({ getFieldState, getValues, formState, watch }: Props) { + let isIndicatorSectionValid: boolean; + switch (watch('indicator.type')) { + case 'sli.kql.custom': + isIndicatorSectionValid = + ( + [ + 'indicator.params.index', + 'indicator.params.filter', + 'indicator.params.good', + 'indicator.params.total', + ] as const + ).every((field) => !getFieldState(field, formState).invalid) && + getValues('indicator.params.index') !== ''; + break; + case 'sli.apm.transactionDuration': + isIndicatorSectionValid = + ( + [ + 'indicator.params.service', + 'indicator.params.environment', + 'indicator.params.transactionType', + 'indicator.params.transactionName', + 'indicator.params.threshold', + ] as const + ).every((field) => !getFieldState(field, formState).invalid && getValues(field) !== '') && + (['indicator.params.index'] as const).every( + (field) => !getFieldState(field, formState).invalid + ); + break; + default: + isIndicatorSectionValid = false; + break; + } + + const isObjectiveSectionValid = ( + [ + 'budgetingMethod', + 'timeWindow.duration', + 'objective.target', + 'objective.timesliceTarget', + 'objective.timesliceWindow', + ] as const + ).every((field) => getFieldState(field, formState).error === undefined); + + const isDescriptionSectionValid = + !getFieldState('name', formState).invalid && + getValues('name') !== '' && + !getFieldState('description', formState).invalid; + + return { + isIndicatorSectionValid, + isObjectiveSectionValid, + isDescriptionSectionValid, + }; +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx b/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx index e9baaf105e10a..00330a2fe1356 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/index.test.tsx @@ -195,17 +195,17 @@ describe('SLO Edit Page', () => { expect(screen.queryByTestId('indexSelectionSelectedValue')).toBeNull(); - expect(screen.queryByTestId('sloFormCustomKqlFilterQueryInput')).toHaveValue( + expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue( SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.filter : '' ); - expect(screen.queryByTestId('sloFormCustomKqlGoodQueryInput')).toHaveValue( + expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue( SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.good : '' ); - expect(screen.queryByTestId('sloFormCustomKqlTotalQueryInput')).toHaveValue( + expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue( SLO_EDIT_FORM_DEFAULT_VALUES.indicator.type === 'sli.kql.custom' ? SLO_EDIT_FORM_DEFAULT_VALUES.indicator.params.total : '' @@ -249,9 +249,12 @@ describe('SLO Edit Page', () => { render(, config); userEvent.type(screen.getByTestId('indexSelection'), 'some-index'); - userEvent.type(screen.getByTestId('sloFormCustomKqlFilterQueryInput'), 'irrelevant'); - userEvent.type(screen.getByTestId('sloFormCustomKqlGoodQueryInput'), 'irrelevant'); - userEvent.type(screen.getByTestId('sloFormCustomKqlTotalQueryInput'), 'irrelevant'); + userEvent.type( + screen.getByTestId('customKqlIndicatorFormQueryFilterInput'), + 'irrelevant' + ); + userEvent.type(screen.getByTestId('customKqlIndicatorFormGoodQueryInput'), 'irrelevant'); + userEvent.type(screen.getByTestId('customKqlIndicatorFormTotalQueryInput'), 'irrelevant'); userEvent.selectOptions( screen.getByTestId('sloFormBudgetingMethodSelect'), 'occurrences' @@ -337,13 +340,13 @@ describe('SLO Edit Page', () => { slo.indicator.params.index! ); - expect(screen.queryByTestId('sloFormCustomKqlFilterQueryInput')).toHaveValue( + expect(screen.queryByTestId('customKqlIndicatorFormQueryFilterInput')).toHaveValue( slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.filter : '' ); - expect(screen.queryByTestId('sloFormCustomKqlGoodQueryInput')).toHaveValue( + expect(screen.queryByTestId('customKqlIndicatorFormGoodQueryInput')).toHaveValue( slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.good : '' ); - expect(screen.queryByTestId('sloFormCustomKqlTotalQueryInput')).toHaveValue( + expect(screen.queryByTestId('customKqlIndicatorFormTotalQueryInput')).toHaveValue( slo.indicator.type === 'sli.kql.custom' ? slo.indicator.params.total : '' ); diff --git a/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx b/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx index bf84059db3b6a..2882b8491f390 100644 --- a/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx +++ b/x-pack/plugins/observability/public/utils/kibana_react.storybook_decorator.tsx @@ -22,7 +22,7 @@ export function KibanaReactStorybookDecorator(Story: ComponentType) { }, data: {}, dataViews: { - create: () => {}, + create: () => Promise.resolve({}), }, docLinks: { links: { diff --git a/x-pack/plugins/observability/server/services/slo/find_slo.test.ts b/x-pack/plugins/observability/server/services/slo/find_slo.test.ts index ea1a18c0c178e..a0b6eca9b064c 100644 --- a/x-pack/plugins/observability/server/services/slo/find_slo.test.ts +++ b/x-pack/plugins/observability/server/services/slo/find_slo.test.ts @@ -53,7 +53,7 @@ describe('FindSLO', () => { service: 'irrelevant', transactionName: 'irrelevant', transactionType: 'irrelevant', - 'threshold.us': 500000, + threshold: 500, }, type: 'sli.apm.transactionDuration', }, diff --git a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts index 008004369fe83..c65c515521ca3 100644 --- a/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts +++ b/x-pack/plugins/observability/server/services/slo/fixtures/slo.ts @@ -48,7 +48,7 @@ export const createAPMTransactionDurationIndicator = ( service: 'irrelevant', transactionName: 'irrelevant', transactionType: 'irrelevant', - 'threshold.us': 500000, + threshold: 500, ...params, }, }); diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts index 89e8b962d61af..7893e7daa6799 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts @@ -111,7 +111,8 @@ export class ApmTransactionDurationTransformGenerator extends TransformGenerator } private buildAggregations(slo: SLO, indicator: APMTransactionDurationIndicator) { - const truncatedThreshold = Math.trunc(indicator.params['threshold.us']); + // threshold is in ms (milliseconds), but apm data is stored in us (microseconds) + const truncatedThreshold = Math.trunc(indicator.params.threshold * 1000); return { _numerator: { From 0757c69a79382010fc2a6ddfc601fb2bfe35fbc6 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Wed, 15 Feb 2023 13:47:47 -0500 Subject: [PATCH 046/210] feat(slo): Add custom kql filter into APM indicator types (#150936) --- .../kbn-slo-schema/src/schema/indicators.ts | 2 + .../slo_transform_template.ts | 2 + .../apm_transaction_duration.test.ts.snap | 96 +++++++++++++++++++ .../apm_transaction_error_rate.test.ts.snap | 96 +++++++++++++++++++ .../__snapshots__/kql_custom.test.ts.snap | 2 + .../apm_transaction_duration.test.ts | 12 +++ .../apm_transaction_duration.ts | 7 +- .../apm_transaction_error_rate.test.ts | 12 +++ .../apm_transaction_error_rate.ts | 7 +- .../slo/transform_generators/common.ts | 17 ++++ .../slo/transform_generators/index.ts | 1 + .../slo/transform_generators/kql_custom.ts | 12 +-- .../transform_generator.ts | 4 + 13 files changed, 258 insertions(+), 12 deletions(-) create mode 100644 x-pack/plugins/observability/server/services/slo/transform_generators/common.ts diff --git a/packages/kbn-slo-schema/src/schema/indicators.ts b/packages/kbn-slo-schema/src/schema/indicators.ts index 2e20713708617..045d267b04d42 100644 --- a/packages/kbn-slo-schema/src/schema/indicators.ts +++ b/packages/kbn-slo-schema/src/schema/indicators.ts @@ -22,6 +22,7 @@ const apmTransactionDurationIndicatorSchema = t.type({ }), t.partial({ index: t.string, + filter: t.string, }), ]), }); @@ -41,6 +42,7 @@ const apmTransactionErrorRateIndicatorSchema = t.type({ t.union([t.literal('2xx'), t.literal('3xx'), t.literal('4xx'), t.literal('5xx')]) ), index: t.string, + filter: t.string, }), ]), }); diff --git a/x-pack/plugins/observability/server/assets/transform_templates/slo_transform_template.ts b/x-pack/plugins/observability/server/assets/transform_templates/slo_transform_template.ts index d9a8bfb1de8cb..799a991ef7971 100644 --- a/x-pack/plugins/observability/server/assets/transform_templates/slo_transform_template.ts +++ b/x-pack/plugins/observability/server/assets/transform_templates/slo_transform_template.ts @@ -21,6 +21,7 @@ export interface TransformSettings { export const getSLOTransformTemplate = ( transformId: string, + description: string, source: TransformSource, destination: TransformDestination, groupBy: TransformPivot['group_by'] = {}, @@ -28,6 +29,7 @@ export const getSLOTransformTemplate = ( settings: TransformSettings ): TransformPutTransformRequest => ({ transform_id: transformId, + description, source, frequency: settings.frequency, dest: destination, diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap index 1b8a2e6336e91..66339b775fa97 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_duration.test.ts.snap @@ -1,5 +1,99 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`APM Transaction Duration Transform Generator adds the custom kql filter to the query 1`] = ` +Object { + "bool": Object { + "filter": Array [ + Object { + "match": Object { + "transaction.root": true, + }, + }, + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-7d", + }, + }, + }, + Object { + "match": Object { + "service.name": "irrelevant", + }, + }, + Object { + "match": Object { + "service.environment": "irrelevant", + }, + }, + Object { + "match": Object { + "transaction.name": "irrelevant", + }, + }, + Object { + "match": Object { + "transaction.type": "irrelevant", + }, + }, + Object { + "bool": Object { + "filter": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match_phrase": Object { + "my.field": "value", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "range": Object { + "foo": Object { + "gte": "12", + }, + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "range": Object { + "bar": Object { + "lte": "100", + }, + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, +} +`; + exports[`APM Transaction Duration Transform Generator does not include the query filter when params are '*' 1`] = ` Object { "bool": Object { @@ -26,6 +120,7 @@ Object { "_meta": Object { "version": 1, }, + "description": "Rolled-up SLI data for SLO: irrelevant", "dest": Object { "index": "slo-observability.sli-v1", "pipeline": "slo-observability.sli.monthly", @@ -158,6 +253,7 @@ Object { "_meta": Object { "version": 1, }, + "description": "Rolled-up SLI data for SLO: irrelevant", "dest": Object { "index": "slo-observability.sli-v1", "pipeline": "slo-observability.sli.monthly", diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap index 76657144e11f0..e9d4e4107b472 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/apm_transaction_error_rate.test.ts.snap @@ -1,5 +1,99 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`APM Transaction Error Rate Transform Generator adds the custom kql filter to the query 1`] = ` +Object { + "bool": Object { + "filter": Array [ + Object { + "match": Object { + "transaction.root": true, + }, + }, + Object { + "range": Object { + "@timestamp": Object { + "gte": "now-7d", + }, + }, + }, + Object { + "match": Object { + "service.name": "irrelevant", + }, + }, + Object { + "match": Object { + "service.environment": "irrelevant", + }, + }, + Object { + "match": Object { + "transaction.name": "irrelevant", + }, + }, + Object { + "match": Object { + "transaction.type": "irrelevant", + }, + }, + Object { + "bool": Object { + "filter": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "match_phrase": Object { + "my.field": "value", + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "range": Object { + "foo": Object { + "gte": "12", + }, + }, + }, + ], + }, + }, + Object { + "bool": Object { + "minimum_should_match": 1, + "should": Array [ + Object { + "range": Object { + "bar": Object { + "lte": "100", + }, + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, +} +`; + exports[`APM Transaction Error Rate Transform Generator does not include the query filter when params are '*' 1`] = ` Object { "bool": Object { @@ -26,6 +120,7 @@ Object { "_meta": Object { "version": 1, }, + "description": "Rolled-up SLI data for SLO: irrelevant", "dest": Object { "index": "slo-observability.sli-v1", "pipeline": "slo-observability.sli.monthly", @@ -163,6 +258,7 @@ Object { "_meta": Object { "version": 1, }, + "description": "Rolled-up SLI data for SLO: irrelevant", "dest": Object { "index": "slo-observability.sli-v1", "pipeline": "slo-observability.sli.monthly", diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap index fbfa14ecfb56b..afe345d2b7261 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/__snapshots__/kql_custom.test.ts.snap @@ -105,6 +105,7 @@ Object { "_meta": Object { "version": 1, }, + "description": "Rolled-up SLI data for SLO: irrelevant", "dest": Object { "index": "slo-observability.sli-v1", "pipeline": "slo-observability.sli.monthly", @@ -209,6 +210,7 @@ Object { "_meta": Object { "version": 1, }, + "description": "Rolled-up SLI data for SLO: irrelevant", "dest": Object { "index": "slo-observability.sli-v1", "pipeline": "slo-observability.sli.monthly", diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts index 16a788888cc09..82a1dd1c65652 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.test.ts @@ -69,4 +69,16 @@ describe('APM Transaction Duration Transform Generator', () => { expect(transform.source.index).toEqual(index); }); + + it('adds the custom kql filter to the query', async () => { + const filter = `"my.field" : "value" and ("foo" >= 12 or "bar" <= 100)`; + const anSLO = createSLO({ + indicator: createAPMTransactionDurationIndicator({ + filter, + }), + }); + const transform = generator.getTransformParams(anSLO); + + expect(transform.source.query).toMatchSnapshot(); + }); }); diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts index 7893e7daa6799..6914ca19c586c 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_duration.ts @@ -19,7 +19,7 @@ import { } from '../../../assets/constants'; import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; import { SLO, APMTransactionDurationIndicator } from '../../../domain/models'; -import { TransformGenerator } from '.'; +import { getElastichsearchQueryOrThrow, TransformGenerator } from '.'; import { DEFAULT_APM_INDEX } from './constants'; import { Query } from './types'; @@ -31,6 +31,7 @@ export class ApmTransactionDurationTransformGenerator extends TransformGenerator return getSLOTransformTemplate( this.buildTransformId(slo), + this.buildDescription(slo), this.buildSource(slo, slo.indicator), this.buildDestination(), this.buildCommonGroupBy(slo), @@ -85,6 +86,10 @@ export class ApmTransactionDurationTransformGenerator extends TransformGenerator }); } + if (!!indicator.params.filter) { + queryFilter.push(getElastichsearchQueryOrThrow(indicator.params.filter)); + } + return { index: indicator.params.index ?? DEFAULT_APM_INDEX, runtime_mappings: this.buildCommonRuntimeMappings(slo), diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts index 1763cff5fab6d..50931ad3fe95b 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.test.ts @@ -78,4 +78,16 @@ describe('APM Transaction Error Rate Transform Generator', () => { expect(transform.source.index).toEqual(index); }); + + it('adds the custom kql filter to the query', async () => { + const filter = `"my.field" : "value" and ("foo" >= 12 or "bar" <= 100)`; + const anSLO = createSLO({ + indicator: createAPMTransactionErrorRateIndicator({ + filter, + }), + }); + const transform = generator.getTransformParams(anSLO); + + expect(transform.source.query).toMatchSnapshot(); + }); }); diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts index 8adcbcdfc9622..69bd394a6800d 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/apm_transaction_error_rate.ts @@ -14,7 +14,7 @@ import { import { InvalidTransformError } from '../../../errors'; import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; -import { TransformGenerator } from '.'; +import { getElastichsearchQueryOrThrow, TransformGenerator } from '.'; import { SLO_DESTINATION_INDEX_NAME, SLO_INGEST_PIPELINE_NAME, @@ -35,6 +35,7 @@ export class ApmTransactionErrorRateTransformGenerator extends TransformGenerato return getSLOTransformTemplate( this.buildTransformId(slo), + this.buildDescription(slo), this.buildSource(slo, slo.indicator), this.buildDestination(), this.buildCommonGroupBy(slo), @@ -90,6 +91,10 @@ export class ApmTransactionErrorRateTransformGenerator extends TransformGenerato }); } + if (indicator.params.filter) { + queryFilter.push(getElastichsearchQueryOrThrow(indicator.params.filter)); + } + return { index: indicator.params.index ?? DEFAULT_APM_INDEX, runtime_mappings: this.buildCommonRuntimeMappings(slo), diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/common.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/common.ts new file mode 100644 index 0000000000000..b9426ef5f5a77 --- /dev/null +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/common.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 { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; +import { InvalidTransformError } from '../../../errors'; + +export function getElastichsearchQueryOrThrow(kuery: string) { + try { + return toElasticsearchQuery(fromKueryExpression(kuery)); + } catch (err) { + throw new InvalidTransformError(`Invalid KQL: ${kuery}`); + } +} diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/index.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/index.ts index 08d6032a6eafa..a7d1e33c7303e 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/index.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/index.ts @@ -9,3 +9,4 @@ export * from './transform_generator'; export * from './apm_transaction_error_rate'; export * from './apm_transaction_duration'; export * from './kql_custom'; +export * from './common'; diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts index 2b69c02e9d2c5..70709e53c313c 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/kql_custom.ts @@ -6,12 +6,11 @@ */ import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/types'; -import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { kqlCustomIndicatorSchema, timeslicesBudgetingMethodSchema } from '@kbn/slo-schema'; import { InvalidTransformError } from '../../../errors'; import { getSLOTransformTemplate } from '../../../assets/transform_templates/slo_transform_template'; -import { TransformGenerator } from '.'; +import { getElastichsearchQueryOrThrow, TransformGenerator } from '.'; import { SLO_DESTINATION_INDEX_NAME, SLO_INGEST_PIPELINE_NAME, @@ -27,6 +26,7 @@ export class KQLCustomTransformGenerator extends TransformGenerator { return getSLOTransformTemplate( this.buildTransformId(slo), + this.buildDescription(slo), this.buildSource(slo, slo.indicator), this.buildDestination(), this.buildCommonGroupBy(slo), @@ -80,11 +80,3 @@ export class KQLCustomTransformGenerator extends TransformGenerator { }; } } - -function getElastichsearchQueryOrThrow(kuery: string) { - try { - return toElasticsearchQuery(fromKueryExpression(kuery)); - } catch (err) { - throw new InvalidTransformError(`Invalid KQL: ${kuery}`); - } -} diff --git a/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts b/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts index da88c48d5479c..c4f9c426d1cd0 100644 --- a/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts +++ b/x-pack/plugins/observability/server/services/slo/transform_generators/transform_generator.ts @@ -32,6 +32,10 @@ export abstract class TransformGenerator { }; } + public buildDescription(slo: SLO): string { + return `Rolled-up SLI data for SLO: ${slo.name}`; + } + public buildCommonGroupBy(slo: SLO) { let fixedInterval = '1m'; if (timeslicesBudgetingMethodSchema.is(slo.budgetingMethod)) { From 6a4bdf247f49f9b6599767f1f804f5a60d0d7e99 Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Wed, 15 Feb 2023 20:11:06 +0100 Subject: [PATCH 047/210] update dependency playwright to ^1.30.0 (#151106) ## Summary Currently we use 1.27.1 that comes with bundled Chromium 107.0.5304.18 (released September 28, 2022) Updating playwright to use the recent [Chromium 110](https://github.com/microsoft/playwright/releases/tag/v1.30.0) for testing. --- package.json | 2 +- yarn.lock | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 61441db1fd8ef..21159e2e9d3a7 100644 --- a/package.json +++ b/package.json @@ -1421,7 +1421,7 @@ "pirates": "^4.0.1", "piscina": "^3.2.0", "pixelmatch": "^5.3.0", - "playwright": "^1.26.0", + "playwright": "^1.30.0", "pngjs": "^3.4.0", "postcss": "^8.4.14", "postcss-loader": "^4.2.0", diff --git a/yarn.lock b/yarn.lock index 164ecb0e54d82..145fc8c6280d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22744,12 +22744,17 @@ playwright-core@1.27.1, playwright-core@=1.27.1: resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.27.1.tgz#840ef662e55a3ed759d8b5d3d00a5f885a7184f4" integrity sha512-9EmeXDncC2Pmp/z+teoVYlvmPWUC6ejSSYZUln7YaP89Z6lpAaiaAnqroUt/BoLo8tn7WYShcfaCh+xofZa44Q== -playwright@^1.26.0: - version "1.27.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.27.1.tgz#4eecac5899566c589d4220ca8acc16abe8a67450" - integrity sha512-xXYZ7m36yTtC+oFgqH0eTgullGztKSRMb4yuwLPl8IYSmgBM88QiB+3IWb1mRIC9/NNwcgbG0RwtFlg+EAFQHQ== +playwright-core@1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.30.0.tgz#de987cea2e86669e3b85732d230c277771873285" + integrity sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g== + +playwright@^1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.30.0.tgz#b1d7be2d45d97fbb59f829f36f521f12010fe072" + integrity sha512-ENbW5o75HYB3YhnMTKJLTErIBExrSlX2ZZ1C/FzmHjUYIfxj/UnI+DWpQr992m+OQVSg0rCExAOlRwB+x+yyIg== dependencies: - playwright-core "1.27.1" + playwright-core "1.30.0" plugin-error@^1.0.1: version "1.0.1" From d0ec60de308deaf95baef24e9d3d73012d4fb997 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Wed, 15 Feb 2023 21:15:12 +0200 Subject: [PATCH 048/210] [Cloud Security] Add CTA to `findings delayed` state (#151325) --- .../public/components/no_findings_states.tsx | 13 ++++++++++++- x-pack/plugins/translations/translations/fr-FR.json | 1 - x-pack/plugins/translations/translations/ja-JP.json | 1 - x-pack/plugins/translations/translations/zh-CN.json | 1 - 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx index 04346d284724d..bb1ed64a89123 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx @@ -12,6 +12,7 @@ import { EuiEmptyPrompt, EuiIcon, EuiMarkdownFormat, + EuiLink, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -118,7 +119,17 @@ const IndexTimeout = () => (

+ + + ), + }} />

} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index a756443479e41..5a609c618f48c 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10139,7 +10139,6 @@ "xpack.csp.navigation.rulesNavItemLabel": "Règles", "xpack.csp.noFindingsStates.indexing.indexingButtonTitle": "Pas encore de résultats", "xpack.csp.noFindingsStates.indexing.indexingDescription": "En attente de la collecte et de l'indexation des données. Revenez plus tard pour voir vos résultats", - "xpack.csp.noFindingsStates.indexTimeout.indexTimeoutDescription": "La collecte des résultats prend plus de temps que prévu, revenez nous voir bientôt.", "xpack.csp.noFindingsStates.indexTimeout.indexTimeoutTitle": "Résultats retardés", "xpack.csp.noFindingsStates.noAgentsDeployed.noAgentsDeployedButtonTitle": "Installer l'agent", "xpack.csp.noFindingsStates.noAgentsDeployed.noAgentsDeployedDescription": "Pour voir les résultats, terminez le processus de configuration en installant un agent Elastic sur votre cluster Kubernetes.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 5231f0235dfc0..400dba199ca16 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10128,7 +10128,6 @@ "xpack.csp.navigation.rulesNavItemLabel": "ルール", "xpack.csp.noFindingsStates.indexing.indexingButtonTitle": "まだ結果がありません", "xpack.csp.noFindingsStates.indexing.indexingDescription": "データの収集とインデックス作成を待機しています。結果を表示するには、しばらくたってから確認してください", - "xpack.csp.noFindingsStates.indexTimeout.indexTimeoutDescription": "結果の収集に想定よりも時間がかかっています。後でもう一度確認してください", "xpack.csp.noFindingsStates.indexTimeout.indexTimeoutTitle": "結果が遅れています", "xpack.csp.noFindingsStates.noAgentsDeployed.noAgentsDeployedButtonTitle": "エージェントのインストール", "xpack.csp.noFindingsStates.noAgentsDeployed.noAgentsDeployedDescription": "結果を表示するには、KubernetesクラスターでElasticエージェントをインストールし、セットアップ処理を完了してください。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a9a79064c06fb..1ecd40512117e 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10143,7 +10143,6 @@ "xpack.csp.navigation.rulesNavItemLabel": "规则", "xpack.csp.noFindingsStates.indexing.indexingButtonTitle": "尚无结果", "xpack.csp.noFindingsStates.indexing.indexingDescription": "正在等待要收集和索引的数据。请稍后返回检查以查看结果", - "xpack.csp.noFindingsStates.indexTimeout.indexTimeoutDescription": "收集结果所需的时间长于预期,请稍后再回来检查", "xpack.csp.noFindingsStates.indexTimeout.indexTimeoutTitle": "已推迟结果", "xpack.csp.noFindingsStates.noAgentsDeployed.noAgentsDeployedButtonTitle": "安装代理", "xpack.csp.noFindingsStates.noAgentsDeployed.noAgentsDeployedDescription": "要查看结果,请通过在 Kubernetes 集群上安装 Elastic 代理来完成设置过程。", From af25a3e0737deeacc678d89497136047e8c1c8fc Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 15 Feb 2023 11:17:29 -0800 Subject: [PATCH 049/210] Upgrade EUI to v75.1.0 (#151200) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary `eui@75.0.0` ⏩ `eui@75.1.0` --- ## [`75.1.0`](https://github.com/elastic/eui/tree/v75.1.0) - Added padding to `EuiStep` title to better align with icon ([#6555](https://github.com/elastic/eui/pull/6555)) - Added a new `lineNumbers.annotations` API to `EuiCodeBlock`. This new feature displays an informational icon next to the specified line number(s), providing more context via popover ([#6580](https://github.com/elastic/eui/pull/6580)) **Bug fixes** - Fixed bug in `EuiRange` where styles were applied incorrectly when custom ticks were passed but `showTicks` were false ([#6588](https://github.com/elastic/eui/pull/6588)) - Fixed `fleetApp` and `agentApp` icons that were swapped ([#6590](https://github.com/elastic/eui/pull/6590)) **CSS-in-JS conversions** - Converted `EuiSteps` to Emotion; Removed `$euiStepStatusColorsToFade`, `$euiStepNumberSize`, `$euiStepNumberSmallSize`, and `$euiStepNumberMargin` ([#6555](https://github.com/elastic/eui/pull/6555)) --- package.json | 2 +- .../src/__snapshots__/i18n_service.test.tsx.snap | 1 + .../core-i18n-browser-internal/src/i18n_eui_mapping.tsx | 7 +++++++ src/dev/license_checker/config.ts | 2 +- .../components/horizontal_page_steps.tsx | 2 +- yarn.lock | 8 ++++---- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 21159e2e9d3a7..24aba91e5f45a 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.6.0-canary.3", "@elastic/ems-client": "8.4.0", - "@elastic/eui": "75.0.0", + "@elastic/eui": "75.1.0", "@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 95c1b8fed4a6a..69e50df7cd4b8 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 @@ -27,6 +27,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiCardSelect.select": "Select", "euiCardSelect.selected": "Selected", "euiCardSelect.unavailable": "Unavailable", + "euiCodeBlockAnnotations.ariaLabel": [Function], "euiCodeBlockCopy.copy": "Copy", "euiCodeBlockFullScreen.fullscreenCollapse": "Collapse", "euiCodeBlockFullScreen.fullscreenExpand": "Expand", 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 f3a29731325f2..5a50a74cc0f19 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 @@ -125,6 +125,13 @@ export const getEuiContextMapping = (): EuiTokensObject => { defaultMessage: 'Unavailable', description: 'Displayed button text when a card option is unavailable.', }), + 'euiCodeBlockAnnotations.ariaLabel': ({ lineNumber }: EuiValues) => + i18n.translate('core.euiCodeBlockAnnotations.ariaLabel', { + defaultMessage: 'Click to view a code annotation for line {lineNumber}', + values: { lineNumber }, + description: + 'ARIA label for a button icon that toggles a popover annotation for a specific code line', + }), 'euiCodeBlockCopy.copy': i18n.translate('core.euiCodeBlockCopy.copy', { defaultMessage: 'Copy', description: 'ARIA label for a button that copies source code text to the clipboard', diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index dd3e6f17c80f1..dd0600b71d2b2 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -84,6 +84,6 @@ 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.4.0': ['Elastic License 2.0'], - '@elastic/eui@75.0.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@75.1.0': ['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 }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/horizontal_page_steps.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/horizontal_page_steps.tsx index 8e33dcff5616e..752b49431dadb 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/horizontal_page_steps.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/components/horizontal_page_steps.tsx @@ -28,7 +28,7 @@ const NumberlessHorizontalSteps = styled(EuiStepsHorizontal)` .euiStepHorizontal { padding: 25px 16px 16px; } - .euiStepHorizontal-isIncomplete .euiStepHorizontal__title { + .euiStepHorizontal[data-step-status='incomplete'] .euiStepHorizontal__title { color: #69707d; } `; diff --git a/yarn.lock b/yarn.lock index 145fc8c6280d5..18f9a96fe74c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1539,10 +1539,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@75.0.0": - version "75.0.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-75.0.0.tgz#06f1d41181327d91d6531f240372c01c34505bee" - integrity sha512-fgjpF4l+YuMVepnYbiddpVZHkzEVrgwvsmJokaf0OZZ34UCh+OB2z4n01yAhmhQXhrFEKv8+LmQt+OMIpTBevA== +"@elastic/eui@75.1.0": + version "75.1.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-75.1.0.tgz#6bdb2a12e5dd503258e74d5585803f52b826b83e" + integrity sha512-HJgoARNsXeYDIGO9sKV+wwfmFA2IKL9hjOMj8B0PZ4fA6Euprw7KPLkakUbwjTCm0rqYUf/6zmXRafvzvdKLmA== dependencies: "@types/chroma-js" "^2.0.0" "@types/lodash" "^4.14.160" From 467891e7608b7c4d500693e2fd97d40da268952a Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Wed, 15 Feb 2023 12:53:38 -0800 Subject: [PATCH 050/210] [ResponseOps] [Alerting] Add warning to Edit Rule Flyout when publicUrl is not configured (#149832) Resolves https://github.com/elastic/kibana/issues/144890 ## Summary Added a warning to the rule flyout that will warn users about using `context.alertDetailsUrl` and `context.viewInAppUrl` in an input or text area when they do not have `publicUrl` set in their kibana config. **Warning:** Screen Shot 2023-02-01 at 11 18 17 AM Screen Shot 2023-02-01 at 11 18 26 AM ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### To verify - Remove your kibana config for `server.publicBaseUrl`, and create a rule with a connector. Add the context variables `context.alertDetailsUrl` or `context.viewInAppUrl` and verify that a warning shows up in the form. - Add `server.publicBaseUrl` to your kibana config, and create a rule with a connector. Add the context variables `context.alertDetailsUrl` or `context.viewInAppUrl` and verify that a warning shows does **not** show in the form. - You should try this for multiple connectors to verify that the warnings are configured correctly for them. --- x-pack/plugins/alerting/common/rule.ts | 1 + .../server/routes/alerts/action_variables.ts | 2 + ...er_inventory_metric_threshold_rule_type.ts | 14 ++++- .../register_log_threshold_rule_type.ts | 9 +++- .../register_metric_threshold_rule_type.ts | 14 ++++- .../rule_types/es_query/rule_type.test.ts | 1 + .../server/rule_types/es_query/rule_type.ts | 2 +- .../server/alert_rules/action_variables.ts | 2 + .../lib/alerts/action_variables.ts | 2 + .../application/lib/action_variables.test.ts | 2 + .../application/lib/action_variables.ts | 1 + .../lib/validate_params_for_warnings.test.ts | 54 +++++++++++++++++++ .../lib/validate_params_for_warnings.ts | 45 ++++++++++++++++ .../action_type_form.test.tsx | 7 ++- .../action_type_form.tsx | 34 +++++++++++- 15 files changed, 182 insertions(+), 8 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.test.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.ts diff --git a/x-pack/plugins/alerting/common/rule.ts b/x-pack/plugins/alerting/common/rule.ts index 49c274f140ea9..f548441713420 100644 --- a/x-pack/plugins/alerting/common/rule.ts +++ b/x-pack/plugins/alerting/common/rule.ts @@ -202,6 +202,7 @@ export interface ActionVariable { description: string; deprecated?: boolean; useWithTripleBracesInTemplates?: boolean; + usesPublicBaseUrl?: boolean; } export interface RuleMonitoringHistory extends SavedObjectAttributes { diff --git a/x-pack/plugins/apm/server/routes/alerts/action_variables.ts b/x-pack/plugins/apm/server/routes/alerts/action_variables.ts index bf0453811b205..0df3d7f9d7b71 100644 --- a/x-pack/plugins/apm/server/routes/alerts/action_variables.ts +++ b/x-pack/plugins/apm/server/routes/alerts/action_variables.ts @@ -17,6 +17,7 @@ export const apmActionVariables = { } ), name: 'alertDetailsUrl' as const, + usesPublicBaseUrl: true, }, environment: { description: i18n.translate( @@ -84,5 +85,6 @@ export const apmActionVariables = { } ), name: 'viewInAppUrl' as const, + usesPublicBaseUrl: true, }, }; diff --git a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts index 998a0d7051f0a..77fa814a622a4 100644 --- a/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/inventory_metric_threshold/register_inventory_metric_threshold_rule_type.ts @@ -118,14 +118,24 @@ export async function registerMetricInventoryThresholdRuleType( { name: 'group', description: groupActionVariableDescription }, { name: 'alertState', description: alertStateActionVariableDescription }, ...(getAlertDetailsPageEnabledForApp(config, 'metrics') - ? [{ name: 'alertDetailsUrl', description: alertDetailUrlActionVariableDescription }] + ? [ + { + name: 'alertDetailsUrl', + description: alertDetailUrlActionVariableDescription, + usesPublicBaseUrl: true, + }, + ] : []), { name: 'reason', description: reasonActionVariableDescription }, { name: 'timestamp', description: timestampActionVariableDescription }, { name: 'value', description: valueActionVariableDescription }, { name: 'metric', description: metricActionVariableDescription }, { name: 'threshold', description: thresholdActionVariableDescription }, - { name: 'viewInAppUrl', description: viewInAppUrlActionVariableDescription }, + { + name: 'viewInAppUrl', + description: viewInAppUrlActionVariableDescription, + usesPublicBaseUrl: true, + }, { name: 'cloud', description: cloudActionVariableDescription }, { name: 'host', description: hostActionVariableDescription }, { name: 'container', description: containerActionVariableDescription }, diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts index 09f46c98c1719..297416d0d6632 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_rule_type.ts @@ -144,11 +144,18 @@ export async function registerLogThresholdRuleType( description: denominatorConditionsActionVariableDescription, }, ...(getAlertDetailsPageEnabledForApp(config, 'logs') - ? [{ name: 'alertDetailsUrl', description: alertDetailUrlActionVariableDescription }] + ? [ + { + name: 'alertDetailsUrl', + description: alertDetailUrlActionVariableDescription, + usesPublicBaseUrl: true, + }, + ] : []), { name: 'viewInAppUrl', description: viewInAppUrlActionVariableDescription, + usesPublicBaseUrl: true, }, { name: 'cloud', description: cloudActionVariableDescription }, { name: 'host', description: hostActionVariableDescription }, diff --git a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts index 2b7074ac2956e..d2d0d36f42ac5 100644 --- a/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/metric_threshold/register_metric_threshold_rule_type.ts @@ -150,7 +150,13 @@ export async function registerMetricThresholdRuleType( { name: 'group', description: groupActionVariableDescription }, { name: 'groupByKeys', description: groupByKeysActionVariableDescription }, ...(getAlertDetailsPageEnabledForApp(config, 'metrics') - ? [{ name: 'alertDetailsUrl', description: alertDetailUrlActionVariableDescription }] + ? [ + { + name: 'alertDetailsUrl', + description: alertDetailUrlActionVariableDescription, + usesPublicBaseUrl: true, + }, + ] : []), { name: 'alertState', description: alertStateActionVariableDescription }, { name: 'reason', description: reasonActionVariableDescription }, @@ -158,7 +164,11 @@ export async function registerMetricThresholdRuleType( { name: 'value', description: valueActionVariableDescription }, { name: 'metric', description: metricActionVariableDescription }, { name: 'threshold', description: thresholdActionVariableDescription }, - { name: 'viewInAppUrl', description: viewInAppUrlActionVariableDescription }, + { + name: 'viewInAppUrl', + description: viewInAppUrlActionVariableDescription, + usesPublicBaseUrl: true, + }, { name: 'cloud', description: cloudActionVariableDescription }, { name: 'host', description: hostActionVariableDescription }, { name: 'container', description: containerActionVariableDescription }, diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts index cc6c4414777ea..aa0b5d8a4d1fc 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts @@ -67,6 +67,7 @@ describe('ruleType', () => { "description": "Navigate to Discover and show the records that triggered the alert when the rule is created in Discover. Otherwise, navigate to the status page for the rule.", "name": "link", + "usesPublicBaseUrl": true, }, ], "params": Array [ diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts index c56f691cc2580..214d2ee4b764e 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.ts @@ -150,7 +150,7 @@ export function getRuleType( { name: 'value', description: actionVariableContextValueLabel }, { name: 'hits', description: actionVariableContextHitsLabel }, { name: 'conditions', description: actionVariableContextConditionsLabel }, - { name: 'link', description: actionVariableContextLinkLabel }, + { name: 'link', description: actionVariableContextLinkLabel, usesPublicBaseUrl: true }, ], params: [ { name: 'size', description: actionVariableContextSizeLabel }, diff --git a/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts b/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts index 4e73a3b3660ab..3e70b51298ec8 100644 --- a/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts +++ b/x-pack/plugins/synthetics/server/alert_rules/action_variables.ts @@ -58,6 +58,7 @@ export const ACTION_VARIABLES = { defaultMessage: 'Link to a view showing further details and context on this alert', } ), + usesPublicBaseUrl: true, }, [VIEW_IN_APP_URL]: { name: VIEW_IN_APP_URL, @@ -67,6 +68,7 @@ export const ACTION_VARIABLES = { defaultMessage: 'Open alert details and context in Synthetics app.', } ), + usesPublicBaseUrl: true, }, [RECOVERY_REASON]: { name: RECOVERY_REASON, diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/alerts/action_variables.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/alerts/action_variables.ts index a498274f7455e..b3cd8d5817ff8 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/alerts/action_variables.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/alerts/action_variables.ts @@ -40,6 +40,7 @@ export const ACTION_VARIABLES = { 'Link to the view within Elastic that shows further details and context surrounding this alert', } ), + usesPublicBaseUrl: true, }, [VIEW_IN_APP_URL]: { name: VIEW_IN_APP_URL, @@ -50,5 +51,6 @@ export const ACTION_VARIABLES = { 'Link to the view or feature within Elastic that can be used to investigate the alert and its context further', } ), + usesPublicBaseUrl: true, }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts index c7641d3437a2c..ac94547851155 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts @@ -47,6 +47,7 @@ const expectedTransformResult = [ description: 'The URL to the Stack Management rule page that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', name: 'rule.url', + usesPublicBaseUrl: true, }, { description: 'The date the rule scheduled the action.', name: 'date' }, { description: 'The ID of the alert that scheduled actions for the rule.', name: 'alert.id' }, @@ -172,6 +173,7 @@ const expectedSummaryTransformResult = [ description: 'The URL to the Stack Management rule page that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', name: 'rule.url', + usesPublicBaseUrl: true, }, { description: 'The tags of the rule.', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts index cc85d4adbb068..76b6aba407771 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts @@ -116,6 +116,7 @@ const AlertProvidedActionVariableDescriptions = { defaultMessage: 'The URL to the Stack Management rule page that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', }), + usesPublicBaseUrl: true, }, [AlertProvidedActionVariables.date]: { name: AlertProvidedActionVariables.date, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.test.ts new file mode 100644 index 0000000000000..4f3d627c4fcf8 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.test.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ActionVariable } from '@kbn/alerting-plugin/common'; +import { validateParamsForWarnings } from './validate_params_for_warnings'; + +describe('validateParamsForWarnings', () => { + const actionVariables: ActionVariable[] = [ + { + name: 'context.url', + description: 'Test url', + usesPublicBaseUrl: true, + }, + { + name: 'context.name', + description: 'Test name', + }, + ]; + + test('returns warnings when publicUrl is not set and there are publicUrl variables used', () => { + const warning = 'server.publicBaseUrl is not set. Actions will use relative URLs.'; + expect( + validateParamsForWarnings('Test for {{context.url}}', undefined, actionVariables) + ).toEqual(warning); + + expect( + validateParamsForWarnings('link: {{ context.url }}', undefined, actionVariables) + ).toEqual(warning); + + expect( + validateParamsForWarnings('{{=<% %>=}}link: <%context.url%>', undefined, actionVariables) + ).toEqual(warning); + }); + + test('does not return warnings when publicUrl is not set and there are publicUrl variables not used', () => { + expect( + validateParamsForWarnings('Test for {{context.name}}', undefined, actionVariables) + ).toBeFalsy(); + }); + + test('does not return warnings when publicUrl is set and there are publicUrl variables used', () => { + expect( + validateParamsForWarnings('Test for {{context.url}}', 'http://test', actionVariables) + ).toBeFalsy(); + }); + + test('does not returns warnings when publicUrl is not set and the value is not a string', () => { + expect(validateParamsForWarnings(10, undefined, actionVariables)).toBeFalsy(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.ts new file mode 100644 index 0000000000000..fe7d2b0e5ffb5 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/validate_params_for_warnings.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { some } from 'lodash'; +import { i18n } from '@kbn/i18n'; +import { ActionVariable, RuleActionParam } from '@kbn/alerting-plugin/common'; +import Mustache from 'mustache'; + +const publicUrlWarning = i18n.translate( + 'xpack.triggersActionsUI.sections.actionTypeForm.warning.publicUrl', + { + defaultMessage: 'server.publicBaseUrl is not set. Actions will use relative URLs.', + } +); + +export function validateParamsForWarnings( + value: RuleActionParam, + publicBaseUrl: string | undefined, + actionVariables: ActionVariable[] | undefined +): string | null { + if (!publicBaseUrl && value && typeof value === 'string') { + const publicUrlFields = (actionVariables || []).reduce((acc, v) => { + if (v.usesPublicBaseUrl) { + acc.push(v.name.replace(/^(params\.|context\.|state\.)/, '')); + acc.push(v.name); + } + return acc; + }, new Array()); + + const variables = new Set( + (Mustache.parse(value) as Array<[string, string]>) + .filter(([type]) => type === 'name') + .map(([, v]) => v) + ); + const hasUrlFields = some(publicUrlFields, (publicUrlField) => variables.has(publicUrlField)); + if (hasUrlFields) { + return publicUrlWarning; + } + } + return null; +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx index 73f0810d4f98d..d2a443ee208a3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx @@ -24,9 +24,10 @@ import { DEFAULT_FREQUENCY } from '../../../common/constants'; import { transformActionVariables } from '../../lib/action_variables'; import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; -jest.mock('../../../common/lib/kibana'); const actionTypeRegistry = actionTypeRegistryMock.create(); +jest.mock('../../../common/lib/kibana'); + jest.mock('../../lib/action_variables', () => { const original = jest.requireActual('../../lib/action_variables'); return { @@ -36,6 +37,10 @@ jest.mock('../../lib/action_variables', () => { }); describe('action_type_form', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + const mockedActionParamsFields = React.lazy(async () => ({ default() { return ( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx index 11e987f87a8ce..9e42979f1305c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx @@ -27,6 +27,7 @@ import { EuiBetaBadge, EuiSplitPanel, useEuiTheme, + EuiCallOut, } from '@elastic/eui'; import { isEmpty, partition, some } from 'lodash'; import { ActionVariable, RuleActionParam } from '@kbn/alerting-plugin/common'; @@ -52,6 +53,7 @@ import { transformActionVariables } from '../../lib/action_variables'; import { useKibana } from '../../../common/lib/kibana'; import { ConnectorsSelection } from './connectors_selection'; import { ActionNotifyWhen } from './action_notify_when'; +import { validateParamsForWarnings } from '../../lib/validate_params_for_warnings'; export type ActionTypeFormProps = { actionItem: RuleAction; @@ -114,6 +116,7 @@ export const ActionTypeForm = ({ }: ActionTypeFormProps) => { const { application: { capabilities }, + http: { basePath }, } = useKibana().services; const { euiTheme } = useEuiTheme(); const [isOpen, setIsOpen] = useState(true); @@ -137,6 +140,8 @@ export const ActionTypeForm = ({ -1, 's', ]; + const [warning, setWarning] = useState(null); + const [useDefaultMessage, setUseDefaultMessage] = useState(false); const isSummaryAction = actionItem.frequency?.summary; @@ -382,7 +387,16 @@ export const ActionTypeForm = ({ actionParams={actionItem.params as any} index={index} errors={actionParamsErrors.errors} - editAction={setActionParamsProperty} + editAction={(key: string, value: RuleActionParam, i: number) => { + setWarning( + validateParamsForWarnings( + value, + basePath.publicBaseUrl, + availableActionVariables + ) + ); + setActionParamsProperty(key, value, i); + }} messageVariables={availableActionVariables} defaultMessage={ // if action is a summary action, show the default summary message @@ -394,6 +408,12 @@ export const ActionTypeForm = ({ actionConnector={actionConnector} executionMode={ActionConnectorMode.ActionForm} /> + {warning ? ( + <> + + + + ) : null} ) : null} @@ -475,6 +495,18 @@ export const ActionTypeForm = ({
)} + {warning && !isOpen && ( + + + {i18n.translate( + 'xpack.triggersActionsUI.sections.actionTypeForm.actionWarningsTitle', + { + defaultMessage: '1 warning', + } + )} + + + )} {checkEnabledResult.isEnabled === false && ( <> From e87d3a151c6e54cfbb0e8bf426279ebfcf4d27af Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Wed, 15 Feb 2023 17:13:44 -0500 Subject: [PATCH 051/210] [RAM] bug on _run_soon API (#151218) ## Summary FIX https://github.com/elastic/kibana/issues/149432 ### 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 --- .../alerting.test.ts | 8 ++ .../feature_privilege_builder/alerting.ts | 1 + .../group3/tests/alerting/index.ts | 1 + .../group3/tests/alerting/run_soon.ts | 75 +++++++++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts index cc7c9c9e6f402..ce4f25d4e47ea 100644 --- a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts +++ b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.test.ts @@ -91,6 +91,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:alert-type/my-feature/rule/runSoon", ] `); }); @@ -177,6 +178,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:alert-type/my-feature/rule/runSoon", "alerting:1.0.0-zeta1:alert-type/my-feature/alert/get", "alerting:1.0.0-zeta1:alert-type/my-feature/alert/find", "alerting:1.0.0-zeta1:alert-type/my-feature/alert/getAuthorizedAlertsIndices", @@ -223,6 +225,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:alert-type/my-feature/rule/runSoon", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/create", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/delete", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/update", @@ -326,6 +329,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:alert-type/my-feature/rule/runSoon", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/create", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/delete", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/update", @@ -389,6 +393,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:alert-type/my-feature/rule/runSoon", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/create", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/delete", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/update", @@ -411,6 +416,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/runSoon", ] `); }); @@ -502,6 +508,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:alert-type/my-feature/rule/runSoon", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/create", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/delete", "alerting:1.0.0-zeta1:alert-type/my-feature/rule/update", @@ -524,6 +531,7 @@ describe(`feature_privilege_builder`, () => { "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/getExecutionLog", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/find", "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/getRuleExecutionKPI", + "alerting:1.0.0-zeta1:readonly-alert-type/my-feature/rule/runSoon", "alerting:1.0.0-zeta1:another-alert-type/my-feature/alert/get", "alerting:1.0.0-zeta1:another-alert-type/my-feature/alert/find", "alerting:1.0.0-zeta1:another-alert-type/my-feature/alert/getAuthorizedAlertsIndices", diff --git a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts index 647464c714325..612981c9ffb0c 100644 --- a/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts +++ b/x-pack/plugins/security/server/authorization/privileges/feature_privilege_builder/alerting.ts @@ -24,6 +24,7 @@ const readOperations: Record = { 'getExecutionLog', 'find', 'getRuleExecutionKPI', + 'runSoon', ], alert: ['get', 'find', 'getAuthorizedAlertsIndices', 'getAlertSummary'], }; diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/index.ts index 0c6b4f815c9dc..8f6cbe1a60c89 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/index.ts @@ -26,6 +26,7 @@ export default function alertingTests({ loadTestFile, getService }: FtrProviderC loadTestFile(require.resolve('./bulk_disable')); loadTestFile(require.resolve('./clone')); loadTestFile(require.resolve('./get_flapping_settings')); + loadTestFile(require.resolve('./run_soon')); loadTestFile(require.resolve('./update_flapping_settings')); }); }); diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts new file mode 100644 index 0000000000000..831edffbae51a --- /dev/null +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group3/tests/alerting/run_soon.ts @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { UserAtSpaceScenarios } from '../../../scenarios'; +import { + getTestRuleData, + getConsumerUnauthorizedErrorMessage, + getUrlPrefix, + ObjectRemover, +} from '../../../../common/lib'; +import { FtrProviderContext } from '../../../../common/ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default function createAlertTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + describe('runSoon', () => { + const objectRemover = new ObjectRemover(supertest); + + afterEach(async () => { + await objectRemover.removeAll(); + }); + + for (const scenario of UserAtSpaceScenarios) { + const { user, space } = scenario; + describe(scenario.id, () => { + it('should handle run soon rule request appropriately', async () => { + const responseRule = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send(getTestRuleData()); + + const response = await supertestWithoutAuth + .post( + `${getUrlPrefix(space.id)}/internal/alerting/rule/${responseRule.body.id}/_run_soon` + ) + .set('kbn-xsrf', 'foo') + .auth(user.username, user.password) + .send(); + + switch (scenario.id) { + case 'no_kibana_privileges at space1': + case 'space_1_all at space2': + expect(response.statusCode).to.eql(403); + expect(response.body).to.eql({ + error: 'Forbidden', + message: getConsumerUnauthorizedErrorMessage( + 'runSoon', + 'test.noop', + 'alertsFixture' + ), + statusCode: 403, + }); + break; + case 'global_read at space1': + case 'space_1_all_alerts_none_actions at space1': + case 'superuser at space1': + case 'space_1_all at space1': + case 'space_1_all_with_restricted_fixture at space1': + expect(response.statusCode === 200 || response.statusCode === 204).to.be(true); + break; + default: + throw new Error(`Scenario untested: ${JSON.stringify(scenario)}`); + } + }); + }); + } + }); +} From 70f6eb2b4d2abf426d2c1e5bcf6ca630f1f0802a Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Wed, 15 Feb 2023 16:18:34 -0600 Subject: [PATCH 052/210] [TIP] fix policies not shown in add to blocklist flyout (#151088) https://github.com/elastic/kibana/issues/150848 --- .../modules/block_list/containers/flyout.tsx | 5 +- .../block_list/hooks/use_policies.test.tsx | 51 +++++++++++++++++++ .../modules/block_list/hooks/use_policies.ts | 38 ++++++++++++++ .../threat_intelligence/public/types.ts | 4 +- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.test.tsx create mode 100644 x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.ts diff --git a/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx b/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx index 225e990a5e8c3..fd8c1a81fa02f 100644 --- a/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx +++ b/x-pack/plugins/threat_intelligence/public/modules/block_list/containers/flyout.tsx @@ -10,6 +10,7 @@ import { CreateExceptionListItemSchema, EntriesArray, } from '@kbn/securitysolution-io-ts-list-types'; +import { usePolicies } from '../hooks/use_policies'; import { useBlockListContext } from '../../indicators/hooks/use_block_list_context'; import { ADD_TO_BLOCKLIST_FLYOUT_TITLE } from './translations'; import { useSecurityContext } from '../../../hooks/use_security_context'; @@ -33,6 +34,7 @@ export const BlockListFlyout: VFC = ({ indicatorFileHash } const Component = blockList.getFlyoutComponent(); const exceptionListApiClient = blockList.exceptionListApiClient; const FormComponent = blockList.getFormComponent(); + const { isLoading: policiesIsLoading, data: policies } = usePolicies(); // prepopulate the for with the indicator file hash const entries: EntriesArray = [ @@ -67,7 +69,8 @@ export const BlockListFlyout: VFC = ({ indicatorFileHash } apiClient: exceptionListApiClient, labels, item, - policies: [], + policies: policies || [], + policiesIsLoading, FormComponent, onClose: clearBlockListIndicatorValue, }; diff --git a/x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.test.tsx b/x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.test.tsx new file mode 100644 index 0000000000000..a01b7da64b684 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.test.tsx @@ -0,0 +1,51 @@ +/* + * Copyright 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 { renderHook } from '@testing-library/react-hooks'; +import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query'; + +const createWrapper = () => { + const queryClient = new QueryClient(); + return ({ children }: { children: any }) => ( + {children} + ); +}; + +const renderUseQuery = (result: { items: any[] }) => + renderHook(() => useQuery(['policies'], () => result), { + wrapper: createWrapper(), + }); + +describe('usePolicies', () => { + it('should have undefined data during loading state', async () => { + const mockPolicies = { items: [] }; + const { result, waitFor } = renderUseQuery(mockPolicies); + + await waitFor(() => result.current.isLoading); + + expect(result.current.isLoading).toBeTruthy(); + expect(result.current.data).toBeUndefined(); + }); + + it('should return policies on success', async () => { + const mockPolicies = { + items: [ + { + id: '123', + name: 'MyPolicy', + }, + ], + }; + const { result, waitFor } = renderUseQuery(mockPolicies); + + await waitFor(() => result.current.isSuccess); + + expect(result.current.isLoading).toBeFalsy(); + expect(result.current.data).toEqual(mockPolicies); + }); +}); diff --git a/x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.ts b/x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.ts new file mode 100644 index 0000000000000..38c5219f6bd25 --- /dev/null +++ b/x-pack/plugins/threat_intelligence/public/modules/block_list/hooks/use_policies.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; +import { useKibana } from '../../../hooks'; + +const POLICIES_URL = '/api/fleet/package_policies'; +const PACKAGE_POLICY_SAVED_OBJECT_TYPE = 'ingest-package-policies'; + +export interface PolicyResponse { + items: Policy[]; +} + +export interface Policy { + id: string; + name: string; +} + +export function usePolicies() { + const { http } = useKibana().services; + const queryKey = ['policies']; + + const fetchPolicies = () => + http.get(POLICIES_URL, { + query: { + withAgentCount: true, + kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: endpoint`, + }, + }); + + return useQuery(queryKey, fetchPolicies, { + select: (data: PolicyResponse) => data.items, + }); +} diff --git a/x-pack/plugins/threat_intelligence/public/types.ts b/x-pack/plugins/threat_intelligence/public/types.ts index 3aa0912bd8b9e..8ba584ecb924a 100644 --- a/x-pack/plugins/threat_intelligence/public/types.ts +++ b/x-pack/plugins/threat_intelligence/public/types.ts @@ -23,6 +23,7 @@ import { DataProvider } from '@kbn/timelines-plugin/common'; import { Start as InspectorPluginStart } from '@kbn/inspector-plugin/public'; import { CasesUiSetup, CasesUiStart } from '@kbn/cases-plugin/public/types'; import { CreateExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; +import { Policy } from './modules/block_list/hooks/use_policies'; export interface SecuritySolutionDataViewBase extends DataViewBase { fields: Array; @@ -79,7 +80,8 @@ export interface UseInvestigateInTimelineProps { export interface BlockListFlyoutProps { apiClient: unknown; item: CreateExceptionListItemSchema; - policies: unknown[]; + policies: Policy[]; + policiesIsLoading: boolean; FormComponent: NamedExoticComponent; onClose: () => void; } From 4525c4b4e47a7267de8d5c6d30a3a2f668dd2425 Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Wed, 15 Feb 2023 19:53:23 -0400 Subject: [PATCH 053/210] [Discover] Fix issue where editing a data view causes the UI to become out of sync (#150830) ## Summary Let's try this again with a simpler and hopefully more robust approach. This PR fixes the issue where editing a data view in Discover causes the UI to become out of sync with the current data view due to the stable object identity. Fixes #149857. Fixes #150740. ### 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 - [ ] ~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) --- .../components/top_nav/discover_topnav.tsx | 9 ++- .../apps/discover/group2/_data_view_edit.ts | 58 ++++++++++++++++++- .../page_objects/unified_search_page.ts | 21 +++++-- 3 files changed, 76 insertions(+), 12 deletions(-) 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 df7d12fc90f2f..f8aae447c5c98 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 @@ -186,10 +186,13 @@ export const DiscoverTopNav = ({ ); const onEditDataView = async (editedDataView: DataView) => { - if (!editedDataView.isPersisted()) { - await updateAdHocDataViewId(editedDataView); + if (editedDataView.isPersisted()) { + // Clear the current data view from the cache and create a new instance + // of it, ensuring we have a new object reference to trigger a re-render + dataViews.clearInstanceCache(editedDataView.id); + stateContainer.actions.setDataView(await dataViews.create(editedDataView.toSpec(), true)); } else { - stateContainer.actions.setDataView(editedDataView); + await updateAdHocDataViewId(editedDataView); } stateContainer.actions.loadDataViewList(); stateContainer.dataState.fetch(); diff --git a/test/functional/apps/discover/group2/_data_view_edit.ts b/test/functional/apps/discover/group2/_data_view_edit.ts index d1e98296b2a39..1ca3332fc1da2 100644 --- a/test/functional/apps/discover/group2/_data_view_edit.ts +++ b/test/functional/apps/discover/group2/_data_view_edit.ts @@ -45,9 +45,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { path: '/my-index-000002', method: 'DELETE', }); + await es.transport.request({ + path: '/my-index-000003', + method: 'DELETE', + }); }); - it('create data view', async function () { + it('create ad hoc data view', async function () { const initialPattern = 'my-index-'; await es.transport.request({ path: '/my-index-000001/_doc', @@ -78,10 +82,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect((await PageObjects.discover.getAllFieldNames()).length).to.be(3); }); - it('update data view', async function () { + it('create saved data view', async function () { const updatedPattern = 'my-index-000001'; await PageObjects.discover.clickIndexPatternActions(); - await PageObjects.unifiedSearch.editDataView(updatedPattern); + await PageObjects.unifiedSearch.createNewDataView(updatedPattern, false, true); await retry.try(async () => { expect(await PageObjects.discover.getHitCountInt()).to.be(1); @@ -90,5 +94,53 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSidebarHasLoaded(); expect((await PageObjects.discover.getAllFieldNames()).length).to.be(2); }); + + it('update data view with a different time field', async function () { + const updatedPattern = 'my-index-000003'; + await es.transport.request({ + path: '/my-index-000003/_doc', + method: 'POST', + body: { + timestamp: new Date('1970-01-01').toISOString(), + c: 'GET /search HTTP/1.1 200 1070000', + d: 'GET /search HTTP/1.1 200 1070000', + }, + }); + for (let i = 0; i < 3; i++) { + await es.transport.request({ + path: '/my-index-000003/_doc', + method: 'POST', + body: { + timestamp: new Date().toISOString(), + c: 'GET /search HTTP/1.1 200 1070000', + d: 'GET /search HTTP/1.1 200 1070000', + }, + }); + } + await PageObjects.discover.clickIndexPatternActions(); + await PageObjects.unifiedSearch.editDataView(updatedPattern, 'timestamp'); + await retry.try(async () => { + expect(await PageObjects.discover.getHitCountInt()).to.be(3); + }); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + expect((await PageObjects.discover.getAllFieldNames()).length).to.be(3); + expect(await PageObjects.discover.isChartVisible()).to.be(true); + expect(await PageObjects.timePicker.timePickerExists()).to.be(true); + }); + + it('update data view with no time field', async function () { + await PageObjects.discover.clickIndexPatternActions(); + await PageObjects.unifiedSearch.editDataView( + undefined, + "--- I don't want to use the time filter ---" + ); + await retry.try(async () => { + expect(await PageObjects.discover.getHitCountInt()).to.be(4); + }); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + expect((await PageObjects.discover.getAllFieldNames()).length).to.be(3); + expect(await PageObjects.discover.isChartVisible()).to.be(false); + expect(await PageObjects.timePicker.timePickerExists()).to.be(false); + }); }); } diff --git a/test/functional/page_objects/unified_search_page.ts b/test/functional/page_objects/unified_search_page.ts index deea5d105f5f5..cef9746a3aaff 100644 --- a/test/functional/page_objects/unified_search_page.ts +++ b/test/functional/page_objects/unified_search_page.ts @@ -12,6 +12,7 @@ export class UnifiedSearchPageObject extends FtrService { private readonly retry = this.ctx.getService('retry'); private readonly testSubjects = this.ctx.getService('testSubjects'); private readonly find = this.ctx.getService('find'); + private readonly comboBox = this.ctx.getService('comboBox'); public async switchDataView( switchButtonSelector: string, @@ -90,13 +91,21 @@ export class UnifiedSearchPageObject extends FtrService { await this.testSubjects.click(adHoc ? 'exploreIndexPatternButton' : 'saveIndexPatternButton'); } - public async editDataView(newPattern: string) { - await this.clickCreateNewDataView(); - await this.testSubjects.setValue('createIndexPatternTitleInput', newPattern, { - clearWithKeyboard: true, - typeCharByChar: true, - }); + public async editDataView(newPattern?: string, newTimeField?: string) { + await this.clickEditDataView(); + if (newPattern) { + await this.testSubjects.setValue('createIndexPatternTitleInput', newPattern, { + clearWithKeyboard: true, + typeCharByChar: true, + }); + } + if (newTimeField) { + await this.comboBox.set('timestampField', newTimeField); + } await this.testSubjects.click('saveIndexPatternButton'); + if (await this.testSubjects.exists('confirmModalConfirmButton')) { + await this.testSubjects.click('confirmModalConfirmButton'); + } } public async isAdHocDataView() { From 4e5595b92bc30bc0a7f4d7c04dd32e07ee8553bb Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 16 Feb 2023 00:54:26 -0500 Subject: [PATCH 054/210] [api-docs] 2023-02-16 Daily api_docs build (#151397) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/250 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 14 + api_docs/alerting.mdx | 4 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 4 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_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.devdocs.json | 300 +- api_docs/content_management.mdx | 4 +- 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.devdocs.json | 128 - 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.devdocs.json | 80 - api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 12 +- api_docs/deprecations_by_plugin.mdx | 42 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.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.devdocs.json | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 4 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.devdocs.json | 839 ++- api_docs/kbn_cell_actions.mdx | 7 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- .../kbn_content_management_table_list.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 | 4 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 4 +- 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 +- 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 +- ...core_saved_objects_api_server.devdocs.json | 652 +++ .../kbn_core_saved_objects_api_server.mdx | 4 +- ...core_saved_objects_api_server_internal.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ..._objects_base_server_internal.devdocs.json | 157 + ...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 +- ...kbn_core_saved_objects_common.devdocs.json | 139 +- api_docs/kbn_core_saved_objects_common.mdx | 4 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...cts_migration_server_internal.devdocs.json | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- ...kbn_core_saved_objects_server.devdocs.json | 4791 ++++++++++++++--- api_docs/kbn_core_saved_objects_server.mdx | 10 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- ...re_saved_objects_utils_server.devdocs.json | 1540 +----- .../kbn_core_saved_objects_utils_server.mdx | 7 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../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_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.devdocs.json | 84 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.devdocs.json | 12 + api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.devdocs.json | 14 + api_docs/lens.mdx | 4 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 36 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 36 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.devdocs.json | 126 +- api_docs/spaces.mdx | 4 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 493 files changed, 6710 insertions(+), 3282 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index e4c065f9b9ebf..01796d9d6e216 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index d58d467db73ee..6660f43f9fc04 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index c156023f94dbf..459b12ad51964 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 883c6986fb91b..772cc263ceccf 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -4248,6 +4248,20 @@ "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.ActionVariable.usesPublicBaseUrl", + "type": "CompoundType", + "tags": [], + "label": "usesPublicBaseUrl", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/alerting/common/rule.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 75ba3e3ba567e..045fc7332d186 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.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 | |-------------------|-----------|------------------------|-----------------| -| 488 | 1 | 477 | 39 | +| 489 | 1 | 478 | 39 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index d800d325dc289..b874620614d43 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 86ba870d358f9..1e0d6b35b0cab 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; -Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 0cf8ad136cb70..2cf6be5ee966b 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index a5699f4db79a7..a5774ff145599 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 543df114bbba6..864b7b1fcbc37 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 4e3ef56f79ad4..bda164b248d35 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index a90a158fdc200..228b64499a587 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index e0409288b5b7f..1585c8444b6f0 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 5243f3f348c74..fc56cff42156b 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index b49a4e1e92bf4..1dcbe975bc599 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 342526c66bfbc..daadccc54a779 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 132d880eb47db..bb9678e4df83a 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 2f336e840c10c..54db6d38fa9b3 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.devdocs.json b/api_docs/content_management.devdocs.json index cd44c8835e205..e07703f73f764 100644 --- a/api_docs/content_management.devdocs.json +++ b/api_docs/content_management.devdocs.json @@ -194,6 +194,72 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "contentManagement", + "id": "def-common.DeleteIn", + "type": "Interface", + "tags": [], + "label": "DeleteIn", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.DeleteIn", + "text": "DeleteIn" + }, + "" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "contentManagement", + "id": "def-common.DeleteIn.contentType", + "type": "Uncategorized", + "tags": [], + "label": "contentType", + "description": [], + "signature": [ + "T" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.DeleteIn.data", + "type": "Uncategorized", + "tags": [], + "label": "data", + "description": [], + "signature": [ + "Data" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.DeleteIn.options", + "type": "Uncategorized", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "Options | undefined" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "contentManagement", "id": "def-common.GetIn", @@ -311,6 +377,176 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.SearchIn", + "type": "Interface", + "tags": [], + "label": "SearchIn", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.SearchIn", + "text": "SearchIn" + }, + "" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "contentManagement", + "id": "def-common.SearchIn.contentType", + "type": "Uncategorized", + "tags": [], + "label": "contentType", + "description": [], + "signature": [ + "T" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.SearchIn.params", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "Params" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.SearchIn.options", + "type": "Uncategorized", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "Options | undefined" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.SearchOut", + "type": "Interface", + "tags": [], + "label": "SearchOut", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.SearchOut", + "text": "SearchOut" + }, + "" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "contentManagement", + "id": "def-common.SearchOut.hits", + "type": "Array", + "tags": [], + "label": "hits", + "description": [], + "signature": [ + "Data[]" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.UpdateIn", + "type": "Interface", + "tags": [], + "label": "UpdateIn", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.UpdateIn", + "text": "UpdateIn" + }, + "" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "contentManagement", + "id": "def-common.UpdateIn.contentType", + "type": "Uncategorized", + "tags": [], + "label": "contentType", + "description": [], + "signature": [ + "T" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.UpdateIn.data", + "type": "Uncategorized", + "tags": [], + "label": "data", + "description": [], + "signature": [ + "Data" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.UpdateIn.options", + "type": "Uncategorized", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "Options | undefined" + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "enums": [], @@ -353,7 +589,7 @@ "label": "ProcedureName", "description": [], "signature": [ - "\"create\" | \"get\"" + "\"create\" | \"update\" | \"get\" | \"delete\" | \"search\"" ], "path": "src/plugins/content_management/common/rpc.ts", "deprecated": false, @@ -370,7 +606,7 @@ "label": "procedureNames", "description": [], "signature": [ - "readonly [\"get\", \"create\"]" + "readonly [\"get\", \"create\", \"update\", \"delete\", \"search\"]" ], "path": "src/plugins/content_management/common/rpc.ts", "deprecated": false, @@ -427,6 +663,66 @@ "path": "src/plugins/content_management/common/rpc.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.schemas.update", + "type": "Object", + "tags": [], + "label": "update", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.ProcedureSchemas", + "text": "ProcedureSchemas" + } + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.schemas.delete", + "type": "Object", + "tags": [], + "label": "delete", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.ProcedureSchemas", + "text": "ProcedureSchemas" + } + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.schemas.search", + "type": "Object", + "tags": [], + "label": "search", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.ProcedureSchemas", + "text": "ProcedureSchemas" + } + ], + "path": "src/plugins/content_management/common/rpc.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index bc7b74169bd1a..ac8dc97d4332b 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.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 | |-------------------|-----------|------------------------|-----------------| -| 25 | 0 | 25 | 3 | +| 42 | 0 | 42 | 3 | ## Client diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 04afbd13e3b6c..c5d69a448ec3b 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 5a50caf5c44e3..28bf4b9cf34e0 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index f931d509ae5a5..a1cf418f9a407 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index c749bf94bb3e6..27a7bee70ea33 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index e8037ea98316b..616abe16084f5 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -10545,38 +10545,6 @@ "plugin": "@kbn/core-saved-objects-api-browser", "path": "packages/core/saved-objects/core-saved-objects-api-browser/src/simple_saved_object.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, { "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" @@ -10593,18 +10561,6 @@ "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, { "plugin": "@kbn/core-saved-objects-browser-internal", "path": "packages/core/saved-objects/core-saved-objects-browser-internal/src/simple_saved_object.ts" @@ -10941,18 +10897,6 @@ "plugin": "@kbn/core-saved-objects-browser-mocks", "path": "packages/core/saved-objects/core-saved-objects-browser-mocks/src/simple_saved_object.mock.ts" }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, { "plugin": "@kbn/core-saved-objects-import-export-server-internal", "path": "packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/errors.ts" @@ -14029,14 +13973,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx" @@ -21660,14 +21596,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx" @@ -28414,38 +28342,6 @@ "plugin": "@kbn/core-saved-objects-api-browser", "path": "packages/core/saved-objects/core-saved-objects-api-browser/src/simple_saved_object.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, { "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" @@ -28462,18 +28358,6 @@ "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, { "plugin": "@kbn/core-saved-objects-browser-internal", "path": "packages/core/saved-objects/core-saved-objects-browser-internal/src/simple_saved_object.ts" @@ -28810,18 +28694,6 @@ "plugin": "@kbn/core-saved-objects-browser-mocks", "path": "packages/core/saved-objects/core-saved-objects-browser-mocks/src/simple_saved_object.mock.ts" }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, { "plugin": "@kbn/core-saved-objects-import-export-server-internal", "path": "packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/errors.ts" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 321f95671418d..6130c36147573 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 95e89129ec02f..75a57004aebde 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 632a60e30f6b0..0adfe5be98204 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 70d7ffddd3609..db68fbd49a257 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 216c74ebb9eec..f587f3f68875f 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 3b44ec9249ac4..2f3dc1c92f60d 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 108a6ba16bccc..c16c65d2dc322 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -499,14 +499,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx" @@ -8715,14 +8707,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx" @@ -16026,14 +16010,6 @@ "plugin": "infra", "path": "x-pack/plugins/infra/public/pages/logs/settings/validation_errors.ts" }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx" - }, - { - "plugin": "fleet", - "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx" - }, { "plugin": "fleet", "path": "x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx" @@ -25819,38 +25795,6 @@ "plugin": "@kbn/core-saved-objects-api-browser", "path": "packages/core/saved-objects/core-saved-objects-api-browser/src/simple_saved_object.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, { "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" @@ -25867,18 +25811,6 @@ "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, { "plugin": "@kbn/core-saved-objects-browser-internal", "path": "packages/core/saved-objects/core-saved-objects-browser-internal/src/simple_saved_object.ts" @@ -26159,18 +26091,6 @@ "plugin": "@kbn/core-saved-objects-browser-mocks", "path": "packages/core/saved-objects/core-saved-objects-browser-mocks/src/simple_saved_object.mock.ts" }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, { "plugin": "@kbn/core-saved-objects-import-export-server-internal", "path": "packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/errors.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 1467b9fdbb28b..938ca42f41987 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index af1140a0c0fa8..fc85563f7f310 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index fa95fc518c039..7e487d52132f8 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,10 +21,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | alerting, discover, securitySolution | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | actions, alerting | - | +| | @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, @kbn/core, actions, alerting, canvas, enterpriseSearch, securitySolution, taskManager, dashboard, savedSearch, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server, savedObjects, embeddable, visualizations, fleet, infra, graph, ml | - | | | @kbn/core-saved-objects-migration-server-internal, actions, dataViews, data, alerting, savedObjectsTagging, canvas, lens, cases, graph, lists, maps, securitySolution, dashboard, savedSearch, visualizations, @kbn/core-test-helpers-so-type-serializer | - | -| | @kbn/core-saved-objects-common, @kbn/core, actions, alerting, canvas, enterpriseSearch, securitySolution, taskManager, dashboard, savedSearch, @kbn/core-saved-objects-server-internal, savedObjects, embeddable, visualizations, fleet, infra, graph, ml | - | -| | @kbn/core-saved-objects-common, @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, dataViews, discover, savedObjectsTagging, savedObjectsFinder, fleet, canvas, osquery, securitySolution, synthetics, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-server, @kbn/core-saved-objects-import-export-server-internal, apm, savedObjectsTaggingOss, cases, lists, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal, dashboard | - | -| | @kbn/core-saved-objects-common, @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, dataViews, discover, savedObjectsTagging, savedObjectsFinder, fleet, canvas, osquery, securitySolution, synthetics, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-server, @kbn/core-saved-objects-import-export-server-internal, apm, savedObjectsTaggingOss, cases, lists, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal, data | - | +| | @kbn/core-saved-objects-common, @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, dataViews, discover, savedObjectsTagging, savedObjectsFinder, fleet, canvas, osquery, securitySolution, synthetics, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, apm, savedObjectsTaggingOss, cases, lists, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal, dashboard | - | +| | @kbn/core-saved-objects-common, @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, dataViews, discover, savedObjectsTagging, savedObjectsFinder, fleet, canvas, osquery, securitySolution, synthetics, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, apm, savedObjectsTaggingOss, cases, lists, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal, data | - | | | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | | | discover | - | | | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | @@ -53,7 +53,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | | | monitoring | - | | | @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, visualizations, dashboard, ml, infra, cloudSecurityPosture, dashboardEnhanced, monitoring, synthetics, @kbn/core-saved-objects-browser-internal | - | -| | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-api-server, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, lens, fleet, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, dataViews, data, embeddable, controls, uiActionsEnhanced, maps, canvas, cases, dashboardEnhanced, globalSearchProviders, infra | - | +| | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, lens, fleet, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, dataViews, data, embeddable, controls, uiActionsEnhanced, maps, canvas, cases, dashboardEnhanced, globalSearchProviders, infra | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, savedSearch, visualizations, dashboard, lens, maps, infra, graph, synthetics | - | | | @kbn/core-saved-objects-browser-mocks, home, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, visualizations, dashboard, maps, infra, graph | - | @@ -84,7 +84,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core | - | | | @kbn/core, advancedSettings, triggersActionsUi, visualizations | - | | | home, canvas, osquery | - | -| | home, data, esUiShared, spaces, savedObjectsManagement, fleet, observability, ml, apm, indexLifecycleManagement, synthetics, upgradeAssistant, ux, kibanaOverview | - | +| | home, data, esUiShared, spaces, savedObjectsManagement, fleet, observability, ml, apm, enterpriseSearch, indexLifecycleManagement, synthetics, upgradeAssistant, ux, kibanaOverview | - | | | dataViews, maps | - | | | dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index acc880ee82ea5..ec2e386d2715a 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -34,12 +34,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectsBulkUpdateOptions) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectsBulkResolveResponse) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectsBulkCreateObject) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/server/index.ts#:~:text=SavedObjectAttributes), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectAttributes), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/types/index.ts#:~:text=SavedObjectAttributes), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/server/index.ts#:~:text=SavedObjectAttributes) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectsStart), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/server/index.ts#:~:text=SavedObjectsStart) | - | | | [mocks.ts](https://github.com/elastic/kibana/tree/main/src/core/public/mocks.ts#:~:text=savedObjectsServiceMock) | - | | | [mocks.ts](https://github.com/elastic/kibana/tree/main/src/core/public/mocks.ts#:~:text=simpleSavedObjectMock) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectAttributeSingle), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/types/index.ts#:~:text=SavedObjectAttributeSingle) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectAttribute), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/types/index.ts#:~:text=SavedObjectAttribute) | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectAttributes), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/types/index.ts#:~:text=SavedObjectAttributes), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/server/index.ts#:~:text=SavedObjectAttributes) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/src/core/public/index.ts#:~:text=SavedObjectReference), [index.ts](https://github.com/elastic/kibana/tree/main/src/core/types/index.ts#:~:text=SavedObjectReference) | - | @@ -126,9 +126,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [base.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts#:~:text=SavedObject), [base.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts#:~:text=SavedObject), [resolve.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts#:~:text=SavedObject), [resolve.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts#:~:text=SavedObject), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObject), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObject), [find.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts#:~:text=SavedObject), [find.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject)+ 5 more | - | -| | [base.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts#:~:text=SavedObject), [base.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts#:~:text=SavedObject), [resolve.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts#:~:text=SavedObject), [resolve.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts#:~:text=SavedObject), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObject), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObject), [find.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts#:~:text=SavedObject), [find.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject)+ 35 more | - | -| | [bulk_create.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts#:~:text=SavedObjectReference), [bulk_create.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts#:~:text=SavedObjectReference), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObjectReference), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObjectReference), [update.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts#:~:text=SavedObjectReference), [create.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts#:~:text=SavedObjectReference), [create.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts#:~:text=SavedObjectReference) | - | +| | [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject) | - | +| | [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject), [saved_objects_repository.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts#:~:text=SavedObject)+ 2 more | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-api-server/index.ts#:~:text=SavedObjectAttributes) | - | @@ -206,7 +206,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [index.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/index.ts#:~:text=SavedObject) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/index.ts#:~:text=SavedObject), [index.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/index.ts#:~:text=SavedObject) | - | -| | [server_types.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts#:~:text=SavedObjectAttributes), [server_types.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts#:~:text=SavedObjectAttributes), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/saved_objects.ts#:~:text=SavedObjectAttributes) | - | +| | [server_types.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts#:~:text=SavedObjectAttributes), [server_types.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts#:~:text=SavedObjectAttributes), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/saved_objects.ts#:~:text=SavedObjectAttributes), [server_types.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts#:~:text=SavedObjectAttributes), [server_types.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/server_types.ts#:~:text=SavedObjectAttributes), [saved_objects.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-common/src/saved_objects.ts#:~:text=SavedObjectAttributes) | - | @@ -223,7 +223,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [utils.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion)+ 14 more | - | +| | [utils.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/utils.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [internal_transforms.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/internal_transforms.ts#:~:text=convertToMultiNamespaceTypeVersion), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=convertToMultiNamespaceTypeVersion), [validate_migrations.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion), [document_migrator.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts#:~:text=convertToMultiNamespaceTypeVersion)+ 18 more | - | @@ -231,8 +231,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject) | - | -| | [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject), [security.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts#:~:text=SavedObject) | - | +| | [index.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server/index.ts#:~:text=SavedObjectAttributes) | - | @@ -240,7 +239,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes) | - | +| | [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes), [collect_references_deep.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts#:~:text=SavedObjectAttributes) | - | @@ -289,8 +288,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=authc) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=authz) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=index), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/plugin.ts#:~:text=index) | - | +| | [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes)+ 16 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | -| | [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [actions_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/actions_client.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/actions/server/types.ts#:~:text=SavedObjectAttributes)+ 3 more | - | @@ -325,8 +324,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/plugin.test.ts#:~:text=getKibanaFeatures) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/plugin.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/lib/license_state.test.ts#:~:text=license%24), [license_state.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/lib/license_state.test.ts#:~:text=license%24) | 8.8.0 | | | [task.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/usage/task.ts#:~:text=index) | - | +| | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes)+ 38 more | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/index.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | -| | [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/common/rule.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes), [migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts#:~:text=SavedObjectAttributes)+ 14 more | - | @@ -370,8 +369,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [platform.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/kibana/platform.ts#:~:text=savedObjects), [platform.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/kibana/platform.ts#:~:text=savedObjects) | - | | | [platform.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/platform.ts#:~:text=SavedObjectsClientContract), [platform.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/platform.ts#:~:text=SavedObjectsClientContract) | - | | | [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/workpad.ts#:~:text=ResolvedSimpleSavedObject), [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/workpad.ts#:~:text=ResolvedSimpleSavedObject), [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/workpad.ts#:~:text=ResolvedSimpleSavedObject), [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/workpad.ts#:~:text=ResolvedSimpleSavedObject) | - | +| | [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes) | - | | | [platform.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/platform.ts#:~:text=SavedObjectsStart), [platform.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/services/platform.ts#:~:text=SavedObjectsStart) | - | -| | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/shareable_runtime/types.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/custom_elements/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes), [find.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/workpad/find.ts#:~:text=SavedObjectAttributes) | - | | | [saved_lens.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts#:~:text=SavedObjectReference), [saved_lens.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_lens.ts#:~:text=SavedObjectReference), [saved_map.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_map.ts#:~:text=SavedObjectReference), [saved_map.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_map.ts#:~:text=SavedObjectReference), [saved_search.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_search.ts#:~:text=SavedObjectReference), [saved_search.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_search.ts#:~:text=SavedObjectReference), [saved_visualization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_visualization.ts#:~:text=SavedObjectReference), [saved_visualization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/saved_visualization.ts#:~:text=SavedObjectReference), [embeddable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=SavedObjectReference), [embeddable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=SavedObjectReference) | - | | | [workpad.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/workpad.ts#:~:text=convertToMultiNamespaceTypeVersion), [custom_element.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/saved_objects/custom_element.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -457,9 +456,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=resolve) | - | | | [find_dashboard_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/find_dashboard_saved_objects.ts#:~:text=SimpleSavedObject), [find_dashboard_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/find_dashboard_saved_objects.ts#:~:text=SimpleSavedObject), [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing/dashboard_listing.tsx#:~:text=SimpleSavedObject), [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing/dashboard_listing.tsx#:~:text=SimpleSavedObject) | - | | | [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=ResolvedSimpleSavedObject), [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=ResolvedSimpleSavedObject) | - | +| | [migrate_extract_panel_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/migrations/migrate_extract_panel_references.ts#:~:text=SavedObjectAttributes), [migrate_extract_panel_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/migrations/migrate_extract_panel_references.ts#:~:text=SavedObjectAttributes), [dashboard_telemetry_collection_task.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/dashboard_telemetry_collection_task.ts#:~:text=SavedObjectAttributes), [dashboard_telemetry_collection_task.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/dashboard_telemetry_collection_task.ts#:~:text=SavedObjectAttributes), [dashboard_telemetry_collection_task.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/dashboard_telemetry_collection_task.ts#:~:text=SavedObjectAttributes), [dashboard_telemetry.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/dashboard_telemetry.ts#:~:text=SavedObjectAttributes), [dashboard_telemetry.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/dashboard_telemetry.ts#:~:text=SavedObjectAttributes), [find_by_value_embeddables.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/find_by_value_embeddables.ts#:~:text=SavedObjectAttributes), [find_by_value_embeddables.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/usage/find_by_value_embeddables.ts#:~:text=SavedObjectAttributes), [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=SavedObjectAttributes)+ 20 more | - | | | [clone_panel_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx#:~:text=SavedObjectsStart), [clone_panel_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx#:~:text=SavedObjectsStart) | - | | | [dashboard_saved_object.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/dashboard_saved_object.stub.ts#:~:text=savedObjectsServiceMock), [dashboard_saved_object.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/dashboard_saved_object.stub.ts#:~:text=savedObjectsServiceMock) | - | -| | [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=SavedObjectAttributes), [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectAttributes)+ 11 more | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectReference), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectReference), [dashboard_saved_object_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_saved_object/persistable_state/dashboard_saved_object_references.ts#:~:text=SavedObjectReference), [dashboard_container_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_container/persistable_state/dashboard_container_references.ts#:~:text=SavedObjectReference), [dashboard_container_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_container/persistable_state/dashboard_container_references.ts#:~:text=SavedObjectReference), [dashboard_container_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/dashboard_container/persistable_state/dashboard_container_references.ts#:~:text=SavedObjectReference) | - | | | [dashboard_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | @@ -613,9 +612,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [analytics_collection_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx#:~:text=RedirectAppLinks), [analytics_collection_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx#:~:text=RedirectAppLinks), [analytics_collection_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx#:~:text=RedirectAppLinks) | - | | | [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi), [account_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/account_settings/account_settings.tsx#:~:text=uiApi) | - | | | [check_access.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz), [check_access.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/lib/check_access.ts#:~:text=authz) | - | -| | [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes) | - | +| | [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes), [telemetry.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts#:~:text=SavedObjectAttributes) | - | @@ -657,9 +657,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject) | - | | | [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject), [epm.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/common/types/models/epm.ts#:~:text=SavedObject) | - | -| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - | -| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - | -| | [filter_dataset.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_dataset.tsx#:~:text=title), [filter_log_level.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - | +| | [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - | +| | [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title), [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - | +| | [query_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/query_bar.tsx#:~:text=title) | - | | | [use_get_logs_discover_link.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/multi_page_layout/hooks/use_get_logs_discover_link.tsx#:~:text=indexPatternId) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/plugin.ts#:~:text=disabled) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/fleet/server/plugin.ts#:~:text=disabled) | 8.8.0 | @@ -1067,10 +1067,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [get_saved_searches.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts#:~:text=resolve), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=resolve), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=resolve), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=resolve), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=resolve), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=resolve), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=resolve) | - | | | [save_saved_searches.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts#:~:text=update), [save_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.test.ts#:~:text=update), [save_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.test.ts#:~:text=update) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/types.ts#:~:text=ResolvedSimpleSavedObject) | - | +| | [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes) | - | | | [save_saved_searches.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts#:~:text=SavedObjectsStart), [save_saved_searches.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts#:~:text=SavedObjectsStart), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=SavedObjectsStart), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=SavedObjectsStart), [save_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.test.ts#:~:text=SavedObjectsStart), [save_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.test.ts#:~:text=SavedObjectsStart) | - | | | [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=savedObjectsServiceMock), [get_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.test.ts#:~:text=savedObjectsServiceMock), [save_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.test.ts#:~:text=savedObjectsServiceMock), [save_saved_searches.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.test.ts#:~:text=savedObjectsServiceMock) | - | | | [search.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | -| | [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes), [search_migrations.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_search/server/saved_objects/search_migrations.ts#:~:text=SavedObjectAttributes) | - | @@ -1131,8 +1131,8 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=SavedObjectsClientContract), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=SavedObjectsClientContract), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=SavedObjectsClientContract), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts#:~:text=SavedObjectsClientContract), [utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts#:~:text=SavedObjectsClientContract) | - | | | [use_dashboard_button_href.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/use_dashboard_button_href.ts#:~:text=find), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/overview/containers/overview_cti_links/index.tsx#:~:text=find), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/overview/containers/overview_cti_links/index.tsx#:~:text=find), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=find), [utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts#:~:text=find) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/hooks/types.ts#:~:text=SimpleSavedObject) | - | +| | [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes) | - | | | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | -| | [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_types.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes), [legacy_migrations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts#:~:text=SavedObjectAttributes) | - | | | [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [policy_hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/policy/view/policy_hooks.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [api_client.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/service/api_client.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [lists.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/lists.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [manifest_manager.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID), [manifest_manager.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_ID)+ 34 more | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_NAME) | - | | | [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [constants.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/pages/trusted_apps/constants.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/scripts/endpoint/trusted_apps/index.ts#:~:text=ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION) | - | @@ -1208,7 +1208,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes) | - | +| | [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes), [task_store.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/task_manager/server/task_store.test.ts#:~:text=SavedObjectAttributes) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index dac3f91af8901..1c7ec65271f44 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 3361a8b6afa62..19c685f5d07f5 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 96fa5b0db7b6b..8a6210844db85 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 19f537c7686b0..b4551b83e1726 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 49228282fa1df..53b17c01735ee 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 9cd098cec4943..2912d2b598553 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 85059424cefac..82c1486689a80 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index c9ba2ae55493c..561e5511d4f8a 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 5f8d386710d5a..5d73393736696 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index aef907e9daf5e..a11bb262d597b 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 9a4346f628c73..307341e1df79e 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index fd0dda38e0606..f3b90aefa2917 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 482ac924c3343..125882023b0c2 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 960185c05fd14..3d1e900efdc63 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 942fa6e336be5..8317a90f00b9c 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 1563f0daa66c7..84335fca321f1 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index afc68bf55fe06..7d2a39d25068c 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index bb5d3f5f82ab3..5f56c15876bf5 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 4182ea1f5ca05..be0ea397efef9 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index a04c44eae02d0..8c3f99da4e44f 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 293e82177cbea..231d4bfd3ee60 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index a6bdd2b117a36..bde358a7e3d11 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index f3218767c7d33..a3137a10e5a54 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index cec06d5c45b0f..fdb7580f7242a 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index 07bde0d9dff2c..06ca3e0a50bed 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 060933ccb4b96..facc3ced12015 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 80d9d3bfe524b..7a7b44331611f 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 3aaea60931ab8..7d81280fae05d 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 323aab019c973..11ba5bd516c9c 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.devdocs.json b/api_docs/files.devdocs.json index 53059366ece6c..462d19625454f 100644 --- a/api_docs/files.devdocs.json +++ b/api_docs/files.devdocs.json @@ -5350,7 +5350,7 @@ "\nSpecify which HTTP routes to create for the file kind.\n\nYou can always create your own HTTP routes for working with files but\nthis interface allows you to expose basic CRUD operations, upload, download\nand sharing of files over a RESTful-like interface.\n" ], "signature": [ - "{ create?: any; update?: any; delete?: any; getById?: any; list?: any; download?: any; share?: any; }" + "{ create?: HttpEndpointDefinition | undefined; update?: HttpEndpointDefinition | undefined; delete?: HttpEndpointDefinition | undefined; getById?: HttpEndpointDefinition | undefined; list?: HttpEndpointDefinition | undefined; download?: HttpEndpointDefinition | undefined; share?: HttpEndpointDefinition | undefined; }" ], "path": "packages/shared-ux/file/types/index.d.ts", "deprecated": false, diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 28534c867291a..66f541c80817c 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 29b1cc24ad8e4..8df86ca78898f 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 7cf96a2b9254b..104b2550f6c8d 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 5bbdc632924b4..937f7ac4b119f 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; -Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index d7ff415f1ad20..4f4fe8e1456a5 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 407ac6d523aa4..474bcb99cb062 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 5e14a770666d9..53b82662e70ac 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 74f900705b85c..173f639693ca2 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 6ee92daa82fc0..4f8d00209d4c0 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index d4d5730a704ee..cf1fdb6cd1dbf 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 3d12adcaf6c1a..51e4f190a255e 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 6e321dd674856..e0fff424e74a4 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 2ed388278c263..ca1b4c40d2f7f 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index a6d59442a2ae6..1606fb0e50684 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index f0f4bd78b2701..6fba76a809cd2 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index cd6551dc99755..82f35c41759dc 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 65c3fbfd7e4e8..5fdb1e6590ba6 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 95dd4c03fb08f..f35a33e3b53ca 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 2d5c5a32746f6..59fd65a0247f4 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 1230f393d9699..cfa2f738df491 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index e342240f26e97..d82f788dae55d 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 6689efbd71033..4712186a07c5a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 06e914b7a0a47..8ffb3c3bc5fe1 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index b9e015ca242b8..3e438262ecca9 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index a76b3ac5f7196..18a1976224995 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 5a9885f4fcd88..227c058ff12ee 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index a921994216927..b4d728183292c 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index fe42ac3d4d642..779dc409d9d70 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 330f1e2cb0fa7..f475efa099218 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index e131ea5e8c412..041a9e55d93cf 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.devdocs.json b/api_docs/kbn_cell_actions.devdocs.json index 4d6a0fd76d2d5..e24dccb321638 100644 --- a/api_docs/kbn_cell_actions.devdocs.json +++ b/api_docs/kbn_cell_actions.devdocs.json @@ -19,6 +19,176 @@ "common": { "classes": [], "functions": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterIn", + "type": "Function", + "tags": [], + "label": "addFilterIn", + "description": [], + "signature": [ + "({ filterManager, fieldName, value, }: { filterManager: ", + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataQueryPluginApi", + "section": "def-public.FilterManager", + "text": "FilterManager" + }, + " | undefined; fieldName: string; value: string | string[] | null | undefined; }) => void" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_in.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterIn.$1", + "type": "Object", + "tags": [], + "label": "{\n filterManager,\n fieldName,\n value,\n}", + "description": [], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_in.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterIn.$1.filterManager", + "type": "Object", + "tags": [], + "label": "filterManager", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataQueryPluginApi", + "section": "def-public.FilterManager", + "text": "FilterManager" + }, + " | undefined" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_in.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterIn.$1.fieldName", + "type": "string", + "tags": [], + "label": "fieldName", + "description": [], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_in.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterIn.$1.value", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string | string[] | null | undefined" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_in.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterOut", + "type": "Function", + "tags": [], + "label": "addFilterOut", + "description": [], + "signature": [ + "({ filterManager, fieldName, value, }: { filterManager: ", + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataQueryPluginApi", + "section": "def-public.FilterManager", + "text": "FilterManager" + }, + " | undefined; fieldName: string; value: string | string[] | null | undefined; }) => void" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_out.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterOut.$1", + "type": "Object", + "tags": [], + "label": "{\n filterManager,\n fieldName,\n value,\n}", + "description": [], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_out.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterOut.$1.filterManager", + "type": "Object", + "tags": [], + "label": "filterManager", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataQueryPluginApi", + "section": "def-public.FilterManager", + "text": "FilterManager" + }, + " | undefined" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_out.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterOut.$1.fieldName", + "type": "string", + "tags": [], + "label": "fieldName", + "description": [], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_out.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.addFilterOut.$1.value", + "type": "CompoundType", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string | string[] | null | undefined" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_out.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cell-actions", "id": "def-common.CellActions", @@ -27,8 +197,14 @@ "label": "CellActions", "description": [], "signature": [ - "({ field, triggerId, children, mode, showActionTooltips, visibleCellActions, disabledActions, metadata, className, }: React.PropsWithChildren<", - "CellActionsProps", + "({ field, triggerId, children, mode, showActionTooltips, visibleCellActions, disabledActionTypes, metadata, className, }: React.PropsWithChildren<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionsProps", + "text": "CellActionsProps" + }, ">) => JSX.Element" ], "path": "packages/kbn-cell-actions/src/components/cell_actions.tsx", @@ -40,11 +216,17 @@ "id": "def-common.CellActions.$1", "type": "CompoundType", "tags": [], - "label": "{\n field,\n triggerId,\n children,\n mode,\n showActionTooltips = true,\n visibleCellActions = 3,\n disabledActions = [],\n metadata,\n className,\n}", + "label": "{\n field,\n triggerId,\n children,\n mode,\n showActionTooltips = true,\n visibleCellActions = 3,\n disabledActionTypes = [],\n metadata,\n className,\n}", "description": [], "signature": [ "React.PropsWithChildren<", - "CellActionsProps", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionsProps", + "text": "CellActionsProps" + }, ">" ], "path": "packages/kbn-cell-actions/src/components/cell_actions.tsx", @@ -93,6 +275,287 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createCellActionFactory", + "type": "Function", + "tags": [], + "label": "createCellActionFactory", + "description": [], + "signature": [ + " = ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellAction", + "text": "CellAction" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionExecutionContext", + "text": "CellActionExecutionContext" + }, + ">, P = void>(actionCreator: (params: P) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionTemplate", + "text": "CellActionTemplate" + }, + ") => (params: P) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionFactory", + "text": "CellActionFactory" + }, + "" + ], + "path": "packages/kbn-cell-actions/src/actions/factory.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createCellActionFactory.$1", + "type": "Function", + "tags": [], + "label": "actionCreator", + "description": [], + "signature": [ + "(params: P) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionTemplate", + "text": "CellActionTemplate" + }, + "" + ], + "path": "packages/kbn-cell-actions/src/actions/factory.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createCopyToClipboardActionFactory", + "type": "Function", + "tags": [], + "label": "createCopyToClipboardActionFactory", + "description": [], + "signature": [ + "(params: { notifications: ", + { + "pluginId": "@kbn/core-notifications-browser", + "scope": "common", + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-common.NotificationsStart", + "text": "NotificationsStart" + }, + "; }) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionFactory", + "text": "CellActionFactory" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellAction", + "text": "CellAction" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionExecutionContext", + "text": "CellActionExecutionContext" + }, + ">>" + ], + "path": "packages/kbn-cell-actions/src/actions/copy_to_clipboard/copy_to_clipboard.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createCopyToClipboardActionFactory.$1", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "P" + ], + "path": "packages/kbn-cell-actions/src/actions/factory.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createFilterInActionFactory", + "type": "Function", + "tags": [], + "label": "createFilterInActionFactory", + "description": [], + "signature": [ + "(params: { filterManager: ", + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataQueryPluginApi", + "section": "def-public.FilterManager", + "text": "FilterManager" + }, + "; }) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionFactory", + "text": "CellActionFactory" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellAction", + "text": "CellAction" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionExecutionContext", + "text": "CellActionExecutionContext" + }, + ">>" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_in.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createFilterInActionFactory.$1", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "P" + ], + "path": "packages/kbn-cell-actions/src/actions/factory.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createFilterOutActionFactory", + "type": "Function", + "tags": [], + "label": "createFilterOutActionFactory", + "description": [], + "signature": [ + "(params: { filterManager: ", + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataQueryPluginApi", + "section": "def-public.FilterManager", + "text": "FilterManager" + }, + "; }) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionFactory", + "text": "CellActionFactory" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellAction", + "text": "CellAction" + }, + "<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionExecutionContext", + "text": "CellActionExecutionContext" + }, + ">>" + ], + "path": "packages/kbn-cell-actions/src/actions/filter/filter_out.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.createFilterOutActionFactory.$1", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "P" + ], + "path": "packages/kbn-cell-actions/src/actions/factory.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cell-actions", "id": "def-common.useDataGridColumnsCellActions", @@ -101,7 +564,7 @@ "label": "useDataGridColumnsCellActions", "description": [], "signature": [ - "({ fields, triggerId, metadata, dataGridRef, disabledActions, }: ", + "({ fields, triggerId, metadata, dataGridRef, disabledActionTypes, }: ", { "pluginId": "@kbn/cell-actions", "scope": "common", @@ -122,7 +585,7 @@ "id": "def-common.useDataGridColumnsCellActions.$1", "type": "Object", "tags": [], - "label": "{\n fields,\n triggerId,\n metadata,\n dataGridRef,\n disabledActions = [],\n}", + "label": "{\n fields,\n triggerId,\n metadata,\n dataGridRef,\n disabledActionTypes = [],\n}", "description": [], "signature": [ { @@ -191,7 +654,7 @@ "section": "def-common.CellActionCompatibilityContext", "text": "CellActionCompatibilityContext" }, - ") => Promise" + ") => Promise" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -212,7 +675,7 @@ "section": "def-common.CellActionCompatibilityContext", "text": "CellActionCompatibilityContext" }, - "" + "" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -231,7 +694,9 @@ "type": "Interface", "tags": [], "label": "CellActionCompatibilityContext", - "description": [], + "description": [ + "\nSubset of `CellActionExecutionContext` used only for the compatibility check in the `isCompatible` function.\nIt omits the references and the `field.value`." + ], "signature": [ { "pluginId": "@kbn/cell-actions", @@ -240,7 +705,7 @@ "section": "def-common.CellActionCompatibilityContext", "text": "CellActionCompatibilityContext" }, - " extends ", + " extends ", { "pluginId": "uiActions", "scope": "public", @@ -264,7 +729,7 @@ "\nThe object containing the field name and type, needed for the compatibility check" ], "signature": [ - "{ type: string; name: string; aggregatable?: boolean | undefined; }" + "{ [P in Exclude]: C[\"field\"][P]; }" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -280,7 +745,7 @@ "\nExtra configurations for actions." ], "signature": [ - "M | undefined" + "C[\"metadata\"] | undefined" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -358,7 +823,244 @@ "\nExtra configurations for actions." ], "signature": [ - "Record | undefined" + "Metadata | undefined" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionFactory", + "type": "Interface", + "tags": [], + "label": "CellActionFactory", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionFactory", + "text": "CellActionFactory" + }, + "" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionFactory.Unnamed", + "type": "Any", + "tags": [], + "label": "Unnamed", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionFactory.combine", + "type": "Function", + "tags": [], + "label": "combine", + "description": [], + "signature": [ + "
(partialActionTemplate: Partial<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionTemplate", + "text": "CellActionTemplate" + }, + ">) => ", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionFactory", + "text": "CellActionFactory" + }, + "" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionFactory.combine.$1", + "type": "Object", + "tags": [], + "label": "partialActionTemplate", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionTemplate", + "text": "CellActionTemplate" + }, + ">" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps", + "type": "Interface", + "tags": [], + "label": "CellActionsProps", + "description": [], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.field", + "type": "Object", + "tags": [], + "label": "field", + "description": [ + "\nCommon set of properties used by most actions." + ], + "signature": [ + "CellActionField" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.triggerId", + "type": "string", + "tags": [], + "label": "triggerId", + "description": [ + "\nThe trigger in which the actions are registered." + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.mode", + "type": "Enum", + "tags": [], + "label": "mode", + "description": [ + "\nUI configuration. Possible options are `HOVER` and `INLINE`.\n\n`HOVER` shows the actions when the children component is hovered.\n\n`INLINE` always shows the actions." + ], + "signature": [ + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionsMode", + "text": "CellActionsMode" + } + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.showActionTooltips", + "type": "CompoundType", + "tags": [], + "label": "showActionTooltips", + "description": [ + "\nIt displays a tooltip for every action button when `true`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.visibleCellActions", + "type": "number", + "tags": [], + "label": "visibleCellActions", + "description": [ + "\nIt shows 'more actions' button when the number of actions is bigger than this parameter." + ], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.disabledActionTypes", + "type": "Array", + "tags": [], + "label": "disabledActionTypes", + "description": [ + "\nList of Actions ids that shouldn't be displayed inside cell actions." + ], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.metadata", + "type": "Object", + "tags": [], + "label": "metadata", + "description": [ + "\nCustom set of properties used by some actions.\nAn action might require a specific set of metadata properties to render.\nThis data is sent directly to actions." + ], + "signature": [ + "Metadata | undefined" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionsProps.className", + "type": "string", + "tags": [], + "label": "className", + "description": [], + "signature": [ + "string | undefined" ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, @@ -383,8 +1085,14 @@ "text": "UseDataGridColumnsCellActionsProps" }, " extends Pick<", - "CellActionsProps", - ", \"metadata\" | \"disabledActions\" | \"triggerId\">" + { + "pluginId": "@kbn/cell-actions", + "scope": "common", + "docId": "kibKbnCellActionsPluginApi", + "section": "def-common.CellActionsProps", + "text": "CellActionsProps" + }, + ", \"metadata\" | \"triggerId\" | \"disabledActionTypes\">" ], "path": "packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx", "deprecated": false, @@ -432,13 +1140,112 @@ "tags": [], "label": "CellActionsMode", "description": [], + "path": "packages/kbn-cell-actions/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionExtend", + "type": "Type", + "tags": [], + "label": "CellActionExtend", + "description": [ + "\nAction factory extend parameter type," + ], + "signature": [ + "Partial & { id: string; }" + ], + "path": "packages/kbn-cell-actions/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.CellActionTemplate", + "type": "Type", + "tags": [], + "label": "CellActionTemplate", + "description": [ + "\nCell action factory template with optional `id`.\nThe id override is required when using the action factory so it\ncan be omitted in the original action creator" + ], + "signature": [ + "{ [P in Exclude]: C[P]; }" + ], "path": "packages/kbn-cell-actions/src/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.COPY_CELL_ACTION_TYPE", + "type": "string", + "tags": [], + "label": "COPY_CELL_ACTION_TYPE", + "description": [], + "signature": [ + "\"cellAction-copy\"" + ], + "path": "packages/kbn-cell-actions/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.FILTER_CELL_ACTION_TYPE", + "type": "string", + "tags": [], + "label": "FILTER_CELL_ACTION_TYPE", + "description": [], + "signature": [ + "\"cellAction-filter\"" + ], + "path": "packages/kbn-cell-actions/src/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.UseDataGridColumnsCellActions", + "type": "Type", + "tags": [], + "label": "UseDataGridColumnsCellActions", + "description": [], + "signature": [ + "(props: P) => ", + "EuiDataGridColumnCellAction", + "[][]" + ], + "path": "packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/cell-actions", + "id": "def-common.UseDataGridColumnsCellActions.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], - "misc": [], "objects": [] } } \ No newline at end of file diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index e5cfc270cef23..da4ff62497a80 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-explore](https://github.com/orgs/elast | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 20 | 0 | 15 | 3 | +| 57 | 1 | 42 | 2 | ## Common @@ -34,3 +34,6 @@ Contact [@elastic/security-threat-hunting-explore](https://github.com/orgs/elast ### Enums +### Consts, variables and types + + diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 15dd0fdbe3332..17064fabba6b5 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 2e4c2c4f26f45..a60e53f32a4cd 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index a2aecf0935506..68de0b62c5a18 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index c003bd0eb8880..0e23290944f23 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index efd90cdb8c7d3..7eaab16696ac0 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 3b180645a0e46..e813b270b05ad 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 773245cbab5e6..8335aa8cff0db 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index aacc45201f2fc..a76d50d334c99 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index dccf85580b0c5..9cab1e3bdd9e1 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index fc9fedc6f8065..5075ef437b7f4 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 34516a90a66e9..07d4a5ad4cb32 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 7a65d1d6ad1af..831b6c4fcdb46 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 7c42d390232ce..e3861fec754c9 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 23554474e8b7f..affaac3e161a1 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 296d6229650af..a09d2e8bea242 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index e1a1ad549969d..f5219f7fc0df8 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index a38ddde4e6af9..12aadc3f5deed 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 289de330ab691..444b341061a62 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 1787d4e5ed4af..7a4e26b857c35 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 1031230ab6715..c4cecd592eacc 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 528b7b8acc977..f05396da060f6 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index cc52ac11e028c..660446ef7de3a 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index f0b1476308013..58c0e76feab1c 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index b66748ea6e4c9..8bd8e48fd4d40 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index af89d9f3679de..8f4ab9c447eb1 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 08ff5bc332a2f..9bbe05de78d9c 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 6d8c0fd7aa201..05d50e1f0ffc2 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index b1ce3bf43e0c7..1a8ca86255726 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 24133f929d7c5..8e40919cc1bf5 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index a8c9d85345368..1693575cbe2c5 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 6f4b48e0b8c53..f702115a5ac99 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 7c763c61c916a..3f06a33b7dcf7 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index e38960da7106a..58fd806777089 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index e1531edb69605..5f93533d4d475 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 34bc7108d59db..79e1e625d5b0b 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 4fea5f739e393..ea47ce0af3677 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; -Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 701072c9741a9..af1a5a0dafe59 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,14 +8,14 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; -Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) for questions regarding this plugin. +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. **Code health stats** diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 3dc95aea36589..6362f2d68afa5 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 65bcdd7d4ccf1..751b8ceb6997e 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 81b8f50698dbd..0970bfed9dfd1 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 410082c60c589..242cc78e194e4 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 7bd422b186eeb..cb104de0f3a91 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 154344d2b1bf3..4548203f35438 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 46dc145ac5277..34f15270bcc59 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index ecd9f7905b8ef..4f135027be15b 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 0002f9f8b14b4..5e435db4ed9f2 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index 349aa4d53ba7c..67dd2b40c8849 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index ff47688415cad..6d42570d313d9 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 1d0e7e2430a41..a36203ad8d7e8 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index ab7743fff6190..e04f2c8cbf322 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 5d62a10f68667..439a58d3a11c0 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 980a1e6c91d31..6a563922f9daa 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 972413d73acb6..75c5f7bb938b7 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index fa94ec1869312..44840c821f5e5 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 71d57a4aa7bf3..64969c735503d 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 4236cbd64bddb..2dd8383a610d5 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index dd83440f39366..38966007acf5b 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 36b28c52a0fe8..3bd1df9846b8b 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 9985de2ee5ae6..631f9c532d630 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index b7af656985320..b818d2619b912 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 24efc2b93dd65..5123ca8672c48 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 442daa4975a2c..d4e4417a37bf9 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 7a02289568214..cf67ec9c49b6e 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index bb015ef77b66d..6fa0f62e7c061 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 3c5ec2362b54c..2c0c51bbb9fa9 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index a1df8a7f491f1..72467bb10b468 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index afcc716e20bdd..a10a0976d2a25 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index a5a6985e33c26..634c603bb3736 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 1b8f1096b7bab..37f5bbcfce110 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index f380b1cfb0425..99060386eabee 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 8ce93ce406b39..d8d41b071e5cb 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index c8ba1e9d8a9b1..6ca44e245f46e 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 28e062f4fe0eb..d87730c83727f 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 9f83827ac8e68..705c70bb5e5ab 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 75c865aea8339..f9133dc61749e 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 0c3614a9b509d..c7259953ec24d 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index ec9d76416b325..78f90f7282dd9 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index d7ebd416b1324..27dbea1868281 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 482f705fe1bb9..9911307138221 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index fe023434d8a5c..78bdee40138a6 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 5ba62f38ad996..eb27ccf7cbc01 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index ccfb48ebcb122..173c69eddff16 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 9d64aa7f23222..fc9226ec23be3 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index ceb5a7c0be421..7ce0427e580c1 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index d646c4c118f4c..59a8a8a986d60 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 7f583df8df720..9a9f3a39d847f 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index ebaef136c3064..56435821ea369 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index b95d169bcd598..0e1d73497c91e 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index c348a9498db1b..4283549d44b6a 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 95b234ae04d7f..dbae1eb5468c4 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index d19061a224a7d..1fead6619e9bf 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 87cc07251f7cb..1b23e10c1806e 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 3b4ed968ba0fd..1070e020a552b 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 92c01c71ec7c6..d5d61b95e8a64 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index d07a7bb53d7dc..ec5a983e343d2 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 82e76937344ec..b462c1a7b8784 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 777e6b75d2e9a..de0633c626b8c 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 3336cae16e4ff..c1bc57c3c55ef 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 20237828ca57b..2a2be06bffdf3 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 7eb21bbec97ee..694bff205ef67 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 2ab58adf94550..fa6b6deac04e7 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index c9dcf00485903..28a3dfe8e7b6a 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index ea886fc2c5575..914ad4cbd9779 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 21c311d7a15fd..7ad9c4c857823 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index ef2f8309fbe7f..916241b138610 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 3dbd6a125765b..b397d7e6d42fc 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 067012b10fa9b..7559367cad6e6 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index 87dc5a1b40d0e..c3b34f91967fa 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index af0f4a1526128..8059612a8bd69 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index e60468d5138a1..4530ad8ae700e 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 95eedd2607f5b..c0c54e87c07f5 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 8c330bc925504..70edb49e35926 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 6a71ac221bcbd..bb1d3ec670f6b 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 31fe77a8b7c92..c759d1dbe2306 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 23d41aaf84d72..21f5e0487657f 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index fc42707827a80..49cdf84b8a81d 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index 085041fc20a2c..d2f6135b86b98 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 975186d955c74..3662d97f6916f 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 7f9792e55849a..735deb2923ddc 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index fa0ce935e4335..da0ef8f5cbf4d 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index dcafa57c953b4..7f05061343161 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 9659d217ffacf..1bb5d6f6bda0e 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 0e096508cc902..978edbf1e331e 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index f72d184c96920..0d641275140a5 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 92077b691f772..238337e875534 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 7a9fc848f01a4..207c50bbbb8c7 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 650613ae2aa74..9ed3166096ace 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 74483bc5daa19..6aabab831ddcb 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 168cad329b504..ecbeabe4e3065 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.devdocs.json b/api_docs/kbn_core_saved_objects_api_server.devdocs.json index eba841b82db65..3017f0b867d78 100644 --- a/api_docs/kbn_core_saved_objects_api_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_server.devdocs.json @@ -2071,6 +2071,601 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject", + "type": "Interface", + "tags": [], + "label": "SavedObject", + "description": [ + "\nDefinition of the Saved Object interface\n" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObject", + "text": "SavedObject" + }, + "" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.id", + "type": "string", + "tags": [], + "label": "id", + "description": [ + "The ID of this Saved Object, guaranteed to be unique for all objects of the same `type`" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.type", + "type": "string", + "tags": [], + "label": "type", + "description": [ + " The type of Saved Object. Each plugin can define it's own custom Saved Object types." + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.version", + "type": "string", + "tags": [], + "label": "version", + "description": [ + "An opaque version number which changes on each successful write operation. Can be used for implementing optimistic concurrency control." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.created_at", + "type": "string", + "tags": [], + "label": "created_at", + "description": [ + "Timestamp of the time this document had been created." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.updated_at", + "type": "string", + "tags": [], + "label": "updated_at", + "description": [ + "Timestamp of the last time this document had been updated." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.error", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "Error associated with this object, populated if an operation failed for this object." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectError", + "text": "SavedObjectError" + }, + " | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.attributes", + "type": "Uncategorized", + "tags": [], + "label": "attributes", + "description": [ + "The data for a Saved Object is stored as an object in the `attributes` property." + ], + "signature": [ + "T" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.references", + "type": "Array", + "tags": [], + "label": "references", + "description": [ + "{@inheritdoc SavedObjectReference}" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectReference", + "text": "SavedObjectReference" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.migrationVersion", + "type": "Object", + "tags": [], + "label": "migrationVersion", + "description": [ + "{@inheritdoc SavedObjectsMigrationVersion}" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectsMigrationVersion", + "text": "SavedObjectsMigrationVersion" + }, + " | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.coreMigrationVersion", + "type": "string", + "tags": [], + "label": "coreMigrationVersion", + "description": [ + "A semver value that is used when upgrading objects between Kibana versions." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.namespaces", + "type": "Array", + "tags": [], + "label": "namespaces", + "description": [ + "\nSpace(s) that this saved object exists in. This attribute is not used for \"global\" saved object types which are registered with\n`namespaceType: 'agnostic'`." + ], + "signature": [ + "string[] | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObject.originId", + "type": "string", + "tags": [], + "label": "originId", + "description": [ + "\nThe ID of the saved object this originated from. This is set if this object's `id` was regenerated; that can happen during migration\nfrom a legacy single-namespace type, or during import. It is only set during migration or create operations. This is used during import\nto ensure that ID regeneration is deterministic, so saved objects will be overwritten if they are imported multiple times into a given\nspace." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectAttributes", + "type": "Interface", + "tags": [ + "deprecated" + ], + "label": "SavedObjectAttributes", + "description": [ + "\nThe data for a Saved Object is stored as an object in the `attributes`\nproperty.\n" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "@kbn/core-saved-objects-common", + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts" + }, + { + "plugin": "@kbn/core-saved-objects-common", + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts" + }, + { + "plugin": "@kbn/core-saved-objects-common", + "path": "packages/core/saved-objects/core-saved-objects-common/src/saved_objects.ts" + }, + { + "plugin": "@kbn/core-saved-objects-server", + "path": "packages/core/saved-objects/core-saved-objects-server/index.ts" + }, + { + "plugin": "@kbn/core", + "path": "src/core/server/index.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/actions_client.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/types.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/types.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/types.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/types.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/types.ts" + }, + { + "plugin": "actions", + "path": "x-pack/plugins/actions/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/common/rule.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/geo_containment/migrations.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/rules_client/common/inject_references.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/rules_client/common/inject_references.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/types.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/routes/custom_elements/find.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/routes/custom_elements/find.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/routes/workpad/find.ts" + }, + { + "plugin": "canvas", + "path": "x-pack/plugins/canvas/server/routes/workpad/find.ts" + }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts" + }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts" + }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/server/collectors/lib/telemetry.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_types.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/task_store.test.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/task_store.test.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/dashboard_saved_object/migrations/migrate_extract_panel_references.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/dashboard_saved_object/migrations/migrate_extract_panel_references.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/dashboard_telemetry_collection_task.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/dashboard_telemetry_collection_task.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/dashboard_telemetry_collection_task.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/dashboard_telemetry.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/dashboard_telemetry.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/find_by_value_embeddables.ts" + }, + { + "plugin": "dashboard", + "path": "src/plugins/dashboard/server/usage/find_by_value_embeddables.ts" + }, + { + "plugin": "savedSearch", + "path": "src/plugins/saved_search/server/saved_objects/search_migrations.ts" + }, + { + "plugin": "savedSearch", + "path": "src/plugins/saved_search/server/saved_objects/search_migrations.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/saved_objects/migrations/7.15/index.ts" + }, + { + "plugin": "@kbn/core-saved-objects-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-server-internal/src/routes/legacy_import_export/lib/collect_references_deep.test.ts" + } + ], + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectAttributes.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[key: string]: SavedObjectAttribute", + "description": [], + "signature": [ + "[key: string]: ", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectAttribute", + "text": "SavedObjectAttribute" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectReference", + "type": "Interface", + "tags": [], + "label": "SavedObjectReference", + "description": [ + "\nA reference to another saved object.\n" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectReference.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectReference.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectReference.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-api-server", "id": "def-common.SavedObjectReferenceWithContext", @@ -6947,6 +7542,63 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectAttribute", + "type": "Type", + "tags": [], + "label": "SavedObjectAttribute", + "description": [ + "\nType definition for a Saved Object attribute value\n" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectAttributeSingle", + "text": "SavedObjectAttributeSingle" + }, + " | ", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectAttributeSingle", + "text": "SavedObjectAttributeSingle" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectAttributeSingle", + "type": "Type", + "tags": [], + "label": "SavedObjectAttributeSingle", + "description": [ + "\nDon't use this type, it's simply a helper type for {@link SavedObjectAttribute}\n" + ], + "signature": [ + "string | number | boolean | ", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectAttributes", + "text": "SavedObjectAttributes" + }, + " | null | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/server_types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-api-server", "id": "def-common.SavedObjectsClosePointInTimeOptions", diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 617fca8de7507..dbc1314565879 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_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 | |-------------------|-----------|------------------------|-----------------| -| 313 | 1 | 0 | 1 | +| 334 | 1 | 4 | 1 | ## Common diff --git a/api_docs/kbn_core_saved_objects_api_server_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index a68c642df780c..8772394c5e46f 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 b5acd722110cc..9c4fa5819cce4 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json index 81e9492f9c625..8fce5f63df9dd 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 @@ -141,6 +141,41 @@ } ], "functions": [ + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.assertValidModelVersion", + "type": "Function", + "tags": [], + "label": "assertValidModelVersion", + "description": [ + "\nAsserts the provided number or string is a valid model version, and returns it.\n\nA valid model version is a positive integer.\n" + ], + "signature": [ + "(modelVersion: string | number) => number" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.assertValidModelVersion.$1", + "type": "CompoundType", + "tags": [], + "label": "modelVersion", + "description": [], + "signature": [ + "string | number" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", "id": "def-common.decodeRequestVersion", @@ -551,11 +586,133 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.isVirtualModelVersion", + "type": "Function", + "tags": [], + "label": "isVirtualModelVersion", + "description": [ + "\nReturn true if the given semver version is a virtual model version.\nVirtual model versions are version which major is the {@link modelVersionVirtualMajor}\n" + ], + "signature": [ + "(version: string) => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.isVirtualModelVersion.$1", + "type": "string", + "tags": [], + "label": "version", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.modelVersionToVirtualVersion", + "type": "Function", + "tags": [], + "label": "modelVersionToVirtualVersion", + "description": [ + "\nReturns the virtual version associated with the given model version\n" + ], + "signature": [ + "(modelVersion: string | number) => string" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.modelVersionToVirtualVersion.$1", + "type": "CompoundType", + "tags": [], + "label": "modelVersion", + "description": [], + "signature": [ + "string | number" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.virtualVersionToModelVersion", + "type": "Function", + "tags": [], + "label": "virtualVersionToModelVersion", + "description": [ + "\nConverts a virtual model version to its model version.\n" + ], + "signature": [ + "(virtualVersion: string) => number" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.virtualVersionToModelVersion.$1", + "type": "string", + "tags": [], + "label": "virtualVersion", + "description": [], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/conversion.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/core-saved-objects-base-server-internal", + "id": "def-common.modelVersionVirtualMajor", + "type": "number", + "tags": [], + "label": "modelVersionVirtualMajor", + "description": [ + "\nThe major version that is used to represent model versions." + ], + "signature": [ + "10" + ], + "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/model_version/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", "id": "def-common.SavedObjectsConfigType", 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 2b0eaa47d18b5..23c6c35c2039c 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; @@ -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 | |-------------------|-----------|------------------------|-----------------| -| 37 | 0 | 31 | 6 | +| 46 | 0 | 35 | 6 | ## 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 b5725d6b908f6..651e7e4097aa4 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index cde4e4e9f3815..c154f02694307 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 6c8aab5b173a6..5ae5a82ee4237 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 336bf48fdf9a6..fdcf9166372ff 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.devdocs.json b/api_docs/kbn_core_saved_objects_common.devdocs.json index ff0bd2270c69f..200162830bb97 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -20,6 +20,61 @@ "classes": [], "functions": [], "interfaces": [ + { + "parentPluginId": "@kbn/core-saved-objects-common", + "id": "def-common.LegacyUrlAliasTarget", + "type": "Interface", + "tags": [], + "label": "LegacyUrlAliasTarget", + "description": [ + "\nClient interface for interacting with legacy URL aliases." + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-common", + "id": "def-common.LegacyUrlAliasTarget.targetSpace", + "type": "string", + "tags": [], + "label": "targetSpace", + "description": [ + "\nThe namespace that the object existed in when it was converted." + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-common", + "id": "def-common.LegacyUrlAliasTarget.targetType", + "type": "string", + "tags": [], + "label": "targetType", + "description": [ + "\nThe type of the object when it was converted." + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-common", + "id": "def-common.LegacyUrlAliasTarget.sourceId", + "type": "string", + "tags": [], + "label": "sourceId", + "description": [ + "\nThe original ID of the object, before it was converted." + ], + "path": "packages/core/saved-objects/core-saved-objects-common/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-common", "id": "def-common.SavedObjectError", @@ -1004,38 +1059,6 @@ "plugin": "@kbn/core-saved-objects-api-browser", "path": "packages/core/saved-objects/core-saved-objects-api-browser/src/simple_saved_object.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/base.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/resolve.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/find.ts" - }, { "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" @@ -1052,18 +1075,6 @@ "plugin": "@kbn/core-saved-objects-api-server", "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_repository.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/saved_objects_client.ts" - }, { "plugin": "@kbn/core-saved-objects-browser-internal", "path": "packages/core/saved-objects/core-saved-objects-browser-internal/src/simple_saved_object.ts" @@ -1444,18 +1455,6 @@ "plugin": "@kbn/core-saved-objects-browser-mocks", "path": "packages/core/saved-objects/core-saved-objects-browser-mocks/src/simple_saved_object.mock.ts" }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, - { - "plugin": "@kbn/core-saved-objects-server", - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts" - }, { "plugin": "@kbn/core-saved-objects-import-export-server-internal", "path": "packages/core/saved-objects/core-saved-objects-import-export-server-internal/src/import/errors.ts" @@ -2353,34 +2352,6 @@ "plugin": "@kbn/core-saved-objects-api-browser", "path": "packages/core/saved-objects/core-saved-objects-api-browser/src/apis/create.ts" }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_create.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts" - }, - { - "plugin": "@kbn/core-saved-objects-api-server", - "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/create.ts" - }, { "plugin": "@kbn/core-saved-objects-api-browser", "path": "packages/core/saved-objects/core-saved-objects-api-browser/src/apis/bulk_update.ts" diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index e67c8a9b0590c..b7b195fba3528 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.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 | |-------------------|-----------|------------------------|-----------------| -| 67 | 0 | 39 | 0 | +| 71 | 0 | 39 | 0 | ## Common 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 0c9167b4a73a2..a38e20bace754 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 46279a0edf84c..549bf381786d7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json index e9d8d1afb191e..68bab1e33dbd5 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.devdocs.json @@ -69,7 +69,7 @@ "id": "def-common.DocumentMigrator.Unnamed.$1", "type": "Object", "tags": [], - "label": "{ typeRegistry, kibanaVersion, convertVersion, log }", + "label": "documentMigratorOptions", "description": [], "signature": [ "DocumentMigratorOptions" 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 f14e4ece55ede..8c20317335a2c 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 32b2940ccb0e9..6a8c24a0190d1 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index 1f8c44729ed82..b90aa577dd1ab 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -17,283 +17,3412 @@ "objects": [] }, "common": { - "classes": [], - "functions": [], - "interfaces": [ + "classes": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams", - "type": "Interface", + "id": "def-common.SavedObjectsErrorHelpers", + "type": "Class", "tags": [], - "label": "AddAuditEventParams", + "label": "SavedObjectsErrorHelpers", "description": [ - "\nThe AddAuditEventParams interface contains settings for adding\naudit events via the ISavedObjectsSecurityExtension." + "\nThe SavedObjectsErrorHelpers class is a simple class for creating, decorating, and\nqualifying saved object errors." ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams.action", - "type": "Enum", + "id": "def-common.SavedObjectsErrorHelpers.isSavedObjectsClientError", + "type": "Function", "tags": [], - "label": "action", + "label": "isSavedObjectsClientError", "description": [ - "\nThe relevant action" + "\nDetermines if an error is a saved objects client error" ], "signature": [ + "(error: any) => error is ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.AuditAction", - "text": "AuditAction" + "section": "def-common.DecoratedError", + "text": "DecoratedError" } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isSavedObjectsClientError.$1", + "type": "Any", + "tags": [], + "label": "error", + "description": [ + "the error to check" + ], + "signature": [ + "any" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a saved objects client error" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams.outcome", - "type": "string", + "id": "def-common.SavedObjectsErrorHelpers.decorateBadRequestError", + "type": "Function", "tags": [], - "label": "outcome", + "label": "decorateBadRequestError", "description": [ - "\nThe outcome of the operation\n'failure' | 'success' | 'unknown'" + "\nDecorates a bad request error (400) by adding a reason" ], "signature": [ - "string | undefined" + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateBadRequestError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateBadRequestError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the bad request (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams.savedObject", - "type": "Object", + "id": "def-common.SavedObjectsErrorHelpers.createBadRequestError", + "type": "Function", "tags": [], - "label": "savedObject", + "label": "createBadRequestError", "description": [ - "\nrelevant saved object information\nobject containing type & id strings" + "\nCreates a decorated bad request error (400). Bad requests come in a few flavors:\nunsupported type, invalid version, elastic search cannot execute script, or plain\nvanilla bad request." ], "signature": [ - "{ type: string; id: string; } | undefined" + "(reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createBadRequestError.$1", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the bad request (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams.addToSpaces", - "type": "Object", + "id": "def-common.SavedObjectsErrorHelpers.createUnsupportedTypeError", + "type": "Function", "tags": [], - "label": "addToSpaces", + "label": "createUnsupportedTypeError", "description": [ - "\nArray of spaces being added. For\nUPDATE_OBJECTS_SPACES action only" + "\nCreates a decorated unsupported type error (flavor of bad request 400)" ], "signature": [ - "readonly string[] | undefined" + "(type: string) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createUnsupportedTypeError.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [ + "the unsupported saved object type" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "the decorated error" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams.deleteFromSpaces", - "type": "Object", + "id": "def-common.SavedObjectsErrorHelpers.isBadRequestError", + "type": "Function", "tags": [], - "label": "deleteFromSpaces", + "label": "isBadRequestError", "description": [ - "\nArray of spaces being removed. For\nUPDATE_OBJECTS_SPACES action only" + "\nDetermines if an error is a bad request error (400)" ], "signature": [ - "readonly string[] | undefined" + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isBadRequestError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a bad request error" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AddAuditEventParams.error", - "type": "Object", + "id": "def-common.SavedObjectsErrorHelpers.createInvalidVersionError", + "type": "Function", "tags": [], - "label": "error", + "label": "createInvalidVersionError", "description": [ - "\nrelevant error information to add to\nthe audit event" + "\nCreates a decorated invalid version error (flavor of bad request 400)" ], "signature": [ - "Error | undefined" + "(versionInput?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AuthorizationTypeEntry", - "type": "Interface", - "tags": [], - "label": "AuthorizationTypeEntry", - "description": [ - "\nThe AuthorizationTypeEntry interface contains space-related details\nfor CheckAuthorizationResults." - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createInvalidVersionError.$1", + "type": "string", + "tags": [], + "label": "versionInput", + "description": [ + "the version string (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AuthorizationTypeEntry.authorizedSpaces", - "type": "Array", + "id": "def-common.SavedObjectsErrorHelpers.isInvalidVersionError", + "type": "Function", "tags": [], - "label": "authorizedSpaces", + "label": "isInvalidVersionError", "description": [ - "\nAn array of authorized spaces for the associated type/action\nin the associated record/map." + "\nDetermines if an error is an invalid version error (flavor of bad request 400)" ], "signature": [ - "string[]" + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isInvalidVersionError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is an invalid version error" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AuthorizationTypeEntry.isGloballyAuthorized", - "type": "CompoundType", + "id": "def-common.SavedObjectsErrorHelpers.decorateNotAuthorizedError", + "type": "Function", "tags": [], - "label": "isGloballyAuthorized", + "label": "decorateNotAuthorizedError", "description": [ - "\nIs the associated type/action globally authorized?" + "\nDecorates an error as an not authorized error (401)" ], "signature": [ - "boolean | undefined" + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationParams", + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateNotAuthorizedError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateNotAuthorizedError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the not authorized error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isNotAuthorizedError", + "type": "Function", + "tags": [], + "label": "isNotAuthorizedError", + "description": [ + "\nDetermines if an error is a not authorized error (401)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isNotAuthorizedError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a not authorized error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateForbiddenError", + "type": "Function", + "tags": [], + "label": "decorateForbiddenError", + "description": [ + "\nDecorates an error as a forbidden error (403)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateForbiddenError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateForbiddenError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the forbidden error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isForbiddenError", + "type": "Function", + "tags": [], + "label": "isForbiddenError", + "description": [ + "\nDetermines if an error is a forbidden error (403)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isForbiddenError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a forbidden error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError", + "type": "Function", + "tags": [], + "label": "decorateRequestEntityTooLargeError", + "description": [ + "\nDecorates a request entity too large error (413)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the request entity too large error" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isRequestEntityTooLargeError", + "type": "Function", + "tags": [], + "label": "isRequestEntityTooLargeError", + "description": [ + "\nDetermines if an error is a request entity too large error(413)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isRequestEntityTooLargeError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a request entity too large error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundError", + "type": "Function", + "tags": [], + "label": "createGenericNotFoundError", + "description": [ + "\nCreates a generic not found error (404)" + ], + "signature": [ + "(type?: string | null, id?: string | null) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundError.$1", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [ + "the saved object type or null (default is null)" + ], + "signature": [ + "string | null" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundError.$2", + "type": "CompoundType", + "tags": [], + "label": "id", + "description": [ + "the saved object id or null (default is null)" + ], + "signature": [ + "string | null" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createIndexAliasNotFoundError", + "type": "Function", + "tags": [], + "label": "createIndexAliasNotFoundError", + "description": [ + "\nCreates an alias not found error (flavor of general error 500)" + ], + "signature": [ + "(alias: string) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createIndexAliasNotFoundError.$1", + "type": "string", + "tags": [], + "label": "alias", + "description": [ + "the unfound saved object alias" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError", + "type": "Function", + "tags": [], + "label": "decorateIndexAliasNotFoundError", + "description": [ + "\nDecorates an index alias not found error (flavor of general error 500)" + ], + "signature": [ + "(error: Error, alias: string) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError.$2", + "type": "string", + "tags": [], + "label": "alias", + "description": [ + "the unfound index alias" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isNotFoundError", + "type": "Function", + "tags": [], + "label": "isNotFoundError", + "description": [ + "\nDetermines if an error is a not found error (404)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isNotFoundError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a not found error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateConflictError", + "type": "Function", + "tags": [], + "label": "decorateConflictError", + "description": [ + "\nDecorates a conflict error (409)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateConflictError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateConflictError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the conflict error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createConflictError", + "type": "Function", + "tags": [], + "label": "createConflictError", + "description": [ + "\nCreates a conflict error (409)" + ], + "signature": [ + "(type: string, id: string, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createConflictError.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [ + "the saved object type" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createConflictError.$2", + "type": "string", + "tags": [], + "label": "id", + "description": [ + "the saved object id" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createConflictError.$3", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the conflict error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isConflictError", + "type": "Function", + "tags": [], + "label": "isConflictError", + "description": [ + "\nDetermines if an error is a conflict error (409)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isConflictError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a conflict error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateTooManyRequestsError", + "type": "Function", + "tags": [], + "label": "decorateTooManyRequestsError", + "description": [ + "\nDecorates a too many requests error (429)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateTooManyRequestsError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateTooManyRequestsError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the too many requests error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createTooManyRequestsError", + "type": "Function", + "tags": [], + "label": "createTooManyRequestsError", + "description": [ + "\nCreates a too many requests error (429)" + ], + "signature": [ + "(type: string, id: string) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createTooManyRequestsError.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [ + "the saved object type" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createTooManyRequestsError.$2", + "type": "string", + "tags": [], + "label": "id", + "description": [ + "the saved object id" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isTooManyRequestsError", + "type": "Function", + "tags": [], + "label": "isTooManyRequestsError", + "description": [ + "\nDetermines if an error is a too many requests error (429)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isTooManyRequestsError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a too many requests error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError", + "type": "Function", + "tags": [], + "label": "decorateEsCannotExecuteScriptError", + "description": [ + "\nDecorates an elastic search cannot execute script error (flavor of 400)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the cannot execute error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isEsCannotExecuteScriptError", + "type": "Function", + "tags": [], + "label": "isEsCannotExecuteScriptError", + "description": [ + "\nDetermines if an error is an elastic search cannot execute script error (flavor of 400)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isEsCannotExecuteScriptError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a cannot execute error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateEsUnavailableError", + "type": "Function", + "tags": [], + "label": "decorateEsUnavailableError", + "description": [ + "\nDecorates an elastic search unavailable error (503)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateEsUnavailableError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateEsUnavailableError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the elastic search unavailable error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isEsUnavailableError", + "type": "Function", + "tags": [], + "label": "isEsUnavailableError", + "description": [ + "\nDetermines if an error is an elastic search unavailable error (flavor of 400)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isEsUnavailableError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is an elastic search unavailable error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateGeneralError", + "type": "Function", + "tags": [], + "label": "decorateGeneralError", + "description": [ + "\nDecorates a general error (500)" + ], + "signature": [ + "(error: Error, reason?: string | undefined) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateGeneralError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "the error to decorate" + ], + "signature": [ + "Error" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.decorateGeneralError.$2", + "type": "string", + "tags": [], + "label": "reason", + "description": [ + "the reason for the error (optional)" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isGeneralError", + "type": "Function", + "tags": [], + "label": "isGeneralError", + "description": [ + "\nDetermines if an error is a general error (500)" + ], + "signature": [ + "(error: Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + ") => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.isGeneralError.$1", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "the error or decorated error" + ], + "signature": [ + "Error | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean - true if error is a general error" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError", + "type": "Function", + "tags": [], + "label": "createGenericNotFoundEsUnavailableError", + "description": [ + "\nCreates a generic elastic search not present error" + ], + "signature": [ + "(type?: string | null, id?: string | null) => ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError.$1", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [ + "the saved object type or null, default null" + ], + "signature": [ + "string | null" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError.$2", + "type": "CompoundType", + "tags": [], + "label": "id", + "description": [ + "the saved object id or null, default null" + ], + "signature": [ + "string | null" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "the decorated error" + ] + } + ], + "initialIsOpen": false + } + ], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizationTypeEntry", + "type": "Interface", + "tags": [], + "label": "AuthorizationTypeEntry", + "description": [ + "\nThe AuthorizationTypeEntry interface contains space-related details\nfor CheckAuthorizationResults." + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizationTypeEntry.authorizedSpaces", + "type": "Array", + "tags": [], + "label": "authorizedSpaces", + "description": [ + "\nAn array of authorized spaces for the associated type/action\nin the associated record/map." + ], + "signature": [ + "string[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizationTypeEntry.isGloballyAuthorized", + "type": "CompoundType", + "tags": [], + "label": "isGloballyAuthorized", + "description": [ + "\nIs the associated type/action globally authorized?" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeAndRedactInternalBulkResolveParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeAndRedactInternalBulkResolveParams", + "description": [ + "\nThe AuthorizeAndRedactInternalBulkResolveParams interface extends\nAuthorizeParams and is used for the AuthorizeAndRedactInternalBulkResolve\nmethod of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeAndRedactInternalBulkResolveParams", + "text": "AuthorizeAndRedactInternalBulkResolveParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeAndRedactInternalBulkResolveParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "\nThe objects to authorize" + ], + "signature": [ + "(", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.BulkResolveError", + "text": "BulkResolveError" + }, + " | ", + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsResolveResponse", + "text": "SavedObjectsResolveResponse" + }, + ")[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeAndRedactMultiNamespaceReferencesParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeAndRedactMultiNamespaceReferencesParams", + "description": [ + "\nThe AuthorizeAndRedactMultiNamespaceReferencesParams interface extends\nAuthorizeParams and is used for the AuthorizeAndRedactMultiNamespaceReferences\nmethod of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeAndRedactMultiNamespaceReferencesParams", + "text": "AuthorizeAndRedactMultiNamespaceReferencesParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeAndRedactMultiNamespaceReferencesParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectReferenceWithContext", + "text": "SavedObjectReferenceWithContext" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeAndRedactMultiNamespaceReferencesParams.options", + "type": "Object", + "tags": [], + "label": "options", + "description": [ + "\noptions for the operation\n- purpose: 'collectMultiNamespaceReferences' or 'updateObjectsSpaces'\ndefault purpose is 'collectMultiNamespaceReferences'." + ], + "signature": [ + "MultiNamespaceReferencesOptions", + " | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkCreateParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeBulkCreateParams", + "description": [ + "\nThe AuthorizeBulkCreateParams interface extends AuthorizeParams and is\nused for the AuthorizeBulkCreate method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkCreateParams", + "text": "AuthorizeBulkCreateParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkCreateParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCreateObject", + "text": "AuthorizeCreateObject" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkDeleteParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeBulkDeleteParams", + "description": [ + "\nThe AuthorizeBulkDeleteParams interface extends AuthorizeParams and is\nused for the AuthorizeBulkDelete method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkDeleteParams", + "text": "AuthorizeBulkDeleteParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkDeleteParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkGetObject", + "type": "Interface", + "tags": [], + "label": "AuthorizeBulkGetObject", + "description": [ + "\nThe AuthorizeBulkGetObject interface extends AuthorizeObjectWithExistingSpaces\nand contains a object namespaces override. Used by the\nauthorizeBulkGet method." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkGetObject", + "text": "AuthorizeBulkGetObject" + }, + " extends ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkGetObject.objectNamespaces", + "type": "Array", + "tags": [], + "label": "objectNamespaces", + "description": [ + "\nThe namespaces to include when retrieving this object. Populated by options\npassed to the repository's update or bulkUpdate method." + ], + "signature": [ + "string[] | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkGetObject.error", + "type": "CompoundType", + "tags": [], + "label": "error", + "description": [ + "\nWhether or not an error occurred when getting this object. Populated by\nthe result of a query. Default is false." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkGetParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeBulkGetParams", + "description": [ + "\nThe AuthorizeBulkGetParams interface extends AuthorizeParams and is\nused for the AuthorizeBulkGet method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkGetParams", + "text": "AuthorizeBulkGetParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkGetParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkGetObject", + "text": "AuthorizeBulkGetObject" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkUpdateParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeBulkUpdateParams", + "description": [ + "\nThe AuthorizeBulkUpdateParams interface extends AuthorizeParams and is\nused for the AuthorizeBulkUpdate method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkUpdateParams", + "text": "AuthorizeBulkUpdateParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeBulkUpdateParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateObject", + "text": "AuthorizeUpdateObject" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeCheckConflictsParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeCheckConflictsParams", + "description": [ + "\nThe AuthorizeCheckConflictsParams interface extends AuthorizeParams and is\nused for the AuthorizeCheckConflicts method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCheckConflictsParams", + "text": "AuthorizeCheckConflictsParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeCheckConflictsParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + "AuthorizeObject", + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeCreateObject", + "type": "Interface", + "tags": [], + "label": "AuthorizeCreateObject", + "description": [ + "\nThe AuthorizeCreateObject interface extends AuthorizeObjectWithExistingSpaces\nand contains an array of initial namespaces for the object. Used by\nthe authorizeCreate and authorizeBulkCreate methods." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCreateObject", + "text": "AuthorizeCreateObject" + }, + " extends ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeCreateObject.initialNamespaces", + "type": "Array", + "tags": [], + "label": "initialNamespaces", + "description": [ + "\nInitial spaces to include the created object. Populated by options\npassed to the repository's bulkCreate method." + ], + "signature": [ + "string[] | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeCreateParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeCreateParams", + "description": [ + "\nThe AuthorizeCreateParams interface extends AuthorizeParams and is\nused for the AuthorizeCreate method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCreateParams", + "text": "AuthorizeCreateParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeCreateParams.object", + "type": "Object", + "tags": [], + "label": "object", + "description": [ + "The object to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCreateObject", + "text": "AuthorizeCreateObject" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeDeleteParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeDeleteParams", + "description": [ + "\nThe AuthorizeDeleteParams interface extends AuthorizeParams and is\nused for the AuthorizeDelete method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeDeleteParams", + "text": "AuthorizeDeleteParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeDeleteParams.object", + "type": "Object", + "tags": [], + "label": "object", + "description": [ + "The object to authorize" + ], + "signature": [ + "AuthorizeObject" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeFindParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeFindParams", + "description": [ + "\nThe AuthorizeFindParams interface is used for the AuthorizeFind method\nof the ISavedObjectsSecurityExtension." + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeFindParams.namespaces", + "type": "Object", + "tags": [], + "label": "namespaces", + "description": [ + "The namespaces in which to find objects" + ], + "signature": [ + "Set" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeFindParams.types", + "type": "Object", + "tags": [], + "label": "types", + "description": [ + "The types of objects to find" + ], + "signature": [ + "Set" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeGetParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeGetParams", + "description": [ + "\nThe AuthorizeGetParams interface extends AuthorizeParams and is\nused for the AuthorizeGet method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeGetParams", + "text": "AuthorizeGetParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeGetParams.object", + "type": "Object", + "tags": [], + "label": "object", + "description": [ + "The object to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeGetParams.objectNotFound", + "type": "CompoundType", + "tags": [], + "label": "objectNotFound", + "description": [ + "Whether or not the object was not found, defaults to false" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeObjectWithExistingSpaces", + "type": "Interface", + "tags": [], + "label": "AuthorizeObjectWithExistingSpaces", + "description": [ + "\nThe AuthorizeObjectWithExistingSpaces extends AuthorizeObject and contains\nan array of existing namespaces for the object. Used by the\nauthorizeDelete, authorizeBulkDelete, authorizeGet,\nauthorizeCheckConflicts, and getFindRedactTypeMap methods." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + }, + " extends ", + "AuthorizeObject" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeObjectWithExistingSpaces.existingNamespaces", + "type": "Array", + "tags": [], + "label": "existingNamespaces", + "description": [ + "\nSpaces where the object is known to exist. Usually populated\nby document data from the result of an es query." + ], + "signature": [ + "string[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateObject", + "type": "Interface", + "tags": [], + "label": "AuthorizeUpdateObject", + "description": [ + "\nThe AuthorizeUpdateObject interface extends AuthorizeObjectWithExistingSpaces\nand contains a object namespace override. Used by the authorizeUpdate\nand authorizeBulkUpdate methods." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateObject", + "text": "AuthorizeUpdateObject" + }, + " extends ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateObject.objectNamespace", + "type": "string", + "tags": [], + "label": "objectNamespace", + "description": [ + "\nThe namespace in which to update this object. Populated by options\npassed to the repository's update or bulkUpdate method." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeUpdateParams", + "description": [ + "\nThe AuthorizeUpdateParams interface extends AuthorizeParams and is\nused for the AuthorizeUpdate method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateParams", + "text": "AuthorizeUpdateParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateParams.object", + "type": "Object", + "tags": [], + "label": "object", + "description": [ + "The object to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateObject", + "text": "AuthorizeUpdateObject" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateSpacesParams", + "type": "Interface", + "tags": [], + "label": "AuthorizeUpdateSpacesParams", + "description": [ + "\nThe AuthorizeUpdateSpacesParams interface extends AuthorizeParams and is\nused for the AuthorizeUpdateSpaces method of the ISavedObjectsSecurityExtension." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateSpacesParams", + "text": "AuthorizeUpdateSpacesParams" + }, + " extends ", + "AuthorizeParams" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateSpacesParams.spacesToAdd", + "type": "Array", + "tags": [], + "label": "spacesToAdd", + "description": [ + "The spaces in which to add the objects" + ], + "signature": [ + "string[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateSpacesParams.spacesToRemove", + "type": "Array", + "tags": [], + "label": "spacesToRemove", + "description": [ + "The spaces from which to remove the objects" + ], + "signature": [ + "string[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeUpdateSpacesParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "The objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.BulkResolveError", + "type": "Interface", + "tags": [], + "label": "BulkResolveError", + "description": [ + "\nError result for the internal bulk resolve method." + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.BulkResolveError.type", + "type": "string", + "tags": [], + "label": "type", + "description": [ + "The type of the saved object" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.BulkResolveError.id", + "type": "string", + "tags": [], + "label": "id", + "description": [ + "The id of the saved object" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.BulkResolveError.error", + "type": "Object", + "tags": [], + "label": "error", + "description": [ + "The decorated resolve error" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.CheckAuthorizationResult", + "type": "Interface", + "tags": [], + "label": "CheckAuthorizationResult", + "description": [ + "\nThe CheckAuthorizationResult interface contains the overall status of an\nauthorization check and the specific authorized privileges as an\nAuthorizationTypeMap." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + "" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.CheckAuthorizationResult.status", + "type": "CompoundType", + "tags": [], + "label": "status", + "description": [ + "\nThe overall status of the authorization check as a string:\n'fully_authorized' | 'partially_authorized' | 'unauthorized'" + ], + "signature": [ + "\"unauthorized\" | \"fully_authorized\" | \"partially_authorized\"" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.CheckAuthorizationResult.typeMap", + "type": "Object", + "tags": [], + "label": "typeMap", + "description": [ + "\nThe specific authorized privileges: a map of type to record\nof action/AuthorizationTypeEntry (spaces/globallyAuthz'd)" + ], + "signature": [ + "Map>" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.DecoratedError", + "type": "Interface", + "tags": [], + "label": "DecoratedError", + "description": [ + "\nThe DecoratedError interface extends the Boom error object\nand augments it with the 'SavedObjectsClientErrorCode' symbol\nproperty." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.DecoratedError", + "text": "DecoratedError" + }, + " extends ", + "Boom", + "" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.DecoratedError.code", + "type": "string", + "tags": [], + "label": "[code]", + "description": [ + "the 'SavedObjectsClientErrorCode' symbol" + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/saved_objects_error_helpers.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.EncryptedObjectDescriptor", + "type": "Interface", + "tags": [], + "label": "EncryptedObjectDescriptor", + "description": [ + "\nThe EncryptedObjectDescriptor interface contains settings for describing\nan object to be encrypted or decrpyted." + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.EncryptedObjectDescriptor.type", + "type": "string", + "tags": [], + "label": "type", + "description": [ + "The Saved Object type" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.EncryptedObjectDescriptor.id", + "type": "string", + "tags": [], + "label": "id", + "description": [ + "The Saved Object ID" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.EncryptedObjectDescriptor.namespace", + "type": "string", + "tags": [], + "label": "namespace", + "description": [ + "Namespace for use in index migration...\nIf the object is being decrypted during index migration, the object was previously\nencrypted with its namespace in the descriptor portion of the AAD; on the other hand,\nif the object is being decrypted during object migration, the object was never encrypted\nwith its namespace in the descriptor portion of the AAD." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.GetFindRedactTypeMapParams", + "type": "Interface", + "tags": [], + "label": "GetFindRedactTypeMapParams", + "description": [ + "\nThe GetFindRedactTypeMapParams interface is used for the GetFindRedactTypeMap\nmethod of the ISavedObjectsSecurityExtension." + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.GetFindRedactTypeMapParams.previouslyCheckedNamespaces", + "type": "Object", + "tags": [], + "label": "previouslyCheckedNamespaces", + "description": [ + "The namespaces previously checked by the AuthorizeFind method" + ], + "signature": [ + "Set" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.GetFindRedactTypeMapParams.objects", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "\nThe objects to authorize in order to generate the type map\nthis should be populated by the result of the es query" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeObjectWithExistingSpaces", + "text": "AuthorizeObjectWithExistingSpaces" + }, + "[]" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension", + "type": "Interface", + "tags": [], + "label": "ISavedObjectsEncryptionExtension", + "description": [ + "\nThe ISavedObjectsEncryptionExtension interface defines the functions of a saved objects\nrepository encryption extension. It contains functions for determining if a type is\nencryptable, encrypting object attributes, and decrypting or stripping object attributes." + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.isEncryptableType", + "type": "Function", + "tags": [], + "label": "isEncryptableType", + "description": [ + "\nReturns true if a type has been registered as encryptable." + ], + "signature": [ + "(type: string) => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.isEncryptableType.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [ + "- the string name of the object type" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "boolean, true if type is encryptable" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.decryptOrStripResponseAttributes", + "type": "Function", + "tags": [], + "label": "decryptOrStripResponseAttributes", + "description": [ + "\nGiven a saved object, will return a decrypted saved object or will strip\nattributes from the returned object if decryption fails." + ], + "signature": [ + ">(response: R, originalAttributes?: T | undefined) => Promise" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.decryptOrStripResponseAttributes.$1", + "type": "Uncategorized", + "tags": [], + "label": "response", + "description": [ + "- any object R that extends SavedObject with attributes T" + ], + "signature": [ + "R" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.decryptOrStripResponseAttributes.$2", + "type": "Uncategorized", + "tags": [], + "label": "originalAttributes", + "description": [ + "- optional, original attributes T from when the object was created (NOT encrypted).\nThese are used to avoid decryption execution cost if they are supplied." + ], + "signature": [ + "T | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "R with decrypted or stripped attributes" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.encryptAttributes", + "type": "Function", + "tags": [], + "label": "encryptAttributes", + "description": [ + "\nGiven a saved object descriptor and some attributes, returns an encrypted version\nof supplied attributes." + ], + "signature": [ + ">(descriptor: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.EncryptedObjectDescriptor", + "text": "EncryptedObjectDescriptor" + }, + ", attributes: T) => Promise" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.encryptAttributes.$1", + "type": "Object", + "tags": [], + "label": "descriptor", + "description": [ + "- an object containing a saved object id, type, and optional namespace." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.EncryptedObjectDescriptor", + "text": "EncryptedObjectDescriptor" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsEncryptionExtension.encryptAttributes.$2", + "type": "Uncategorized", + "tags": [], + "label": "attributes", + "description": [ + "- T, attributes of the specified object, some of which to be encrypted." + ], + "signature": [ + "T" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "T, encrypted attributes" + ] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsExporter", "type": "Interface", "tags": [], - "label": "CheckAuthorizationParams", + "label": "ISavedObjectsExporter", "description": [ - "\nThe CheckAuthorizationParams interface contains settings for checking\nauthorization via the ISavedObjectsSecurityExtension." - ], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.CheckAuthorizationParams", - "text": "CheckAuthorizationParams" - }, - "" + "\nUtility class used to export savedObjects.\n" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationParams.types", - "type": "Object", - "tags": [], - "label": "types", + "id": "def-common.ISavedObjectsExporter.exportByTypes", + "type": "Function", + "tags": [ + "throws" + ], + "label": "exportByTypes", "description": [ - "\nA set of types to check." + "\nGenerates an export stream for given types.\n\nSee the {@link SavedObjectsExportByTypeOptions | options} for more detailed information.\n" ], "signature": [ - "Set" + "(options: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsExportByTypeOptions", + "text": "SavedObjectsExportByTypeOptions" + }, + ") => Promise<", + "Readable", + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsExporter.exportByTypes.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsExportByTypeOptions", + "text": "SavedObjectsExportByTypeOptions" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationParams.spaces", - "type": "Object", - "tags": [], - "label": "spaces", + "id": "def-common.ISavedObjectsExporter.exportByObjects", + "type": "Function", + "tags": [ + "throws" + ], + "label": "exportByObjects", "description": [ - "\nA set of spaces to check." + "\nGenerates an export stream for given object references.\n\nSee the {@link SavedObjectsExportByObjectOptions | options} for more detailed information.\n" ], "signature": [ - "Set" + "(options: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsExportByObjectOptions", + "text": "SavedObjectsExportByObjectOptions" + }, + ") => Promise<", + "Readable", + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", "deprecated": false, - "trackAdoption": false - }, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsExporter.exportByObjects.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsExportByObjectOptions", + "text": "SavedObjectsExportByObjectOptions" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsImporter", + "type": "Interface", + "tags": [], + "label": "ISavedObjectsImporter", + "description": [ + "\nUtility class used to import savedObjects.\n" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationParams.actions", - "type": "Object", - "tags": [], - "label": "actions", + "id": "def-common.ISavedObjectsImporter.import", + "type": "Function", + "tags": [ + "throws" + ], + "label": "import", "description": [ - "\nAn set of actions to check." + "\nImport saved objects from given stream. See the {@link SavedObjectsImportOptions | options} for more\ndetailed information.\n" ], "signature": [ - "Set" + "(options: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsImportOptions", + "text": "SavedObjectsImportOptions" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectsImportResponse", + "text": "SavedObjectsImportResponse" + }, + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsImporter.import.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsImportOptions", + "text": "SavedObjectsImportOptions" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationParams.options", - "type": "Object", - "tags": [], - "label": "options", + "id": "def-common.ISavedObjectsImporter.resolveImportErrors", + "type": "Function", + "tags": [ + "throws" + ], + "label": "resolveImportErrors", "description": [ - "\nAuthorization options - whether or not to allow global resources, false if options are undefined" + "\nResolve and return saved object import errors.\nSee the {@link SavedObjectsResolveImportErrorsOptions | options} for more detailed information.\n" ], "signature": [ - "{ allowGlobalResource: boolean; } | undefined" + "(options: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsResolveImportErrorsOptions", + "text": "SavedObjectsResolveImportErrorsOptions" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObjectsImportResponse", + "text": "SavedObjectsImportResponse" + }, + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsImporter.resolveImportErrors.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.SavedObjectsResolveImportErrorsOptions", + "text": "SavedObjectsResolveImportErrorsOptions" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationResult", - "type": "Interface", - "tags": [], - "label": "CheckAuthorizationResult", - "description": [ - "\nThe CheckAuthorizationResult interface contains the overall status of an\nauthorization check and the specific authorized privileges as an\nAuthorizationTypeMap." - ], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.CheckAuthorizationResult", - "text": "CheckAuthorizationResult" - }, - "" + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension", + "type": "Interface", + "tags": [], + "label": "ISavedObjectsSecurityExtension", + "description": [ + "\nThe ISavedObjectsSecurityExtension interface defines the functions of a saved objects repository security extension.\nIt contains functions for checking & enforcing authorization, adding audit events, and redacting namespaces." ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -301,195 +3430,391 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationResult.status", - "type": "CompoundType", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeCreate", + "type": "Function", "tags": [], - "label": "status", + "label": "authorizeCreate", "description": [ - "\nThe overall status of the authorization check as a string:\n'fully_authorized' | 'partially_authorized' | 'unauthorized'" + "\nPerforms authorization for the CREATE security action" ], "signature": [ - "\"unauthorized\" | \"fully_authorized\" | \"partially_authorized\"" + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCreateParams", + "text": "AuthorizeCreateParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeCreate.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "the namespace and object to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCreateParams", + "text": "AuthorizeCreateParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.CheckAuthorizationResult.typeMap", - "type": "Object", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkCreate", + "type": "Function", "tags": [], - "label": "typeMap", + "label": "authorizeBulkCreate", "description": [ - "\nThe specific authorized privileges: a map of type to record\nof action/AuthorizationTypeEntry (spaces/globallyAuthz'd)" + "\nPerforms authorization for the BULK_CREATE security action" ], "signature": [ - "Map(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.AuthorizationTypeEntry", - "text": "AuthorizationTypeEntry" + "section": "def-common.AuthorizeBulkCreateParams", + "text": "AuthorizeBulkCreateParams" }, - ">>" + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EncryptedObjectDescriptor", - "type": "Interface", - "tags": [], - "label": "EncryptedObjectDescriptor", - "description": [ - "\nThe EncryptedObjectDescriptor interface contains settings for describing\nan object to be encrypted or decrpyted." - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EncryptedObjectDescriptor.type", - "type": "string", - "tags": [], - "label": "type", - "description": [ - "The Saved Object type" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EncryptedObjectDescriptor.id", - "type": "string", - "tags": [], - "label": "id", - "description": [ - "The Saved Object ID" + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkCreate.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "the namespace and objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkCreateParams", + "text": "AuthorizeBulkCreateParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", - "deprecated": false, - "trackAdoption": false + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EncryptedObjectDescriptor.namespace", - "type": "string", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeUpdate", + "type": "Function", "tags": [], - "label": "namespace", + "label": "authorizeUpdate", "description": [ - "Namespace for use in index migration...\nIf the object is being decrypted during index migration, the object was previously\nencrypted with its namespace in the descriptor portion of the AAD; on the other hand,\nif the object is being decrypted during object migration, the object was never encrypted\nwith its namespace in the descriptor portion of the AAD." + "\nPerforms authorization for the UPDATE security action" ], "signature": [ - "string | undefined" + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateParams", + "text": "AuthorizeUpdateParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EnforceAuthorizationParams", - "type": "Interface", - "tags": [], - "label": "EnforceAuthorizationParams", - "description": [ - "\nThe EnforceAuthorizationParams interface contains settings for\nenforcing a single action via the ISavedObjectsSecurityExtension." - ], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.EnforceAuthorizationParams", - "text": "EnforceAuthorizationParams" + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeUpdate.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "the namespace and object to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeUpdateParams", + "text": "AuthorizeUpdateParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, - "" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EnforceAuthorizationParams.typesAndSpaces", - "type": "Object", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkUpdate", + "type": "Function", "tags": [], - "label": "typesAndSpaces", + "label": "authorizeBulkUpdate", "description": [ - "\nA map of types to spaces that will be affected by the action" + "\nPerforms authorization for the BULK_UPDATE security action" ], "signature": [ - "Map>" + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkUpdateParams", + "text": "AuthorizeBulkUpdateParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkUpdate.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "the namespace and objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkUpdateParams", + "text": "AuthorizeBulkUpdateParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EnforceAuthorizationParams.action", - "type": "Uncategorized", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeDelete", + "type": "Function", "tags": [], - "label": "action", + "label": "authorizeDelete", "description": [ - "\nThe relevant action (create, update, etc.)" + "\nPerforms authorization for the DELETE security action" ], "signature": [ - "A" + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeDeleteParams", + "text": "AuthorizeDeleteParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeDelete.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "the namespace and object to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeDeleteParams", + "text": "AuthorizeDeleteParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EnforceAuthorizationParams.typeMap", - "type": "Object", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkDelete", + "type": "Function", "tags": [], - "label": "typeMap", + "label": "authorizeBulkDelete", "description": [ - "\nThe authorization map from CheckAuthorizationResult: a\nmap of type to record of action/AuthorizationTypeEntry\n(spaces/globallyAuthz'd)" + "\nPerforms authorization for the BULK_DELETE security action" ], "signature": [ - "Map(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.AuthorizationTypeEntry", - "text": "AuthorizationTypeEntry" + "section": "def-common.AuthorizeBulkDeleteParams", + "text": "AuthorizeBulkDeleteParams" }, - ">>" + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkDelete.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [ + "the namespace and objects to authorize" + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkDeleteParams", + "text": "AuthorizeBulkDeleteParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EnforceAuthorizationParams.auditCallback", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeGet", "type": "Function", "tags": [], - "label": "auditCallback", + "label": "authorizeGet", "description": [ - "\nA callback intended to handle adding audit events in\nboth error (unauthorized), or success (authorized)\ncases" + "\nPerforms authorization for the GET security action" ], "signature": [ - "((error?: Error | undefined) => void) | undefined" + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeGetParams", + "text": "AuthorizeGetParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -497,503 +3822,566 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.EnforceAuthorizationParams.auditCallback.$1", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeGet.$1", "type": "Object", "tags": [], - "label": "error", - "description": [], + "label": "params", + "description": [ + "the namespace, object to authorize, and whether or not the object was found" + ], "signature": [ - "Error | undefined" + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeGetParams", + "text": "AuthorizeGetParams" + } ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension", - "type": "Interface", - "tags": [], - "label": "ISavedObjectsEncryptionExtension", - "description": [ - "\nThe ISavedObjectsEncryptionExtension interface defines the functions of a saved objects\nrepository encryption extension. It contains functions for determining if a type is\nencryptable, encrypting object attributes, and decrypting or stripping object attributes." - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] + }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.isEncryptableType", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkGet", "type": "Function", "tags": [], - "label": "isEncryptableType", + "label": "authorizeBulkGet", "description": [ - "\nReturns true if a type has been registered as encryptable." + "\nPerforms authorization for the BULK_GET security action" ], "signature": [ - "(type: string) => boolean" + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkGetParams", + "text": "AuthorizeBulkGetParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.isEncryptableType.$1", - "type": "string", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeBulkGet.$1", + "type": "Object", "tags": [], - "label": "type", + "label": "params", "description": [ - "- the string name of the object type" + "the namespace and objects to authorize" ], "signature": [ - "string" + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeBulkGetParams", + "text": "AuthorizeBulkGetParams" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], "returnComment": [ - "boolean, true if type is encryptable" + "CheckAuthorizationResult - the resulting authorization level and authorization map" ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.decryptOrStripResponseAttributes", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeCheckConflicts", "type": "Function", "tags": [], - "label": "decryptOrStripResponseAttributes", + "label": "authorizeCheckConflicts", "description": [ - "\nGiven a saved object, will return a decrypted saved object or will strip\nattributes from the returned object if decryption fails." + "\nPerforms authorization for the CHECK_CONFLICTS security action" ], "signature": [ - "(params: ", { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/core-saved-objects-server", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObject", - "text": "SavedObject" + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCheckConflictsParams", + "text": "AuthorizeCheckConflictsParams" }, - ">(response: R, originalAttributes?: T | undefined) => Promise" + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.decryptOrStripResponseAttributes.$1", - "type": "Uncategorized", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeCheckConflicts.$1", + "type": "Object", "tags": [], - "label": "response", + "label": "params", "description": [ - "- any object R that extends SavedObject with attributes T" + "the namespace and objects to authorize" ], "signature": [ - "R" + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeCheckConflictsParams", + "text": "AuthorizeCheckConflictsParams" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true + } + ], + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeRemoveReferences", + "type": "Function", + "tags": [], + "label": "authorizeRemoveReferences", + "description": [ + "\nPerforms authorization for the REMOVE_REFERENCES security action" + ], + "signature": [ + "(params: ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeDeleteParams", + "text": "AuthorizeDeleteParams" + }, + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" }, + ">" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.decryptOrStripResponseAttributes.$2", - "type": "Uncategorized", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeRemoveReferences.$1", + "type": "Object", "tags": [], - "label": "originalAttributes", + "label": "params", "description": [ - "- optional, original attributes T from when the object was created (NOT encrypted).\nThese are used to avoid decryption execution cost if they are supplied." + "the namespace and object to authorize" ], "signature": [ - "T | undefined" + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeDeleteParams", + "text": "AuthorizeDeleteParams" + } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], "returnComment": [ - "R with decrypted or stripped attributes" + "CheckAuthorizationResult - the resulting authorization level and authorization map" ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.encryptAttributes", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeOpenPointInTime", "type": "Function", "tags": [], - "label": "encryptAttributes", + "label": "authorizeOpenPointInTime", "description": [ - "\nGiven a saved object descriptor and some attributes, returns an encrypted version\nof supplied attributes." + "\nPerforms authorization for the OPEN_POINT_IN_TIME security action" ], "signature": [ - ">(descriptor: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.EncryptedObjectDescriptor", - "text": "EncryptedObjectDescriptor" + "section": "def-common.AuthorizeFindParams", + "text": "AuthorizeFindParams" }, - ", attributes: T) => Promise" + ") => Promise<", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" + }, + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.encryptAttributes.$1", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeOpenPointInTime.$1", "type": "Object", "tags": [], - "label": "descriptor", + "label": "params", "description": [ - "- an object containing a saved object id, type, and optional namespace." + "the namespaces and types to authorize" ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.EncryptedObjectDescriptor", - "text": "EncryptedObjectDescriptor" + "section": "def-common.AuthorizeFindParams", + "text": "AuthorizeFindParams" } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsEncryptionExtension.encryptAttributes.$2", - "type": "Uncategorized", - "tags": [], - "label": "attributes", - "description": [ - "- T, attributes of the specified object, some of which to be encrypted." - ], - "signature": [ - "T" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/encryption.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], "returnComment": [ - "T, encrypted attributes" + "CheckAuthorizationResult - the resulting authorization level and authorization map" ] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsExporter", - "type": "Interface", - "tags": [], - "label": "ISavedObjectsExporter", - "description": [ - "\nUtility class used to export savedObjects.\n" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsExporter.exportByTypes", + "id": "def-common.ISavedObjectsSecurityExtension.auditClosePointInTime", "type": "Function", - "tags": [ - "throws" + "tags": [], + "label": "auditClosePointInTime", + "description": [ + "\nPerforms audit logging for the CLOSE_POINT_IN_TIME security action" ], - "label": "exportByTypes", + "signature": [ + "() => void" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeAndRedactMultiNamespaceReferences", + "type": "Function", + "tags": [], + "label": "authorizeAndRedactMultiNamespaceReferences", "description": [ - "\nGenerates an export stream for given types.\n\nSee the {@link SavedObjectsExportByTypeOptions | options} for more detailed information.\n" + "\nHandles all security operations for the COLLECT_MULTINAMESPACE_REFERENCES security action\nChecks/enforces authorization, writes audit events, filters the object graph, and redacts spaces from the share_to_space/bulk_get\nresponse. In other SavedObjectsRepository functions we do this before decrypting attributes. However, because of the\nshare_to_space/bulk_get response logic involved in deciding between the exact match or alias match, it's cleaner to do authorization,\nauditing, filtering, and redaction all afterwards." ], "signature": [ - "(options: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsExportByTypeOptions", - "text": "SavedObjectsExportByTypeOptions" + "section": "def-common.AuthorizeAndRedactMultiNamespaceReferencesParams", + "text": "AuthorizeAndRedactMultiNamespaceReferencesParams" }, ") => Promise<", - "Readable", - ">" + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectReferenceWithContext", + "text": "SavedObjectReferenceWithContext" + }, + "[]>" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsExporter.exportByTypes.$1", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeAndRedactMultiNamespaceReferences.$1", "type": "Object", "tags": [], - "label": "options", - "description": [], + "label": "params", + "description": [ + "- the namespace, objects to authorize, and purpose of the operation" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsExportByTypeOptions", - "text": "SavedObjectsExportByTypeOptions" + "section": "def-common.AuthorizeAndRedactMultiNamespaceReferencesParams", + "text": "AuthorizeAndRedactMultiNamespaceReferencesParams" } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], - "returnComment": [] + "returnComment": [ + "SavedObjectReferenceWithContext[] - array of collected references" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsExporter.exportByObjects", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeAndRedactInternalBulkResolve", "type": "Function", - "tags": [ - "throws" - ], - "label": "exportByObjects", + "tags": [], + "label": "authorizeAndRedactInternalBulkResolve", "description": [ - "\nGenerates an export stream for given object references.\n\nSee the {@link SavedObjectsExportByObjectOptions | options} for more detailed information.\n" + "\nHandles all security operations for the INTERNAL_BULK_RESOLVE security action\nChecks authorization, writes audit events, and redacts namespaces from the bulkResolve response. In other SavedObjectsRepository\nfunctions we do this before decrypting attributes. However, because of the bulkResolve logic involved in deciding between the exact match\nor alias match, it's cleaner to do authorization, auditing, and redaction all afterwards." ], "signature": [ - "(options: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsExportByObjectOptions", - "text": "SavedObjectsExportByObjectOptions" + "section": "def-common.AuthorizeAndRedactInternalBulkResolveParams", + "text": "AuthorizeAndRedactInternalBulkResolveParams" }, - ") => Promise<", - "Readable", - ">" + ") => Promise<(", + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsResolveResponse", + "text": "SavedObjectsResolveResponse" + }, + " | ", + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.BulkResolveError", + "text": "BulkResolveError" + }, + ")[]>" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsExporter.exportByObjects.$1", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeAndRedactInternalBulkResolve.$1", "type": "Object", "tags": [], - "label": "options", - "description": [], + "label": "params", + "description": [ + "- the namespace and objects to authorize" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsExportByObjectOptions", - "text": "SavedObjectsExportByObjectOptions" - } + "section": "def-common.AuthorizeAndRedactInternalBulkResolveParams", + "text": "AuthorizeAndRedactInternalBulkResolveParams" + }, + "" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/export.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsImporter", - "type": "Interface", - "tags": [], - "label": "ISavedObjectsImporter", - "description": [ - "\nUtility class used to import savedObjects.\n" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + "returnComment": [ + "Array of SavedObjectsResolveResponses or BulkResolveErrors - the redacted resolve responses or errors" + ] + }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsImporter.import", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeUpdateSpaces", "type": "Function", - "tags": [ - "throws" - ], - "label": "import", + "tags": [], + "label": "authorizeUpdateSpaces", "description": [ - "\nImport saved objects from given stream. See the {@link SavedObjectsImportOptions | options} for more\ndetailed information.\n" + "\nPerforms authorization for the UPDATE_OBJECTS_SPACES security action" ], "signature": [ - "(options: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsImportOptions", - "text": "SavedObjectsImportOptions" + "section": "def-common.AuthorizeUpdateSpacesParams", + "text": "AuthorizeUpdateSpacesParams" }, ") => Promise<", { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/core-saved-objects-server", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectsImportResponse", - "text": "SavedObjectsImportResponse" + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" }, - ">" + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsImporter.import.$1", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeUpdateSpaces.$1", "type": "Object", "tags": [], - "label": "options", - "description": [], + "label": "params", + "description": [ + "- namespace, spacesToAdd, spacesToRemove, and objects to authorize" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsImportOptions", - "text": "SavedObjectsImportOptions" + "section": "def-common.AuthorizeUpdateSpacesParams", + "text": "AuthorizeUpdateSpacesParams" } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], - "returnComment": [] + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsImporter.resolveImportErrors", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeFind", "type": "Function", - "tags": [ - "throws" - ], - "label": "resolveImportErrors", + "tags": [], + "label": "authorizeFind", "description": [ - "\nResolve and return saved object import errors.\nSee the {@link SavedObjectsResolveImportErrorsOptions | options} for more detailed information.\n" + "\nPerforms authorization for the FIND security action\nThis method is the first of two security steps for the find operation (saved objects repository's find method)\nThis method should be called first in order to provide data needed to construct the type-to-namespace map for the search DSL" ], "signature": [ - "(options: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsResolveImportErrorsOptions", - "text": "SavedObjectsResolveImportErrorsOptions" + "section": "def-common.AuthorizeFindParams", + "text": "AuthorizeFindParams" }, ") => Promise<", { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/core-saved-objects-server", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectsImportResponse", - "text": "SavedObjectsImportResponse" + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.CheckAuthorizationResult", + "text": "CheckAuthorizationResult" }, - ">" + ">" ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsImporter.resolveImportErrors.$1", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeFind.$1", "type": "Object", "tags": [], - "label": "options", - "description": [], + "label": "params", + "description": [ + "- namespaces and types to authorize" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.SavedObjectsResolveImportErrorsOptions", - "text": "SavedObjectsResolveImportErrorsOptions" + "section": "def-common.AuthorizeFindParams", + "text": "AuthorizeFindParams" } ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/import.ts", + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, "trackAdoption": false, "isRequired": true } ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension", - "type": "Interface", - "tags": [], - "label": "ISavedObjectsSecurityExtension", - "description": [ - "\nThe ISavedObjectsSecurityExtension interface defines the functions of a saved objects repository security extension.\nIt contains functions for checking & enforcing authorization, adding audit events, and redacting namespaces." - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ + "returnComment": [ + "CheckAuthorizationResult - the resulting authorization level and authorization map" + ] + }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.performAuthorization", + "id": "def-common.ISavedObjectsSecurityExtension.getFindRedactTypeMap", "type": "Function", "tags": [], - "label": "performAuthorization", + "label": "getFindRedactTypeMap", "description": [ - "\nPerforms authorization (check & enforce) of actions on specified types in specified spaces." + "\nGets an updated type map for redacting results of the FIND security action\nThis method is the second of two security steps for the find operation (saved objects repository's find method)\nThis method should be called last in order to update the type map used to redact namespaces in the results" ], "signature": [ - "(params: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.PerformAuthorizationParams", - "text": "PerformAuthorizationParams" + "section": "def-common.GetFindRedactTypeMapParams", + "text": "GetFindRedactTypeMapParams" }, - ") => Promise<", + ") => Promise<", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.CheckAuthorizationResult", - "text": "CheckAuthorizationResult" + "section": "def-common.AuthorizationTypeMap", + "text": "AuthorizationTypeMap" }, - ">" + " | undefined>" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1001,22 +4389,21 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.performAuthorization.$1", + "id": "def-common.ISavedObjectsSecurityExtension.getFindRedactTypeMap.$1", "type": "Object", "tags": [], "label": "params", "description": [ - "- actions, types & spaces map, audit callback, options (enforce bypassed if enforce map is undefined)" + "- namespace, spacesToAdd, spacesToRemove, and objects to authorize" ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.PerformAuthorizationParams", - "text": "PerformAuthorizationParams" - }, - "" + "section": "def-common.GetFindRedactTypeMapParams", + "text": "GetFindRedactTypeMapParams" + } ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1025,28 +4412,36 @@ } ], "returnComment": [ - "CheckAuthorizationResult - the resulting authorization level and authorization map" + "- the updated type map used for redaction" ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.enforceAuthorization", + "id": "def-common.ISavedObjectsSecurityExtension.redactNamespaces", "type": "Function", "tags": [], - "label": "enforceAuthorization", + "label": "redactNamespaces", "description": [ - "\nEnforces authorization of a single action on specified types in specified spaces.\nThrows error if authorization map does not cover specified parameters." + "\nFilters a saved object's spaces based on an authorization map (from CheckAuthorizationResult)" ], "signature": [ - "(params: ", + "(params: ", { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.EnforceAuthorizationParams", - "text": "EnforceAuthorizationParams" + "section": "def-common.RedactNamespacesParams", + "text": "RedactNamespacesParams" + }, + ") => ", + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObject", + "text": "SavedObject" }, - ") => void" + "" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1054,22 +4449,22 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.enforceAuthorization.$1", + "id": "def-common.ISavedObjectsSecurityExtension.redactNamespaces.$1", "type": "Object", "tags": [], "label": "params", "description": [ - "- map of types/spaces, action to check, and authz map (from CheckAuthorizationResult)" + "- the saved object and an authorization map" ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "common", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.EnforceAuthorizationParams", - "text": "EnforceAuthorizationParams" + "section": "def-common.RedactNamespacesParams", + "text": "RedactNamespacesParams" }, - "" + "" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1077,27 +4472,29 @@ "isRequired": true } ], - "returnComment": [] + "returnComment": [ + "SavedObject - saved object with filtered spaces" + ] }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.addAuditEvent", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeDisableLegacyUrlAliases", "type": "Function", "tags": [], - "label": "addAuditEvent", + "label": "authorizeDisableLegacyUrlAliases", "description": [ - "\nAdds an audit event for the specified action with relevant information" + "\nPerforms authorization for the disableLegacyUrlAliases method of the SecureSpacesClientWrapper\nThere is no return for this method. If unauthorized the method with throw, otherwise will resolve." ], "signature": [ - "(params: ", + "(aliases: ", { - "pluginId": "@kbn/core-saved-objects-server", + "pluginId": "@kbn/core-saved-objects-common", "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.AddAuditEventParams", - "text": "AddAuditEventParams" + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.LegacyUrlAliasTarget", + "text": "LegacyUrlAliasTarget" }, - ") => void" + "[]) => void" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1105,21 +4502,22 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.addAuditEvent.$1", - "type": "Object", + "id": "def-common.ISavedObjectsSecurityExtension.authorizeDisableLegacyUrlAliases.$1", + "type": "Array", "tags": [], - "label": "params", + "label": "aliases", "description": [ - "- the action, outcome, error, and relevant object/space information" + "- array of legacy url alias targets" ], "signature": [ { - "pluginId": "@kbn/core-saved-objects-server", + "pluginId": "@kbn/core-saved-objects-common", "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.AddAuditEventParams", - "text": "AddAuditEventParams" - } + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.LegacyUrlAliasTarget", + "text": "LegacyUrlAliasTarget" + }, + "[]" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1131,31 +4529,23 @@ }, { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.redactNamespaces", + "id": "def-common.ISavedObjectsSecurityExtension.auditObjectsForSpaceDeletion", "type": "Function", "tags": [], - "label": "redactNamespaces", + "label": "auditObjectsForSpaceDeletion", "description": [ - "\nFilters a saved object's spaces based on an authorization map (from CheckAuthorizationResult)" + "\nPerforms saved object audit logging for the delete method of the SecureSpacesClientWrapper" ], "signature": [ - "(params: ", - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.RedactNamespacesParams", - "text": "RedactNamespacesParams" - }, - ") => ", + "(spaceId: string, objects: ", { - "pluginId": "@kbn/core-saved-objects-common", + "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObject", - "text": "SavedObject" + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsFindResult", + "text": "SavedObjectsFindResult" }, - "" + "[]) => void" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1163,22 +4553,39 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.ISavedObjectsSecurityExtension.redactNamespaces.$1", - "type": "Object", + "id": "def-common.ISavedObjectsSecurityExtension.auditObjectsForSpaceDeletion.$1", + "type": "string", "tags": [], - "label": "params", + "label": "spaceId", "description": [ - "- the saved object and an authorization map" + "- the id of the space being deleted" + ], + "signature": [ + "string" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.ISavedObjectsSecurityExtension.auditObjectsForSpaceDeletion.$2", + "type": "Array", + "tags": [], + "label": "objects", + "description": [ + "- the objects to audit" ], "signature": [ { - "pluginId": "@kbn/core-saved-objects-server", + "pluginId": "@kbn/core-saved-objects-api-server", "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.RedactNamespacesParams", - "text": "RedactNamespacesParams" + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-common.SavedObjectsFindResult", + "text": "SavedObjectsFindResult" }, - "" + "[]" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", "deprecated": false, @@ -1186,9 +4593,7 @@ "isRequired": true } ], - "returnComment": [ - "SavedObject - saved object with filtered spaces" - ] + "returnComment": [] } ], "initialIsOpen": false @@ -2097,146 +5502,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams", - "type": "Interface", - "tags": [], - "label": "PerformAuthorizationParams", - "description": [ - "\nThe PerformAuthorizationParams interface contains settings for checking\n& enforcing authorization via the ISavedObjectsSecurityExtension." - ], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-common.PerformAuthorizationParams", - "text": "PerformAuthorizationParams" - }, - "" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.actions", - "type": "Object", - "tags": [], - "label": "actions", - "description": [ - "\nA set of actions to check." - ], - "signature": [ - "Set" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.types", - "type": "Object", - "tags": [], - "label": "types", - "description": [ - "\nA set of types to check." - ], - "signature": [ - "Set" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.spaces", - "type": "Object", - "tags": [], - "label": "spaces", - "description": [ - "\nA set of spaces to check (types to check comes from the typesAndSpaces map)." - ], - "signature": [ - "Set" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.enforceMap", - "type": "Object", - "tags": [], - "label": "enforceMap", - "description": [ - "\nA map of types (key) to spaces (value) that will be affected by the action(s).\nIf undefined, enforce with be bypassed." - ], - "signature": [ - "Map> | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.auditCallback", - "type": "Function", - "tags": [], - "label": "auditCallback", - "description": [ - "\nA callback intended to handle adding audit events in\nboth error (unauthorized), or success (authorized)\ncases" - ], - "signature": [ - "((error?: Error | undefined) => void) | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.auditCallback.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.PerformAuthorizationParams.options", - "type": "Object", - "tags": [], - "label": "options", - "description": [ - "\nAuthorization options\nallowGlobalResource - whether or not to allow global resources, false if options are undefined" - ], - "signature": [ - "{ allowGlobalResource: boolean; } | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/core-saved-objects-server", "id": "def-common.RedactNamespacesParams", @@ -2267,7 +5532,7 @@ "tags": [], "label": "savedObject", "description": [ - "\nrelevant saved object" + "Relevant saved object" ], "signature": [ { @@ -2316,7 +5581,9 @@ "type": "Interface", "tags": [], "label": "SavedObject", - "description": [], + "description": [ + "\nDefinition of the Saved Object interface\n" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-common", @@ -2568,6 +5835,10 @@ "plugin": "@kbn/core-saved-objects-common", "path": "packages/core/saved-objects/core-saved-objects-common/src/saved_objects.ts" }, + { + "plugin": "@kbn/core-saved-objects-api-server", + "path": "packages/core/saved-objects/core-saved-objects-api-server/index.ts" + }, { "plugin": "@kbn/core", "path": "src/core/server/index.ts" @@ -3153,7 +6424,7 @@ "label": "document", "description": [], "signature": [ - "SavedObjectDoc & { references: ", + "SavedObjectDoc & { references?: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", @@ -3161,7 +6432,7 @@ "section": "def-common.SavedObjectReference", "text": "SavedObjectReference" }, - "[]; }" + "[] | undefined; }" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/model_version/transformations.ts", "deprecated": false, @@ -3238,7 +6509,7 @@ "label": "document", "description": [], "signature": [ - "SavedObjectDoc & { references: ", + "SavedObjectDoc & { references?: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", @@ -3246,7 +6517,7 @@ "section": "def-common.SavedObjectReference", "text": "SavedObjectReference" }, - "[]; }" + "[] | undefined; }" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/model_version/transformations.ts", "deprecated": false, @@ -3359,7 +6630,7 @@ "label": "document", "description": [], "signature": [ - "SavedObjectDoc & { references: ", + "SavedObjectDoc & { references?: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", @@ -3367,7 +6638,7 @@ "section": "def-common.SavedObjectReference", "text": "SavedObjectReference" }, - "[]; }" + "[] | undefined; }" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/model_version/transformations.ts", "deprecated": false, @@ -3832,7 +7103,9 @@ "type": "Object", "tags": [], "label": "encryptionExtension", - "description": [], + "description": [ + "The encryption extension - handles encrypting and decrypting attributes of saved objects" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", @@ -3853,7 +7126,9 @@ "type": "Object", "tags": [], "label": "securityExtension", - "description": [], + "description": [ + "The security extension - handles action authorization, audit logging, and space redaction" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", @@ -3874,7 +7149,9 @@ "type": "Object", "tags": [], "label": "spacesExtension", - "description": [], + "description": [ + "The spaces extension - handles retrieving the current space and retrieving available spaces" + ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", @@ -6188,6 +9465,10 @@ "plugin": "@kbn/core-saved-objects-migration-server-internal", "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migrations.ts" + }, { "plugin": "actions", "path": "x-pack/plugins/actions/server/saved_objects/index.ts" @@ -6358,23 +9639,35 @@ }, { "plugin": "@kbn/core-saved-objects-migration-server-internal", - "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" }, { "plugin": "@kbn/core-saved-objects-migration-server-internal", - "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" }, { "plugin": "@kbn/core-saved-objects-migration-server-internal", - "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" }, { "plugin": "@kbn/core-saved-objects-migration-server-internal", - "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" }, { "plugin": "@kbn/core-saved-objects-migration-server-internal", - "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/document_migrator.test.ts" + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" + }, + { + "plugin": "@kbn/core-saved-objects-migration-server-internal", + "path": "packages/core/saved-objects/core-saved-objects-migration-server-internal/src/document_migrator/validate_migration.test.ts" } ] }, @@ -6869,22 +10162,7 @@ "initialIsOpen": false } ], - "enums": [ - { - "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-common.AuditAction", - "type": "Enum", - "tags": [], - "label": "AuditAction", - "description": [ - "\nThe AuditAction enumeration contains values for all\nvalid audit actions for use in AddAuditEventParams." - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "enums": [], "misc": [ { "parentPluginId": "@kbn/core-saved-objects-server", @@ -6911,6 +10189,29 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-common.AuthorizeOpenPointInTimeParams", + "type": "Type", + "tags": [], + "label": "AuthorizeOpenPointInTimeParams", + "description": [ + "\nThe AuthorizeOpenPointInTimeParams interface is used for the\nAuthorizeOpenPointInTime method of the ISavedObjectsSecurityExtension.\nIt is identical to AuthorizeFindParams." + ], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-server", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-common.AuthorizeFindParams", + "text": "AuthorizeFindParams" + } + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-server", "id": "def-common.CreatedObject", @@ -7101,7 +10402,7 @@ "\nDocument type used during model migration.\n" ], "signature": [ - "SavedObjectDoc & { references: ", + "SavedObjectDoc & { references?: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", @@ -7109,7 +10410,7 @@ "section": "def-common.SavedObjectReference", "text": "SavedObjectReference" }, - "[]; }" + "[] | undefined; }" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/model_version/transformations.ts", "deprecated": false, @@ -7165,7 +10466,7 @@ "label": "document", "description": [], "signature": [ - "SavedObjectDoc & { references: ", + "SavedObjectDoc & { references?: ", { "pluginId": "@kbn/core-saved-objects-common", "scope": "common", @@ -7173,7 +10474,7 @@ "section": "def-common.SavedObjectReference", "text": "SavedObjectReference" }, - "[]; }" + "[] | undefined; }" ], "path": "packages/core/saved-objects/core-saved-objects-server/src/model_version/transformations.ts", "deprecated": false, diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index a403c4063b8dd..48022a5f10927 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; @@ -21,16 +21,16 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 358 | 0 | 104 | 1 | +| 489 | 1 | 98 | 4 | ## Common +### Classes + + ### Interfaces -### Enums - - ### Consts, variables and types diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 7e24ee03e181a..77b2f3e60023e 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index fe825c9f8e57d..c85ff0bd026e4 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.devdocs.json b/api_docs/kbn_core_saved_objects_utils_server.devdocs.json index a3e686f6bdabc..6410d1a27e5ea 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_utils_server.devdocs.json @@ -18,1503 +18,6 @@ }, "common": { "classes": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers", - "type": "Class", - "tags": [], - "label": "SavedObjectsErrorHelpers", - "description": [], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isSavedObjectsClientError", - "type": "Function", - "tags": [], - "label": "isSavedObjectsClientError", - "description": [], - "signature": [ - "(error: any) => error is ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isSavedObjectsClientError.$1", - "type": "Any", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "any" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateBadRequestError", - "type": "Function", - "tags": [], - "label": "decorateBadRequestError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateBadRequestError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateBadRequestError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createBadRequestError", - "type": "Function", - "tags": [], - "label": "createBadRequestError", - "description": [], - "signature": [ - "(reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createBadRequestError.$1", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createUnsupportedTypeError", - "type": "Function", - "tags": [], - "label": "createUnsupportedTypeError", - "description": [], - "signature": [ - "(type: string) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createUnsupportedTypeError.$1", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isBadRequestError", - "type": "Function", - "tags": [], - "label": "isBadRequestError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isBadRequestError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createInvalidVersionError", - "type": "Function", - "tags": [], - "label": "createInvalidVersionError", - "description": [], - "signature": [ - "(versionInput?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createInvalidVersionError.$1", - "type": "string", - "tags": [], - "label": "versionInput", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isInvalidVersionError", - "type": "Function", - "tags": [], - "label": "isInvalidVersionError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isInvalidVersionError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateNotAuthorizedError", - "type": "Function", - "tags": [], - "label": "decorateNotAuthorizedError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateNotAuthorizedError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateNotAuthorizedError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isNotAuthorizedError", - "type": "Function", - "tags": [], - "label": "isNotAuthorizedError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isNotAuthorizedError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateForbiddenError", - "type": "Function", - "tags": [], - "label": "decorateForbiddenError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateForbiddenError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateForbiddenError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isForbiddenError", - "type": "Function", - "tags": [], - "label": "isForbiddenError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isForbiddenError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError", - "type": "Function", - "tags": [], - "label": "decorateRequestEntityTooLargeError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateRequestEntityTooLargeError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isRequestEntityTooLargeError", - "type": "Function", - "tags": [], - "label": "isRequestEntityTooLargeError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isRequestEntityTooLargeError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundError", - "type": "Function", - "tags": [], - "label": "createGenericNotFoundError", - "description": [], - "signature": [ - "(type?: string | null, id?: string | null) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundError.$1", - "type": "CompoundType", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | null" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundError.$2", - "type": "CompoundType", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string | null" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createIndexAliasNotFoundError", - "type": "Function", - "tags": [], - "label": "createIndexAliasNotFoundError", - "description": [], - "signature": [ - "(alias: string) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createIndexAliasNotFoundError.$1", - "type": "string", - "tags": [], - "label": "alias", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError", - "type": "Function", - "tags": [], - "label": "decorateIndexAliasNotFoundError", - "description": [], - "signature": [ - "(error: Error, alias: string) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateIndexAliasNotFoundError.$2", - "type": "string", - "tags": [], - "label": "alias", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isNotFoundError", - "type": "Function", - "tags": [], - "label": "isNotFoundError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isNotFoundError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateConflictError", - "type": "Function", - "tags": [], - "label": "decorateConflictError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateConflictError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateConflictError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createConflictError", - "type": "Function", - "tags": [], - "label": "createConflictError", - "description": [], - "signature": [ - "(type: string, id: string, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createConflictError.$1", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createConflictError.$2", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createConflictError.$3", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isConflictError", - "type": "Function", - "tags": [], - "label": "isConflictError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isConflictError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateTooManyRequestsError", - "type": "Function", - "tags": [], - "label": "decorateTooManyRequestsError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateTooManyRequestsError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateTooManyRequestsError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createTooManyRequestsError", - "type": "Function", - "tags": [], - "label": "createTooManyRequestsError", - "description": [], - "signature": [ - "(type: string, id: string) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createTooManyRequestsError.$1", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createTooManyRequestsError.$2", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isTooManyRequestsError", - "type": "Function", - "tags": [], - "label": "isTooManyRequestsError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isTooManyRequestsError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError", - "type": "Function", - "tags": [], - "label": "decorateEsCannotExecuteScriptError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateEsCannotExecuteScriptError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isEsCannotExecuteScriptError", - "type": "Function", - "tags": [], - "label": "isEsCannotExecuteScriptError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isEsCannotExecuteScriptError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateEsUnavailableError", - "type": "Function", - "tags": [], - "label": "decorateEsUnavailableError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateEsUnavailableError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateEsUnavailableError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isEsUnavailableError", - "type": "Function", - "tags": [], - "label": "isEsUnavailableError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isEsUnavailableError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateGeneralError", - "type": "Function", - "tags": [], - "label": "decorateGeneralError", - "description": [], - "signature": [ - "(error: Error, reason?: string | undefined) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateGeneralError.$1", - "type": "Object", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.decorateGeneralError.$2", - "type": "string", - "tags": [], - "label": "reason", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isGeneralError", - "type": "Function", - "tags": [], - "label": "isGeneralError", - "description": [], - "signature": [ - "(error: Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - ") => boolean" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.isGeneralError.$1", - "type": "CompoundType", - "tags": [], - "label": "error", - "description": [], - "signature": [ - "Error | ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError", - "type": "Function", - "tags": [], - "label": "createGenericNotFoundEsUnavailableError", - "description": [], - "signature": [ - "(type?: string | null, id?: string | null) => ", - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - } - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError.$1", - "type": "CompoundType", - "tags": [], - "label": "type", - "description": [], - "signature": [ - "string | null" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - }, - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.SavedObjectsErrorHelpers.createGenericNotFoundEsUnavailableError.$2", - "type": "CompoundType", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string | null" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/core-saved-objects-utils-server", "id": "def-common.SavedObjectsUtils", @@ -2047,48 +550,7 @@ "initialIsOpen": false } ], - "interfaces": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.DecoratedError", - "type": "Interface", - "tags": [], - "label": "DecoratedError", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-utils-server", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsUtilsServerPluginApi", - "section": "def-common.DecoratedError", - "text": "DecoratedError" - }, - " extends ", - "Boom", - "" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/core-saved-objects-utils-server", - "id": "def-common.DecoratedError.code", - "type": "string", - "tags": [], - "label": "[code]", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_error_helpers.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - } - ], + "interfaces": [], "enums": [], "misc": [ { diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index 3ff41c8bb431e..759fcc31b19dc 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_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 | |-------------------|-----------|------------------------|-----------------| -| 108 | 1 | 84 | 0 | +| 30 | 0 | 6 | 0 | ## Common @@ -31,9 +31,6 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core ### Classes -### Interfaces - - ### Consts, variables and types diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 31cfab5c61d04..f766dbf91f4ed 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index b601a33e53576..a32de019c776b 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index e8126372b6ace..1438b8b6b16db 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 3fedc80803bc0..f033238f49811 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 5dae78dad9483..61067f029fc72 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 1e3561cbfd7f9..0fc6c866a1a8a 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index ff87fa48218c5..2120cc7ec4efc 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 56b03e898f379..9458a3945d4c7 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 7e7e78cd9f7e9..65aab7d20315a 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 9ce8895db1951..310aa92948b17 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index c30df7720fbbf..035f88057b053 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 30b4a093dbe76..d06104243dc19 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index ad298a9ba263b..5fbcd1be9692a 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 4e536bf592e9b..a83b90b2748f7 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 0f4dc1002f2d9..5aba39e5b836e 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 6e89a84a54937..c5c4cf61ca2a6 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index b7ab28b96d25a..ca30857413d36 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 31c4ed741972c..9c9484b7afee9 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index d4acf2400ece7..c01ad7d6eb83b 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index f92df43e8d060..e2a042fd22137 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index f5e20259805dc..6c65a8c267647 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 84c6e45dd8e40..1ed33d3489b68 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 0957d6890a06c..97cf81dd6cf19 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 1d7e886a05c31..414ef07a41bb8 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 26510907ea7e4..93230a78f1ae1 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 45d6b5dcf39a8..775e7af2567b6 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 67e6b158633e8..9a50676c8844e 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 551962ac51eab..c968e5a148c34 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 44a4be1a6b8d3..38771fed3d0cb 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 4b4596e6fb78a..13e93db276218 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 598d9411b5614..8b774dbe02cd8 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 512d5d8a00cfb..b4f574a854eea 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 16ca3f10a1103..208971474ba68 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 8b7c5bf0f6f5d..9560edf50e575 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 82f63dd8b51b6..cbcddb5c26572 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 94d5063295087..2379c28b2290d 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 1e3e074184a47..ae60f75644b93 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 3138075a95e99..195d55a5fefcd 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 73a2e26b3b259..cfd05a2910055 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index c9b50f5ebd279..d96ebe475c3a8 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 28fb0ac8704ab..85e37890b4f81 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 6663eda11a6e0..f1e05ee91a52a 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 77c8716abd0de..46f49d6f3a440 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index e230c19572827..7b1c5c2782229 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 324050b0ad6c4..99459b2724e4c 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index d6abcaa9d690e..b62d5eae0ceac 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 302cc3e9b10ee..3046a4c6ca139 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 903fb558a7042..d076ef6209022 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index dd3c794d44669..d18719c1a1c52 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 632c05aeb57ab..c7caf7e1381c4 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 67f0e587885f6..b3bd82323024e 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 71c0accd6e1cb..46a7f6f0fd6d9 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 45fd4e6ef9d17..49d48495b2a09 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index 7e12ce50a74df..7de7fb437791c 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index a3896f6a0b3d3..8408f5eaecc80 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 51d7c684fc6ec..822131c4358c6 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index db7487a91573f..80860d0973c1e 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 81b632adb7ac5..42bf5e30df173 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 1f66c3d7549d6..208d175598ba2 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 5d44834a937fe..ca4312aa608d6 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index c60069347e57c..2355effaa4338 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 3bb12ce02adc0..db40623912faa 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index fecca34e01c36..206189b5817ea 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index bbb17c8ccd11d..d0c35339b2859 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 52f523d494559..0bc1e9c2a083f 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index add9664a67bce..67d80d955891f 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 967b937409f7b..94823871e3f66 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 04862f7979fdb..5155e41df91ac 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index f6e6ad8257019..044d9fe5c5d5d 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 40d30b11a31ee..7bc8836029023 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 4274ea4d6eff2..d9dfb7bbdc992 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index fae81f825444b..c2e5309373671 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 4e000300ae661..1b16e64a1b48f 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 1d63be1cdd0e9..510c572fe1d48 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index a13f026414f05..0d531d2730049 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 536cb804c5e12..ff84137fdd118 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 7306be2c9d762..c9639f1afba8c 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 72b827c703e8f..33f62f4a23306 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 7b9e100531ed2..9bc705ebc0cf2 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index be7721b10a4c0..57c232ed410bc 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 9420a1be31c96..6c4b9093948ad 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 9f593e23c763f..eee4f24cb91f0 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index d7407bdc18e74..2c07170eaf526 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index f8d695112f16c..36a3dcdd58e81 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index ee76efa7a85b2..d636dc99094dc 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index 65c7c9b5799d5..2a373c86eb76f 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 2e93d17dfb69f..2b12d25b3fede 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index fb545e779afc8..ac42537054b41 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index bad67ea825f90..a4afd817ac65f 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 38dc0b06dc377..020034226e817 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index a60c7c538c232..5fa83b8867d0b 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 442c7e227c39c..20c071e13c510 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 096b617ece933..fd52fef164cba 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 048815782437e..f38890ce0c0b0 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 193abc5239773..524ad7930f21d 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index a1651573d7b80..dc368dc60e47b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 0bc66bdfebaa1..ef2c040d9d90c 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 78896922f34c2..62474c089a86e 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index fec6980f5c24d..6377a0b56da96 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 790dd555f268b..6561acaa7e1e3 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index dc6be4b9aaa00..6eee665ab2421 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 5d75d41201329..d917da592a381 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 2259f81115eeb..9e377e1046d91 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 0f7570057526e..e3c1636d2583e 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 2193376962a09..aa69ead0f2a80 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index f056ee38cc2c2..2bf1023538138 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index f9b2fc6da7a37..8052a0c477ce2 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index db567980e7dc8..7ec8ecebf808e 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index f033970b0554f..748523e2b6dec 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 04a2752d2792f..a54eda9059921 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 5eae425140fa5..b53d63937bad5 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index f7d3c6b0d097c..90aad6717ab26 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 12e9b299ff2f7..448f01ef24cb1 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index a10976f8672ff..c112d796888b7 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index bce8fbd34e294..e0775860046a7 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index f38c9456cf908..184df4d0dfb4a 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 50e7d344eee9e..cb15f3227f596 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 38f0159f3dc25..2eec94a8e6cf0 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 6fc9a3c4a0471..1e37bcb30956a 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 25b29ad17b594..9d4ae20f6a40d 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 262d110956e28..89aeea6934702 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index bfcf855921336..63ac5a36f3d39 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index 5509046249d4e..334c1cd62f96d 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index f9a1b148ac22a..c4db69beafd2c 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 4616cc85b649d..2fae876b53379 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 401a9c4d892a2..128ea8e8df9ef 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 331e2a8219f99..8f7b75ddf4c75 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 3e3c22e8cea8c..c5b2c4f5789fa 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index c46f162719f5c..da29f12b22595 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 240b44cc647f8..a7e4c290cbeda 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index 2052b445c1f88..c84b324f13ed5 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index a4a60812a9aae..623f8e5f6072f 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 7c10100349b36..237333dead873 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index a12b99eceae7a..3e9711497a8a2 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 38683a38e5dcf..774024740a0a1 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 72ec5b900df8d..01d3b6085c13e 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 3f1f82faa3d70..5a1d052961b55 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index e806085500d83..a7277b6729192 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 781695cd7c150..804f45a24e334 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 547f8c5924326..ecc7eda56ae9f 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 4bee6b82d0520..26fc8e4dd82b4 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 27dd36948e16e..2bc966fafaaea 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index d5db8841a23e2..8d66ebbd7ab5d 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 3e2c296064b71..4a63da3314288 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index c648824268cd7..4437e5bd930fb 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.devdocs.json b/api_docs/kbn_slo_schema.devdocs.json index b62b90bafb2a2..a368fed9d859c 100644 --- a/api_docs/kbn_slo_schema.devdocs.json +++ b/api_docs/kbn_slo_schema.devdocs.json @@ -390,7 +390,7 @@ "label": "CreateSLOInput", "description": [], "signature": [ - "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { settings?: { timestampField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }" + "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { settings?: { timestampField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -405,7 +405,7 @@ "label": "CreateSLOParams", "description": [], "signature": [ - "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: ", + "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -520,7 +520,7 @@ "label": "FindSLOResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }" + "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -535,7 +535,7 @@ "label": "GetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -580,7 +580,7 @@ "label": "SLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -595,7 +595,7 @@ "label": "SLOWithSummaryResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -610,7 +610,7 @@ "label": "UpdateSLOInput", "description": [], "signature": [ - "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; } | undefined; timeWindow?: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { timestampField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }" + "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; } | undefined; timeWindow?: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { timestampField?: string | undefined; syncDelay?: string | undefined; frequency?: string | undefined; } | undefined; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -625,7 +625,7 @@ "label": "UpdateSLOParams", "description": [], "signature": [ - "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; } | undefined; timeWindow?: { duration: ", + "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; } | undefined; timeWindow?: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -680,7 +680,7 @@ "label": "UpdateSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }" ], "path": "packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -748,12 +748,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>" ], "path": "packages/kbn-slo-schema/src/schema/indicators.ts", @@ -832,6 +834,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>" ], "path": "packages/kbn-slo-schema/src/schema/indicators.ts", @@ -956,12 +960,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -1010,6 +1016,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -1390,12 +1398,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -1444,6 +1454,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -1652,12 +1664,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -1706,6 +1720,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -1954,12 +1970,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2008,6 +2026,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2334,12 +2354,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2388,6 +2410,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2548,12 +2572,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2602,6 +2628,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2764,12 +2792,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -2818,6 +2848,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -3006,12 +3038,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -3060,6 +3094,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -3374,12 +3410,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -3428,6 +3466,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -3580,12 +3620,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -3634,6 +3676,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 11cd045fee767..506bf83435e55 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index c04881a836b53..8cfc9af4765fb 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index e6089dbfdf438..e7b44a0595f2b 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 3bfd24437a1e9..639033423f782 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index ac8b2708f76db..71fa66aa5cd72 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index ff5cf2064900b..f34f4e79b477c 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 48967ec72de97..7ad93b1efc641 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 7913dcbabe6d7..547a3531cc3ca 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 707bef04c9a84..4c08f55f95fac 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 7cf2d95fc8bd5..d53ba028587f8 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index bdbdf35693958..7cf648110f7bb 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 7ba131992518b..af6e4c619a775 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index c5dbd2a3b3835..c9c179c190b3d 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 86da4a18f64dd..86665a71a6590 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 7eaf205e1f08e..cb914af306315 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 6b7cd18100ac9..92ec8131e2e49 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index 4effbffc1ded8..73effc933ae1c 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 3417f1588657e..8151013e56478 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index b70a81183e7a5..32dc2d89e7ebb 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 90289f5f2ca61..526c731c0dd80 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 8648f681c07a4..537a58309875b 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 910974c5da2df..2ed468ecd418c 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1364,6 +1364,18 @@ "plugin": "apm", "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx" }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx" + }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx" + }, + { + "plugin": "enterpriseSearch", + "path": "x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx" + }, { "plugin": "indexLifecycleManagement", "path": "x-pack/plugins/index_lifecycle_management/public/shared_imports.ts" diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 42968ad83d606..34e2f7e1ee6d5 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 9df1daccf5420..73999ea92082c 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 6026a3aa815bf..a60441eb5d287 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index b4ed32e8be49a..2c8facb6f4740 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -484,6 +484,20 @@ ], "returnComment": [] }, + { + "parentPluginId": "lens", + "id": "def-public.Embeddable.badgeDomNode", + "type": "Object", + "tags": [], + "label": "badgeDomNode", + "description": [], + "signature": [ + "HTMLDivElement | undefined" + ], + "path": "x-pack/plugins/lens/public/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "lens", "id": "def-public.Embeddable.handleEvent", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index b7134b8874f7d..3292575c90c53 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.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 | |-------------------|-----------|------------------------|-----------------| -| 691 | 0 | 596 | 52 | +| 692 | 0 | 597 | 52 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index fa60cf1aa65fd..0a02ad7af5723 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 5af1695421960..29ec9594da556 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 10d0a63bbd959..1b015c35b488b 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 6909a97f3eb31..fe9acfdd27fde 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index e1e2156307051..98da0947c88ee 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 330794cfc8b5b..6ebdfb4285516 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index d7dae44b59d74..ff1f9c17c2136 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index a934616ae795e..d670b1b24d7f6 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 891b45992f8d0..a09fb315e1d15 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 81e6dcaf2ec5f..979e298e20962 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 69eb4dd1c5b8f..2580638a9ee21 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 29577ff1a56ab..bb76a13d3448b 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 51c41f0c06154..7f5e095373c87 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-15 +date: 2023-02-16 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 6a5be5c8d32e6..777c50843ad4f 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -9849,12 +9849,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -9903,6 +9905,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -10007,7 +10011,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }, ", + ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }, ", { "pluginId": "observability", "scope": "server", @@ -10037,7 +10041,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }, ", + ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }, ", { "pluginId": "observability", "scope": "server", @@ -10085,7 +10089,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - ", { page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }, ", + ", { page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }, ", { "pluginId": "observability", "scope": "server", @@ -10267,12 +10271,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -10321,6 +10327,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -10563,12 +10571,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -10617,6 +10627,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -10721,7 +10733,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }, ", + ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; }, ", { "pluginId": "observability", "scope": "server", @@ -10751,7 +10763,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }, ", + ", { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; }, ", { "pluginId": "observability", "scope": "server", @@ -10799,7 +10811,7 @@ "section": "def-server.ObservabilityRouteHandlerResources", "text": "ObservabilityRouteHandlerResources" }, - ", { page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; 'threshold.us': number; } & { index?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }, ", + ", { page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; } & { index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; } & { goodStatusCodes?: (\"2xx\" | \"3xx\" | \"4xx\" | \"5xx\")[] | undefined; index?: string | undefined; filter?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; filter: string; good: string; total: string; }; }; timeWindow: { duration: string; isRolling: boolean; } | { duration: string; calendar: { startTime: string; }; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; revision: number; settings: { timestampField: string; syncDelay: string; frequency: string; }; enabled: boolean; createdAt: string; updatedAt: string; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; })[]; }, ", { "pluginId": "observability", "scope": "server", @@ -10981,12 +10993,14 @@ "LiteralC", "<\"*\">, ", "StringC", - "]>; 'threshold.us': ", + "]>; threshold: ", "NumberC", "; }>, ", "PartialC", "<{ index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", @@ -11035,6 +11049,8 @@ "LiteralC", "<\"5xx\">]>>; index: ", "StringC", + "; filter: ", + "StringC", "; }>]>; }>, ", "TypeC", "<{ type: ", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 245841d7bb597..7a7ffa9c14ca1 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 4d3705ef44583..138fd3b29816f 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 57e9346a8b050..4c5a4a5c99f3d 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 67495 | 514 | 58491 | 1228 | +| 67630 | 515 | 58461 | 1230 | ## Plugin Directory @@ -30,9 +30,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 256 | 8 | 251 | 24 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 36 | 1 | 32 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 12 | 0 | 1 | 2 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 488 | 1 | 477 | 39 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 489 | 1 | 478 | 39 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 42 | 0 | 42 | 65 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 89 | 1 | 74 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 87 | 0 | 71 | 28 | @@ -47,7 +47,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | cloudLinks | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 17 | 0 | 2 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 13 | 0 | 13 | 1 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 25 | 0 | 25 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 42 | 0 | 42 | 3 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 270 | 0 | 266 | 9 | | crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | @@ -92,9 +92,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 1 | 2 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1077 | 3 | 972 | 26 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 68 | 0 | 14 | 5 | -| globalSearchBar | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | -| globalSearchProviders | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 68 | 0 | 14 | 5 | +| globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | +| globalSearchProviders | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | | graph | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 0 | 0 | 0 | 0 | | grokdebugger | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/platform-onboarding](https://github.com/orgs/elastic/teams/platform-onboarding) | Guided onboarding framework | 56 | 0 | 55 | 0 | @@ -112,7 +112,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-app-services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 609 | 3 | 416 | 9 | | | [@elastic/awp-viz](https://github.com/orgs/elastic/teams/awp-viz) | - | 3 | 0 | 3 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 691 | 0 | 596 | 52 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 692 | 0 | 597 | 52 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -151,7 +151,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/awp-viz](https://github.com/orgs/elastic/teams/awp-viz) | - | 7 | 0 | 7 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 118 | 0 | 59 | 10 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 22 | 1 | 22 | 1 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 261 | 0 | 65 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 253 | 0 | 65 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 12 | 0 | 12 | 2 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 4 | 0 | 4 | 0 | | synthetics | [@elastic/uptime](https://github.com/orgs/elastic/teams/uptime) | This plugin visualizes data from Synthetics and Heartbeat, and integrates with other Observability solutions. | 0 | 0 | 0 | 0 | @@ -213,7 +213,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 10 | 0 | 10 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 19 | 0 | 17 | 0 | -| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 20 | 0 | 15 | 3 | +| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 57 | 1 | 42 | 2 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 4 | 0 | 4 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 76 | 0 | 76 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 2 | 0 | @@ -249,8 +249,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 16 | 0 | 7 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 120 | 0 | 46 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 3 | 0 | 3 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 120 | 0 | 46 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 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) | - | 5 | 0 | 5 | 0 | @@ -343,23 +343,23 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 1 | 22 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 107 | 1 | 0 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 313 | 1 | 0 | 1 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 334 | 1 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 75 | 0 | 54 | 1 | | | [@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) | - | 37 | 0 | 31 | 6 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 46 | 0 | 35 | 6 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 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 | | | [@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) | - | 67 | 0 | 39 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 71 | 0 | 39 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 25 | 0 | 23 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 112 | 0 | 79 | 45 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 12 | 0 | 12 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 358 | 0 | 104 | 1 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 489 | 1 | 98 | 4 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 69 | 0 | 69 | 4 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 14 | 0 | 14 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 108 | 1 | 84 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 30 | 0 | 6 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 12 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 18 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 20 | 0 | 3 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 0e38c378bd105..f9b865ff8cbcf 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index f8b8b1ed2dada..e6001e7201715 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index a813156f67670..1548c3dfb2d53 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 6fedb5279e34f..d0a51aedf8ce5 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 2ce325cb45862..a21729e4639b7 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 7ef47eb4278e8..21a9aee8492cd 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index d3b73caf793a2..4d44041e9be5c 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 348d5b6fe2b8a..29d5b2a6ec11d 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index eef9a6675e682..8917557f4c7b0 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 809fc0aa6d21b..77a441c39dc96 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index f95b526b98dcb..a2340928add9e 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index e37fb538e907c..70ef0ecfd6823 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 0a843385af1dd..c2ebc14e8045f 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 65f7964263555..6deb948aaf417 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 4a5347bf950f7..f8dd9e4134c52 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 76a4ae3f2bd0e..481609084643f 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 8eefdbcd9d4df..7409186cd5c15 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 6b756882dee65..3ebbcad1a0d98 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index c5947e97e0789..f4cac153343a4 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index c2793b19d3ad7..9f39e867b3ac6 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.devdocs.json b/api_docs/spaces.devdocs.json index 43d132ba17352..97a2459425507 100644 --- a/api_docs/spaces.devdocs.json +++ b/api_docs/spaces.devdocs.json @@ -356,9 +356,9 @@ "signature": [ "(aliases: ", { - "pluginId": "spaces", + "pluginId": "@kbn/core-saved-objects-common", "scope": "common", - "docId": "kibSpacesPluginApi", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", "section": "def-common.LegacyUrlAliasTarget", "text": "LegacyUrlAliasTarget" }, @@ -377,9 +377,9 @@ "description": [], "signature": [ { - "pluginId": "spaces", + "pluginId": "@kbn/core-saved-objects-common", "scope": "common", - "docId": "kibSpacesPluginApi", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", "section": "def-common.LegacyUrlAliasTarget", "text": "LegacyUrlAliasTarget" }, @@ -3469,9 +3469,9 @@ "signature": [ "(aliases: ", { - "pluginId": "spaces", + "pluginId": "@kbn/core-saved-objects-common", "scope": "common", - "docId": "kibSpacesPluginApi", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", "section": "def-common.LegacyUrlAliasTarget", "text": "LegacyUrlAliasTarget" }, @@ -3492,9 +3492,9 @@ ], "signature": [ { - "pluginId": "spaces", + "pluginId": "@kbn/core-saved-objects-common", "scope": "common", - "docId": "kibSpacesPluginApi", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", "section": "def-common.LegacyUrlAliasTarget", "text": "LegacyUrlAliasTarget" }, @@ -3511,61 +3511,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "spaces", - "id": "def-server.LegacyUrlAliasTarget", - "type": "Interface", - "tags": [], - "label": "LegacyUrlAliasTarget", - "description": [ - "\nClient interface for interacting with legacy URL aliases." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "spaces", - "id": "def-server.LegacyUrlAliasTarget.targetSpace", - "type": "string", - "tags": [], - "label": "targetSpace", - "description": [ - "\nThe namespace that the object existed in when it was converted." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "spaces", - "id": "def-server.LegacyUrlAliasTarget.targetType", - "type": "string", - "tags": [], - "label": "targetType", - "description": [ - "\nThe type of the object when it was converted." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "spaces", - "id": "def-server.LegacyUrlAliasTarget.sourceId", - "type": "string", - "tags": [], - "label": "sourceId", - "description": [ - "\nThe original ID of the object, before it was converted." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "spaces", "id": "def-server.Space", @@ -4766,61 +4711,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "spaces", - "id": "def-common.LegacyUrlAliasTarget", - "type": "Interface", - "tags": [], - "label": "LegacyUrlAliasTarget", - "description": [ - "\nClient interface for interacting with legacy URL aliases." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "spaces", - "id": "def-common.LegacyUrlAliasTarget.targetSpace", - "type": "string", - "tags": [], - "label": "targetSpace", - "description": [ - "\nThe namespace that the object existed in when it was converted." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "spaces", - "id": "def-common.LegacyUrlAliasTarget.targetType", - "type": "string", - "tags": [], - "label": "targetType", - "description": [ - "\nThe type of the object when it was converted." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "spaces", - "id": "def-common.LegacyUrlAliasTarget.sourceId", - "type": "string", - "tags": [], - "label": "sourceId", - "description": [ - "\nThe original ID of the object, before it was converted." - ], - "path": "x-pack/plugins/spaces/common/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "spaces", "id": "def-common.Space", diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index a69d76fcf15de..899655b26377c 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 261 | 0 | 65 | 0 | +| 253 | 0 | 65 | 0 | ## Client diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 7944569d372c3..6be96495a6d33 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 6ebcc780605e2..fa6fed03d9ff2 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-15 +date: 2023-02-16 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 f6d5542b2d7c5..21b5f8640f866 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-15 +date: 2023-02-16 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 b565ff66d2396..690bf19a1c029 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 40dc09f5d1e9f..bb6944c6d589a 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index f0955006786af..d8fbe62929d29 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 4feb6ed0e54b7..5400f5c7eaeb1 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 0d553ba768315..4d86b62d3caca 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index b0aaada6656fd..9ccf2cc5d0c7c 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 247ba5c81d7fd..6cede0d49e2ec 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-15 +date: 2023-02-16 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 f0e3908b24feb..06cfebed3d937 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index bb5cd7e7f8c04..95084fa2aaccb 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 6065a7e6bc132..ce00787df3417 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index 4304991da00a1..c3cd14977ac0b 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 927eede1455cc..6d456394e388c 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 80a68f5145aa8..313872400971c 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 1f79ae059c7c6..30b971c6f7ef3 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 310b3f35ddeeb..12c2643b3c707 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index e03b9d29c1012..6fd51629aa377 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 15a2cae052a90..2a714d235182c 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 0e0422879a18d..d71de853a8536 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index a7a7371efc2c3..5e59b27ff0f42 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index dae2ee8b13a9a..1792dfa1faa54 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index b6dfb51ead1f5..e74951ff16de7 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 481bf669e83cf..4c9bbedccb11a 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index b7df3ec941be0..964b6dda69e49 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index dfef62440b354..b4619e59ea04b 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 59e4e6fef1e0d..2e13178b31acb 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 3a8944b4ab108..7dd061e5875ba 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 8837978d02e7f..cd9a8760c9197 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 44d7956893867..b30d9665b309e 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-15 +date: 2023-02-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From a7293f62b59508a4a2fa89fa04c278b70de5901f Mon Sep 17 00:00:00 2001 From: Maja Grubic Date: Thu, 16 Feb 2023 08:13:42 +0100 Subject: [PATCH 055/210] [Custom Branding] Add custom branding settings to Global settings (#150080) ## Summary This PR registers custom branding settings from the `custom_branding` plugin. Once registered, these settings can be viewed under "Global settings". UI changes: Screenshot 2023-02-06 at 19 59 19 I also removed the client-side version of the `custom_branding` plugin, as it's not needed. With this change, it became easier to test custom branding, so I made a few changes where logo was not showing properly or image size was wrong or test subjects were missing. I am working with @gchaps on the exact wording, so that might change. ### Checklist Delete any items that are not applicable to this PR. - [X] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [X] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [X] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [X] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [X] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) ~- [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~ - [X] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [X] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> --- .buildkite/ftr_configs.yml | 1 + .../src/ui/app_container.tsx | 1 + .../loading_indicator.test.tsx.snap | 1 + .../src/ui/header/header_logo.tsx | 7 +- .../src/ui/loading_indicator.tsx | 1 + .../src/rendering_service.tsx | 1 + packages/kbn-optimizer/limits.yml | 1 - test/functional/page_objects/settings_page.ts | 13 ++ x-pack/plugins/custom_branding/kibana.jsonc | 2 +- .../custom_branding/public/application.tsx | 23 --- .../custom_branding/public/components/app.tsx | 20 --- .../plugins/custom_branding/public/index.ts | 0 .../plugins/custom_branding/public/plugin.ts | 0 .../plugins/custom_branding/public/types.ts | 0 .../plugins/custom_branding/server/plugin.ts | 10 +- .../custom_branding/server/ui_settings.ts | 145 ++++++++++++++++++ x-pack/plugins/custom_branding/tsconfig.json | 3 + .../__snapshots__/login_page.test.tsx.snap | 6 + .../authentication/login/login_page.tsx | 6 +- x-pack/test/custom_branding/config.ts | 42 +++++ .../custom_branding/ftr_provider_context.ts | 13 ++ .../test/custom_branding/tests/acme_logo.png | Bin 0 -> 3243 bytes .../test/custom_branding/tests/acme_text.png | Bin 0 -> 2068 bytes x-pack/test/custom_branding/tests/index.ts | 14 ++ x-pack/test/custom_branding/tests/settings.ts | 100 ++++++++++++ 25 files changed, 358 insertions(+), 52 deletions(-) delete mode 100755 x-pack/plugins/custom_branding/public/application.tsx delete mode 100755 x-pack/plugins/custom_branding/public/components/app.tsx mode change 100755 => 100644 x-pack/plugins/custom_branding/public/index.ts mode change 100755 => 100644 x-pack/plugins/custom_branding/public/plugin.ts mode change 100755 => 100644 x-pack/plugins/custom_branding/public/types.ts create mode 100644 x-pack/plugins/custom_branding/server/ui_settings.ts create mode 100644 x-pack/test/custom_branding/config.ts create mode 100644 x-pack/test/custom_branding/ftr_provider_context.ts create mode 100644 x-pack/test/custom_branding/tests/acme_logo.png create mode 100644 x-pack/test/custom_branding/tests/acme_text.png create mode 100644 x-pack/test/custom_branding/tests/index.ts create mode 100644 x-pack/test/custom_branding/tests/settings.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 62a42c4d4335e..4adb920c81e43 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -359,3 +359,4 @@ enabled: - x-pack/performance/journeys/ecommerce_dashboard_saved_search_only.ts - x-pack/performance/journeys/ecommerce_dashboard_tsvb_gauge_only.ts - x-pack/performance/journeys/dashboard_listing_page.ts + - x-pack/test/custom_branding/config.ts diff --git a/packages/core/application/core-application-browser-internal/src/ui/app_container.tsx b/packages/core/application/core-application-browser-internal/src/ui/app_container.tsx index 11899a938da9f..997185e05119c 100644 --- a/packages/core/application/core-application-browser-internal/src/ui/app_container.tsx +++ b/packages/core/application/core-application-browser-internal/src/ui/app_container.tsx @@ -129,6 +129,7 @@ const AppLoadingPlaceholder: FC<{ showPlainSpinner: boolean }> = ({ showPlainSpi return ( diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx index 8b98e52f61c42..36a6663bf03f7 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.tsx @@ -104,7 +104,12 @@ export function HeaderLogo({ href, navigateToApp, loadingCount$, ...observables > {customizedLogo ? ( - custom mark + custom mark ) : ( )} diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx index 13084f9500e58..8e3cae33ceb84 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx @@ -71,6 +71,7 @@ export class LoadingIndicator extends React.Component { - ReactDOM.render( - , - element - ); - - return () => ReactDOM.unmountComponentAtNode(element); -}; diff --git a/x-pack/plugins/custom_branding/public/components/app.tsx b/x-pack/plugins/custom_branding/public/components/app.tsx deleted file mode 100755 index 212584dc5ff38..0000000000000 --- a/x-pack/plugins/custom_branding/public/components/app.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; - -import { CoreStart } from '@kbn/core/public'; - -interface CustomBrandingAppDeps { - basename: string; - notifications: CoreStart['notifications']; - http: CoreStart['http']; -} - -export const CustomBrandingApp = (props: CustomBrandingAppDeps) => { - return
Hello
; -}; diff --git a/x-pack/plugins/custom_branding/public/index.ts b/x-pack/plugins/custom_branding/public/index.ts old mode 100755 new mode 100644 diff --git a/x-pack/plugins/custom_branding/public/plugin.ts b/x-pack/plugins/custom_branding/public/plugin.ts old mode 100755 new mode 100644 diff --git a/x-pack/plugins/custom_branding/public/types.ts b/x-pack/plugins/custom_branding/public/types.ts old mode 100755 new mode 100644 diff --git a/x-pack/plugins/custom_branding/server/plugin.ts b/x-pack/plugins/custom_branding/server/plugin.ts index 1c6039ace92df..958289bd9d14d 100755 --- a/x-pack/plugins/custom_branding/server/plugin.ts +++ b/x-pack/plugins/custom_branding/server/plugin.ts @@ -20,9 +20,8 @@ import { License } from '@kbn/license-api-guard-plugin/server'; import { CustomBranding } from '@kbn/core-custom-branding-common'; import { Subscription } from 'rxjs'; import { PLUGIN } from '../common/constants'; -import type { CustomBrandingRequestHandlerContext } from './types'; import { Dependencies } from './types'; -import { registerRoutes } from './routes'; +import { registerUiSettings } from './ui_settings'; const settingsKeys: Array = [ 'logo', @@ -49,8 +48,8 @@ export class CustomBrandingPlugin implements Plugin { pluginName: PLUGIN.getI18nName(i18n), logger: this.logger, }); - const router = core.http.createRouter(); - registerRoutes(router); + + registerUiSettings(core); const fetchFn = async ( request: KibanaRequest, @@ -95,8 +94,9 @@ export class CustomBrandingPlugin implements Plugin { const branding: CustomBranding = {}; for (let i = 0; i < settingsKeys!.length; i++) { const key = settingsKeys[i]; - const fullKey = `customBranding:${key}`; + const fullKey = `xpackCustomBranding:${key}`; const value = await uiSettingsClient.get(fullKey); + this.logger.info(`Fetching custom branding key ${fullKey} with value ${value}`); if (value) { branding[key] = value; } diff --git a/x-pack/plugins/custom_branding/server/ui_settings.ts b/x-pack/plugins/custom_branding/server/ui_settings.ts new file mode 100644 index 0000000000000..23eca349e5827 --- /dev/null +++ b/x-pack/plugins/custom_branding/server/ui_settings.ts @@ -0,0 +1,145 @@ +/* + * Copyright 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 { CoreSetup } from '@kbn/core-lifecycle-server'; +import { UiSettingsParams } from '@kbn/core-ui-settings-common'; +import { i18n } from '@kbn/i18n'; +import { schema } from '@kbn/config-schema'; + +export const UI_SETTINGS_CUSTOM_LOGO = 'xpackCustomBranding:logo'; +export const UI_SETTINGS_CUSTOMIZED_LOGO = 'xpackCustomBranding:customizedLogo'; +export const UI_SETTINGS_PAGE_TITLE = 'xpackCustomBranding:pageTitle'; +export const UI_SETTINGS_FAVICON_PNG = 'xpackCustomBranding:faviconPNG'; +export const UI_SETTINGS_FAVICON_SVG = 'xpackCustomBranding:faviconSVG'; +export const PLUGIN_ID = 'Custom Branding'; + +const kbToBase64Length = (kb: number) => Math.floor((kb * 1024 * 8) / 6); +const maxLogoSizeInBase64 = kbToBase64Length(200); +const dataurlRegex = /^data:([a-z]+\/[a-z0-9-+.]+)(;[a-z-]+=[a-z0-9-]+)?(;([a-z0-9]+))?,/; +const imageTypes = ['image/svg+xml', 'image/jpeg', 'image/png', 'image/gif']; + +const isImageData = (str: string) => { + const matches = str.match(dataurlRegex); + + if (!matches) { + return false; + } + + const [, mimetype, , , encoding] = matches; + const imageTypeIndex = imageTypes.indexOf(mimetype); + if (imageTypeIndex < 0 || encoding !== 'base64') { + return false; + } + + return true; +}; +const validateLogoBase64String = (str: string) => { + if (typeof str !== 'string' || !isImageData(str)) { + return i18n.translate('xpack.customBranding.uiSettings.validate.customLogo.badFile', { + defaultMessage: `Sorry, that file will not work. Please try a different image file.`, + }); + } + if (str.length > maxLogoSizeInBase64) { + return i18n.translate('xpack.customBranding.uiSettings.validate.customLogo.tooLarge', { + defaultMessage: `Sorry, that file is too large. The image file must be less than 200 kilobytes.`, + }); + } +}; + +export const ImageSchema = schema.nullable(schema.string({ validate: validateLogoBase64String })); + +const subscriptionLink = ` +
+ ${i18n.translate('xpack.customBranding.settings.subscriptionRequiredLink.text', { + defaultMessage: 'Subscription required.', + })} + + `; +export function registerUiSettings(core: CoreSetup) { + core.uiSettings.registerGlobal({ + [UI_SETTINGS_CUSTOM_LOGO]: { + name: i18n.translate('xpack.customBranding.customLogoLabel', { + defaultMessage: 'Logo icon', + }), + value: null, + description: i18n.translate('xpack.customBranding.customLogoDescription', { + defaultMessage: `Replaces the Elastic logo. Logos look best when they are no larger than 128 x 128 pixels and have a transparent background. {subscriptionLink}`, + values: { subscriptionLink }, + }), + sensitive: true, + type: 'image', + order: 1, + requiresPageReload: true, + schema: ImageSchema, + category: [PLUGIN_ID], + }, + [UI_SETTINGS_CUSTOMIZED_LOGO]: { + name: i18n.translate('xpack.customBranding.customizedLogoLabel', { + defaultMessage: 'Organization name', + }), + value: null, + description: i18n.translate('xpack.customBranding.customizedLogoDescription', { + defaultMessage: `Replaces the Elastic text. Images look best when they are no larger than 200 x 84 pixels and have a transparent background. {subscriptionLink}`, + values: { subscriptionLink }, + }), + sensitive: true, + type: 'image', + order: 2, + requiresPageReload: true, + schema: ImageSchema, + category: [PLUGIN_ID], + }, + [UI_SETTINGS_PAGE_TITLE]: { + name: i18n.translate('xpack.customBranding.pageTitleLabel', { + defaultMessage: 'Page title', + }), + value: null, + description: i18n.translate('xpack.customBranding.pageTitleDescription', { + defaultMessage: `The text that appears on browser tabs. {subscriptionLink}`, + values: { subscriptionLink }, + }), + sensitive: true, + type: 'string', + order: 3, + requiresPageReload: true, + schema: schema.nullable(schema.string()), + category: [PLUGIN_ID], + }, + [UI_SETTINGS_FAVICON_SVG]: { + name: i18n.translate('xpack.customBranding.faviconSVGTitle', { + defaultMessage: 'Favicon (SVG)', + }), + value: null, + description: i18n.translate('xpack.customBranding.faviconSVGDescription', { + defaultMessage: `A link to an icon that will appear on browser tabs. Recommended size is 16 x 16 pixels. {subscriptionLink}`, + values: { subscriptionLink }, + }), + sensitive: true, + type: 'string', + order: 4, + requiresPageReload: true, + schema: schema.nullable(schema.string()), + category: [PLUGIN_ID], + }, + [UI_SETTINGS_FAVICON_PNG]: { + name: i18n.translate('xpack.customBranding.faviconPNGTitle', { + defaultMessage: 'Favicon (PNG)', + }), + value: null, + description: i18n.translate('xpack.customBranding.faviconPNGDescription', { + defaultMessage: `An icon for use in browsers that don’t support svg. {subscriptionLink}`, + values: { subscriptionLink }, + }), + sensitive: true, + type: 'string', + order: 5, + requiresPageReload: true, + schema: schema.nullable(schema.string()), + category: [PLUGIN_ID], + }, + } as Record>); +} diff --git a/x-pack/plugins/custom_branding/tsconfig.json b/x-pack/plugins/custom_branding/tsconfig.json index e4446c82c3bbd..ac146c78954fc 100644 --- a/x-pack/plugins/custom_branding/tsconfig.json +++ b/x-pack/plugins/custom_branding/tsconfig.json @@ -16,6 +16,9 @@ "@kbn/i18n", "@kbn/core-http-request-handler-context-server", "@kbn/core-custom-branding-common", + "@kbn/core-lifecycle-server", + "@kbn/core-ui-settings-common", + "@kbn/config-schema", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/security/public/authentication/login/__snapshots__/login_page.test.tsx.snap b/x-pack/plugins/security/public/authentication/login/__snapshots__/login_page.test.tsx.snap index 3cd7e8a92cb93..f5012047b49a0 100644 --- a/x-pack/plugins/security/public/authentication/login/__snapshots__/login_page.test.tsx.snap +++ b/x-pack/plugins/security/public/authentication/login/__snapshots__/login_page.test.tsx.snap @@ -324,6 +324,7 @@ exports[`LoginPage page renders as expected 1`] = ` /> { ) : ( ); + // custom logo needs to be centered + const logoStyle = customLogo ? { padding: 0 } : {}; return (
- {logo} + + {logo} +

; +export { services, pageObjects }; diff --git a/x-pack/test/custom_branding/tests/acme_logo.png b/x-pack/test/custom_branding/tests/acme_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8ed078b8b614775ab0aebcb4d7731a9b5b242a GIT binary patch literal 3243 zcmeH}_ct2~8^C4rQY>97+4j;~|w8~|)U5IYB$lZ*Ql4=*3T zfZ!iOr-emC#l$5f&zzN#J|`o4UQS*?5u&85q6$@0*MMolwX}6~_4NO|U|?uuY+`D5 z(Hw!aKv|-#tZi)VE@AAk4miA{le5cZS2u#Yho_gfk1z3xpMOALP;kiA(6DRa5!WOC zii*Awb2BzBJ|Qvb@8nyzQ&Q8?GcvR8Was4G&AXRhKq@LO`KR=L*@N2s%vV= zl)A@Ho<6I8-q6_eqWR^kme#iR*Bw+^XBYiVcMqetuYcg};LyAG!^{sOqhsR}lOLz1 zXJ+T-KP@aSeg3k%vby&5+xPX2%^zFaJG(zwd%yM%4v&rrOAGH$NU(WZqY%eTK$imm zz=cI4%y8lo-#Zgx-*EsLKUh)J;BSXYHjv5BQK$8)V9L~R$XCWL{axQ(b>?9j-l=A_ z(4mmDsHC#rLYMqCShcb+VUezCLg{Ac3^^8`BfF7A;FG)fmG+K|#|ZKDt5Nk>w6>yVDF>(}>1DDo>mca3?6G${o?O}zJ%$=Sfjx$I6o6Bf2irIS~bzXF9m7)otqnLm6@c}olc_eq|KWrP$1WcVA?Uy*g4W5D+4T`Y^;ZF}g zM#`bS8qRyZQvdSNyWF4UV#634l*XZ&zgE9KDBv+))k}pLk~3Y&HN^l#Agqg|yiqm3jo;@t({41f^fPunu+>DAZixZ+U$0f;Ns#Q03^GmOPs?8^( z>QI*V06IMP7{Tw0e?Um~QQtfmBBXQe^So>0njwxu9unhX87S@s6Zzm{ zb`WgQtFa?9x@#{XwuFw6RPu*9_-X9Lpi8*3?mjt^3=9h{GAGHLi-jmJ1D!&151aqDx*NR;DxFJmJ!8?M9NKosW{Mp$Mj0lbNp0QZ85?RcmQT918T%zGrm z+on55U;apR;=F?{>>?B6*=947$d|W}S^w5S;nEDs5fi+Z#87|K_aqM%JQy< zu3}WFJJ>?SG?&Lt)mwn1-p~zH)t0m*c>t>s0e@`X0SP z9SB!Y16{?JSDF@SbJLxF>9E0dz|j`*Q9f3=?ws*8rjT-6>y}aqek&8)tSnumO8s6m z6g8qsgK>lj(Wk%I=f>;Lh7Gn=39Uwh?4xV zisbk|_CEH(fJG4V--|_Vbr$Xl)U*!emZJ7XbA?EdZhsR<974y=^GOILk>NVWka*M> z)!6Un;mBj5;MCB9)l)LoDf;EL9lSJG{CG7wj^Bv3Q%l-DcD0RP2XA@t}tB2HK0cSh63&8 zgKD4_PSO8NSaayO8H@i8wPp88xxNLl1b84E$)%6=i1%ts%$qs}K(Q^NCTzdP`vmh& zBM=)|iw)J`u6^&OOQaEZNbD@WrIh9zI3YRxzdYFHdVuEo$Z~ zMjGGxbT14aEk+f_57%%_-KY4r3M6yVe}XB3B{?A-=J;L1Y~mx8GoQOiq7_yto<9b| zl`xGV&iqCRLAQd{QWEChGzZ1J6r8+Z*gl-RS~G=D&Rz9;euLi+dWmp^G{y^W%;lD} zsy7N!Mbz+(S3>QRH?(4LQRNTRp~--<5LW8SzTS`^ZPZb0xDTYiUH^)uE;WTCy=QwC zY?R!614uth7%`+7G?`63)$7(4aKPVjjcOzNY}fIF7;9f2cCi3YWn0T@gK0Akg@SRC zN>VjE{&8G%c>;6rwm1nvQKa+0s%k}J?stbRxu*hOpy}GE7vXeG8-vtTa)Wv%LEP{X zg(Uf`Cp>VqUbhpjvwqNJ3^kd3csatbG{@t|r?)elmll=@9}$Ie@YS=UAsM5e19R*9 zP{bOso;AOKf_jma*(b+ubx#h|JD%qz>bR~y3?9K zpN(=w8o!o{xGEot6`%$c;ExS)-^Ighv&l=4-1zR1Pf$ULoc4+^J2 z(K6=P^GE}pV%e!=>2?^ZL@vUC?R0*ZT*IG6d9AtX%Eihh=CfWOJd0L$*TcCBkd4RFM9s{FPIIBVE_OC literal 0 HcmV?d00001 diff --git a/x-pack/test/custom_branding/tests/acme_text.png b/x-pack/test/custom_branding/tests/acme_text.png new file mode 100644 index 0000000000000000000000000000000000000000..be1f51ec2550fee92ba5e63d47127fe47c83faf2 GIT binary patch literal 2068 zcmZWq2{_bwA0NghSFMZ`qr;HeVUGXbxx5%=%t5ll2nkz=TDjJh!H`0EY>E!oDiI2~ zLe3JixzBafTDe6duP8a%-%QzhpZE9tX6F0-T;K0J&;NP;v6dE8DRFsm1Og#Nr;(Z9 zHyV8QY(;`^qUCxC0wEk}X>Lsct>AE2ES8ax5e&mvEK6CL4r*Op77QQ8;Y_huBW-Ou z43h~2OLcWKES9RJWdbN7kq%fjH4{xu1`Jb)L<$~nj>FM4)l7kyNMsNQG$7DaH-lk1 z1W^eDAYkBdG#EC;sn9 z5m3N_$I~G|L7)XV6~dcBIKGPy;`xHldI%4wFZj105zlvldBM7ujoXW?)=s_|c2SzZ658^=qj9@o@4eWyHG$KF*f-fvc;2Sr^f{@Lj zRDqbE@YTzY62xvAH`~o*e!k!W<-aw5|IaQ#CcpkNm%kzZ3fixF0RlGv7U2i}zYKtz zd;Tl_pV41KK7IOBob9X)9>LyUnHE+EAz`G*cUwfaiit}|ZrlF7^bQ%6>`u8|yX6(o zihK6%+pmOCRym-05UZw+!xJD_Q(H&(M?L-j7#JFnOvt8G8r{tNu*FYID{Gd`QCo-O zj?O=yaB+1z~enH{GqT-U$vhs?`$5quewRQDRo;5acpEtL(wzYS3b@%l34-5{y zcscy{$g9z@@rlW)>6zEFb8mR_Zx`MzEx-TpadmBdW61uV2l#(NC(NkizOZUN83aPa znNB8I)3}W{R!po}DDL(+!rbm3Ze?fF8I>HR>@e@>@KC;PR#X)C%WMSG}MZNBVMUYq6)+Qa7qqqWxr0GSUK{s zke52&dN9+u$N0uh2MGy@9?zBEbzBbw2beWBuNwQ#O+($)1ITyz-OZg&TDx+R3^M!^ zvy_k9XQmEp;mmVwSA%wp^z2G=8StVs$9f1?piV2oY*zEF!R?5SV@&m)q{RrP#j}*= zDRZVp4b#Fjr!&;1k@aJ^Vo8!!)?MDS5wtq$plaRPeMgQ=_SI3vxSi4oua=hTggdWG zYZ6V#Om^sLDXI-mA6ehhWWwro*z(pc$#D2`vQEHaNE@PB7IjistthffRH*eHZX$Ac zd7=jK;lI5fQ+wuJ{yaPqiVdinMHaU`j8ZsP{QMR;he*1Aa{ktn_7f+Vm7TY!i!iH3 z+^3MAKK{^kBv>qG`EvQqF*13ma&p>p&|~ZhB^mSN)Yz2=Ee>}3m6S3c`p{C+FuaSC z-hcW2u~3$Var859Xy0ET-4y8NhM>l#nb>P^8+69q%lv3{jYQ0qhT=*g^ckd%K^OWO zPlbyUMHlFKqi!TBuc@MWx5KpDYFD?Rhc;Z}_1ES`bt;dd?RG}Jf49ILFVNZWZY|Q* zpcXDj!Nm5vI=NN~q9@aQ9WF^ee}Wq8)o4`@>`0hRJl{?DE8sitU)J>I^B)~Dx`v7G z7pk>8N|-G~%W(ESoxg|~<#;qC?dTIV_j{U<9bex^T2>j&Gl)y`smMR4)lum-64N3S zZH=s!eqb<;$?%&t9JLj*9FM~22L`_BAtgM{RR$I>#1*^wUWM zz4C#x9Dkv3DY;t`{a)o$Rn8@S>7~fI_)@6~C;ya?x7VXp(Rac#Y1q=J!45er7eeI8 zl*((W+UJWdp6&1%N)Bq@SHJK)%yS;jyUf0(=&$Uhpmx^fda3X+3}sIz8d-R$;^GW% z(Kn*Yg^SOR(_Fr=n5!h#wO=>qlFaViDoV_)^+s)yWx6u`;qDqGOLF9^6Vv5TI(tPp z7t*l@nn%akC-zDV;T%AyMqrq>_v($y*W@M#h!Rv+au53LNUo(I(bg+W$U)%`(Cg+ z4M<#iW8Hn_{+2b1OTo46yp3^myJJl%y { + const advancedSetting = await PageObjects.settings.getAdvancedSettings( + 'xpackCustomBranding:pageTitle' + ); + if (advancedSetting !== '') { + await PageObjects.settings.clearAdvancedSettings('xpackCustomBranding:pageTitle'); + } + try { + await find.byCssSelector('img[alt="xpackCustomBranding:logo"]'); + await PageObjects.settings.clearAdvancedSettings('xpackCustomBranding:logo'); + } catch (e) { + log.debug('It is expected not to find custom branding properties set'); + } + try { + await find.byCssSelector('img[alt="xpackCustomBranding:customizedLogo"]'); + await PageObjects.settings.clearAdvancedSettings('xpackCustomBranding:customizedLogo'); + } catch (e) { + log.debug('It is expected not to find custom branding properties set'); + } + }; + + const goToSettings = async () => { + await PageObjects.settings.navigateTo(); + await PageObjects.settings.clickKibanaGlobalSettings(); + }; + + before(async function () { + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.uiSettings.replace({}); + await PageObjects.settings.navigateTo(); + await PageObjects.settings.clickKibanaGlobalSettings(); + // clear settings before tests start + await resetSettings(); + }); + + after(async function () { + await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await PageObjects.settings.navigateTo(); + await PageObjects.settings.clickKibanaGlobalSettings(); + await resetSettings(); + }); + + beforeEach(async function () { + await goToSettings(); + }); + + it('should allow setting custom page title through advanced settings', async function () { + const pageTitle = 'Custom Page Title'; + const settingName = 'xpackCustomBranding:pageTitle'; + await PageObjects.settings.setAdvancedSettingsInput(settingName, pageTitle); + + const advancedSetting = await PageObjects.settings.getAdvancedSettings(settingName); + expect(advancedSetting).to.be(pageTitle); + }); + + it('should allow setting custom logo through advanced settings', async function () { + const settingName = 'xpackCustomBranding:logo'; + await PageObjects.settings.setAdvancedSettingsImage( + settingName, + require.resolve('./acme_logo.png') + ); + await goToSettings(); + const img = await find.byCssSelector('img[alt="logo"]'); + const imgSrc = await img.getAttribute('src'); + expect(imgSrc.startsWith('data:image/png')).to.be(true); + }); + + it('should allow setting custom logo text through advanced settings', async function () { + const settingName = 'xpackCustomBranding:customizedLogo'; + await PageObjects.settings.setAdvancedSettingsImage( + settingName, + require.resolve('./acme_text.png') + ); + await goToSettings(); + const logo = await testSubjects.find('logo'); + const img = await logo.findByCssSelector('.chrHeaderLogo__mark'); + const imgSrc = await img.getAttribute('src'); + expect(imgSrc.startsWith('data:image/png')).to.be(true); + }); + }); +} From b46d25a7ca700b7e4e01970c55dbc25357acf27a Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Thu, 16 Feb 2023 08:52:05 +0100 Subject: [PATCH 056/210] [ftr/journeys] allow override ftr base config in journey (#151277) ## Summary Currently journeys use pre-defined base FTR config and there is no way to re-configure Kibana to be loaded with extras, e.g. Fleet plugin configuration. https://github.com/elastic/kibana/blob/f443109eeae6af9873e39f16b53825941690c3be/packages/kbn-journeys/journey/journey_ftr_config.ts#L32-L34 Probably the easiest way to address it is to path custom FTR config directly in the journey. ``` export const journey = new Journey({ ftrConfigPath: 'x-pack/test/cloud_security_posture_api/config.ts', ... }) ``` It can be also considered as a step towards using journeys as future alternative to Webdriver functional tests. --- packages/kbn-journeys/journey/journey_config.ts | 9 +++++++++ .../kbn-journeys/journey/journey_ftr_config.ts | 16 ++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/kbn-journeys/journey/journey_config.ts b/packages/kbn-journeys/journey/journey_config.ts index 53b321aa0c05d..f67abb338c5fb 100644 --- a/packages/kbn-journeys/journey/journey_config.ts +++ b/packages/kbn-journeys/journey/journey_config.ts @@ -70,6 +70,11 @@ export interface ScalabilitySetup { } export interface JourneyConfigOptions { + /** + * Relative path to FTR config file. Use to override the default ones: + * 'x-pack/test/functional/config.base.js', 'test/functional/config.base.js' + */ + ftrConfigPath?: string; /** * Set to `true` to skip this journey. should probably be preceded * by a link to a Github issue where the reasoning for why this was @@ -122,6 +127,10 @@ export class JourneyConfig { this.#opts = opts; } + getFtrConfigPath() { + return this.#opts.ftrConfigPath; + } + getEsArchives() { return this.#opts.esArchives ?? []; } diff --git a/packages/kbn-journeys/journey/journey_ftr_config.ts b/packages/kbn-journeys/journey/journey_ftr_config.ts index 77ac34073558a..3933d0d7e195a 100644 --- a/packages/kbn-journeys/journey/journey_ftr_config.ts +++ b/packages/kbn-journeys/journey/journey_ftr_config.ts @@ -25,16 +25,12 @@ export function makeFtrConfigProvider( steps: AnyStep[] ): FtrConfigProvider { return async ({ readConfigFile }: FtrConfigProviderContext) => { - const baseConfig = ( - await readConfigFile( - Path.resolve( - REPO_ROOT, - config.isXpack() - ? 'x-pack/test/functional/config.base.js' - : 'test/functional/config.base.js' - ) - ) - ).getAll(); + const configPath = config.getFtrConfigPath(); + const defaultConfigPath = config.isXpack() + ? 'x-pack/test/functional/config.base.js' + : 'test/functional/config.base.js'; + const ftrConfigPath = configPath ?? defaultConfigPath; + const baseConfig = (await readConfigFile(Path.resolve(REPO_ROOT, ftrConfigPath))).getAll(); const testBuildId = process.env.BUILDKITE_BUILD_ID ?? `local-${uuidV4()}`; const testJobId = process.env.BUILDKITE_JOB_ID ?? `local-${uuidV4()}`; From ac7ac3f33e61d51dfcb2e19b27e69c74041192a0 Mon Sep 17 00:00:00 2001 From: Nav <13634519+navarone-feekery@users.noreply.github.com> Date: Thu, 16 Feb 2023 09:10:45 +0100 Subject: [PATCH 057/210] [Enterprise Search] Fix full HTML toggle label (#151149) --- .../crawler/crawler_configuration/crawler_configuration.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx index 660ab114561ad..129d56dd1b72c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_configuration/crawler_configuration.tsx @@ -79,7 +79,7 @@ export const CrawlerConfiguration: React.FC = () => { label={i18n.translate( 'xpack.enterpriseSearch.content.crawler.crawlerConfiguration.extractHTML.extractionSwitchLabel', { - defaultMessage: 'Content extraction.', + defaultMessage: 'Store full HTML', } )} disabled={status === Status.LOADING} From f399dd094e24fd5e7d839aedd2105f9b8b7475ac Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 16 Feb 2023 09:23:06 +0100 Subject: [PATCH 058/210] Remove unused react-syntax-highlighter resolution (#151295) This resolution was no longer needed as all (sub)dependencies that required this had since been upgraded or removed. --- package.json | 2 -- yarn.lock | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index 24aba91e5f45a..4e48afef13c22 100644 --- a/package.json +++ b/package.json @@ -84,8 +84,6 @@ "**/istanbul-lib-coverage": "^3.2.0", "**/minimatch": "^3.1.2", "**/pdfkit/crypto-js": "4.0.0", - "**/react-syntax-highlighter": "^15.3.1", - "**/react-syntax-highlighter/**/highlight.js": "^10.4.1", "**/refractor/prismjs": "~1.27.0", "**/trim": "1.0.1", "**/typescript": "4.6.3", diff --git a/yarn.lock b/yarn.lock index 18f9a96fe74c6..06d1eb93ebdbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17020,7 +17020,7 @@ heap@^0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -highlight.js@^10.1.1, highlight.js@^10.4.1, highlight.js@~10.4.0: +highlight.js@^10.1.1, highlight.js@~10.4.0: version "10.4.1" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0" integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== From a6073e8458f944f241dfe15ddc8ffda9dd544875 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 16 Feb 2023 09:50:02 +0100 Subject: [PATCH 059/210] [Data Views] Show loading indicators when submitting a data view form to prevent multiple requests (#150576) Closes https://github.com/elastic/kibana/issues/146125 This PR adds loading indicators to the form buttons and also disables them when submitting the form. * Creating an ad-hoc data view ![Feb-08-2023 16-00-20](https://user-images.githubusercontent.com/1415710/217567470-53e0c614-d12d-4849-90e1-f157c6c36e79.gif) * Editing an ad-hoc data view ![Feb-08-2023 16-01-38](https://user-images.githubusercontent.com/1415710/217567599-0066393c-4bae-4364-a568-b54c6509d8ad.gif) * Creating a persisted data view ![Feb-08-2023 16-00-57](https://user-images.githubusercontent.com/1415710/217567411-67dd1b3c-99b9-455b-adbe-be21d61344ee.gif) * Editing a persisted data view ![Feb-08-2023 16-02-08](https://user-images.githubusercontent.com/1415710/217567541-a6314611-544f-45f2-944d-f49c7a654a43.gif) --- .../edit_data_view_changed_modal.tsx | 58 +++++++++++-------- .../data_view_editor_flyout_content.tsx | 12 +++- .../public/components/footer/footer.tsx | 15 ++++- .../public/components/footer/index.ts | 2 +- .../public/components/index.ts | 2 +- .../_index_pattern_create_delete.ts | 24 ++++++++ 6 files changed, 83 insertions(+), 30 deletions(-) diff --git a/src/plugins/data_view_editor/public/components/confirm_modals/edit_data_view_changed_modal.tsx b/src/plugins/data_view_editor/public/components/confirm_modals/edit_data_view_changed_modal.tsx index 69ca69fa7c23f..5f0e51a037cfb 100644 --- a/src/plugins/data_view_editor/public/components/confirm_modals/edit_data_view_changed_modal.tsx +++ b/src/plugins/data_view_editor/public/components/confirm_modals/edit_data_view_changed_modal.tsx @@ -15,31 +15,39 @@ interface EditDataViewDeps { onEdit: () => void; } -export const editDataViewModal = ({ dataViewName, overlays, onEdit }: EditDataViewDeps) => - overlays && +export const editDataViewModal = ({ + dataViewName, + overlays, + onEdit, +}: EditDataViewDeps): Promise => overlays - .openConfirm( - i18n.translate('indexPatternEditor.editDataView.editConfirmationModal.modalDescription', { - defaultMessage: 'Changing this data view can break other objects that depend on it.', - }), - { - confirmButtonText: i18n.translate( - 'indexPatternEditor.editDataView.editConfirmationModal.confirmButton', + ? overlays + .openConfirm( + i18n.translate('indexPatternEditor.editDataView.editConfirmationModal.modalDescription', { + defaultMessage: 'Changing this data view can break other objects that depend on it.', + }), { - defaultMessage: 'Confirm', + confirmButtonText: i18n.translate( + 'indexPatternEditor.editDataView.editConfirmationModal.confirmButton', + { + defaultMessage: 'Confirm', + } + ), + title: i18n.translate( + 'indexPatternEditor.editDataView.editConfirmationModal.editHeader', + { + defaultMessage: `Edit '{name}'`, + values: { + name: dataViewName, + }, + } + ), + buttonColor: 'danger', } - ), - title: i18n.translate('indexPatternEditor.editDataView.editConfirmationModal.editHeader', { - defaultMessage: `Edit '{name}'`, - values: { - name: dataViewName, - }, - }), - buttonColor: 'danger', - } - ) - .then(async (isConfirmed) => { - if (isConfirmed) { - onEdit(); - } - }); + ) + .then(async (isConfirmed) => { + if (isConfirmed) { + await onEdit(); + } + }) + : Promise.resolve(); diff --git a/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx b/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx index d78f54995df1d..e6987c11a920b 100644 --- a/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx +++ b/src/plugins/data_view_editor/public/components/data_view_editor_flyout_content.tsx @@ -48,6 +48,7 @@ import { NameField, schema, Footer, + SubmittingType, AdvancedParamsContent, PreviewPanel, RollupBetaWarning, @@ -136,7 +137,7 @@ const IndexPatternEditorFlyoutContentComponent = ({ } if (editData && editData.getIndexPattern() !== formData.title) { - editDataViewModal({ + await editDataViewModal({ dataViewName: formData.name || formData.title, overlays, onEdit: async () => { @@ -301,7 +302,14 @@ const IndexPatternEditorFlyoutContentComponent = ({ form.setFieldValue('isAdHoc', adhoc || false); form.submit(); }} - submitDisabled={form.isSubmitted && !form.isValid} + submitDisabled={(form.isSubmitted && !form.isValid) || form.isSubmitting} + submittingType={ + form.isSubmitting + ? form.getFormData().isAdHoc + ? SubmittingType.savingAsAdHoc + : SubmittingType.persisting + : undefined + } isEdit={!!editData} isPersisted={Boolean(editData && editData.isPersisted())} allowAdHoc={allowAdHoc} diff --git a/src/plugins/data_view_editor/public/components/footer/footer.tsx b/src/plugins/data_view_editor/public/components/footer/footer.tsx index 024885e91d548..af7dd376ecb34 100644 --- a/src/plugins/data_view_editor/public/components/footer/footer.tsx +++ b/src/plugins/data_view_editor/public/components/footer/footer.tsx @@ -17,9 +17,15 @@ import { EuiButton, } from '@elastic/eui'; +export enum SubmittingType { + savingAsAdHoc = 'savingAsAdHoc', + persisting = 'persisting', +} + interface FooterProps { onCancel: () => void; onSubmit: (isAdHoc?: boolean) => void; + submittingType: SubmittingType | undefined; submitDisabled: boolean; isEdit: boolean; isPersisted: boolean; @@ -53,12 +59,14 @@ const exploreButtonLabel = i18n.translate('indexPatternEditor.editor.flyoutExplo export const Footer = ({ onCancel, onSubmit, + submittingType, submitDisabled, isEdit, allowAdHoc, isPersisted, canSave, }: FooterProps) => { + const isEditingAdHoc = isEdit && !isPersisted; const submitPersisted = () => { onSubmit(false); }; @@ -89,6 +97,7 @@ export const Footer = ({ onClick={submitAdHoc} data-test-subj="exploreIndexPatternButton" disabled={submitDisabled} + isLoading={submittingType === SubmittingType.savingAsAdHoc} title={i18n.translate('indexPatternEditor.editor.flyoutExploreButtonTitle', { defaultMessage: 'Use this data view without creating a saved object', })} @@ -98,7 +107,7 @@ export const Footer = ({ )} - {(canSave || (isEdit && !isPersisted)) && ( + {(canSave || isEditingAdHoc) && ( {isEdit ? isPersisted diff --git a/src/plugins/data_view_editor/public/components/footer/index.ts b/src/plugins/data_view_editor/public/components/footer/index.ts index e3103aab170e0..6649c1ac6f064 100644 --- a/src/plugins/data_view_editor/public/components/footer/index.ts +++ b/src/plugins/data_view_editor/public/components/footer/index.ts @@ -6,4 +6,4 @@ * Side Public License, v 1. */ -export { Footer } from './footer'; +export { Footer, SubmittingType } from './footer'; diff --git a/src/plugins/data_view_editor/public/components/index.ts b/src/plugins/data_view_editor/public/components/index.ts index d47f964e3c602..20bb30a3ed11f 100644 --- a/src/plugins/data_view_editor/public/components/index.ts +++ b/src/plugins/data_view_editor/public/components/index.ts @@ -15,6 +15,6 @@ export { schema } from './form_schema'; export { NameField, TimestampField, TypeField, TitleField } from './form_fields'; export { PreviewPanel } from './preview_panel'; export { LoadingIndices } from './loading_indices'; -export { Footer } from './footer'; +export { Footer, SubmittingType } from './footer'; export { AdvancedParamsContent } from './advanced_params_content'; export { RollupBetaWarning } from './rollup_beta_warning'; diff --git a/test/functional/apps/management/_index_pattern_create_delete.ts b/test/functional/apps/management/_index_pattern_create_delete.ts index f89013eac43fa..7a44cc2f63592 100644 --- a/test/functional/apps/management/_index_pattern_create_delete.ts +++ b/test/functional/apps/management/_index_pattern_create_delete.ts @@ -186,6 +186,30 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await testSubjects.exists('field-name-agent')).to.be(true); }); }); + + it('should disable Save button after pressing', async function () { + await PageObjects.settings.clickEditIndexButton(); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await retry.try(async () => { + await PageObjects.settings.setIndexPatternField('logs*'); + }); + await PageObjects.settings.selectTimeFieldOption('@timestamp'); + + expect(await testSubjects.isEnabled('saveIndexPatternButton')).to.be(true); + await (await PageObjects.settings.getSaveDataViewButtonActive()).click(); + + // wait for the confirmation modal to open + await retry.waitFor('confirmation modal', async () => { + return await testSubjects.exists('confirmModalConfirmButton'); + }); + + // while the confirmation modal is open, we can check that the form button has actually become disabled + expect(await testSubjects.isEnabled('saveIndexPatternButton')).to.be(false); + + await testSubjects.click('confirmModalConfirmButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + }); }); describe('index pattern deletion', function indexDelete() { From 17beb0e6476627368f4b8f9eed343917f543c2d4 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Thu, 16 Feb 2023 10:11:16 +0100 Subject: [PATCH 060/210] [ML] Transforms: Health status functional tests, expanded row tab. (#150664) Adds functional tests for transform health status and expanded row tab. --- .../common/api_schemas/transforms.ts | 2 + x-pack/plugins/transform/common/constants.ts | 5 +- .../transform/common/types/transform_stats.ts | 14 ++- .../transform_list/expanded_row.tsx | 25 ++++- .../expanded_row_health_pane.tsx | 98 ++++++++++++++++ .../expanded_row_messages_pane.tsx | 25 +++-- .../transform_health_colored_dot.tsx | 14 ++- .../index_pattern/creation_index_pattern.ts | 5 + .../creation_saved_search.ts | 3 + .../apps/transform/edit_clone/editing.ts | 3 + .../test/functional/apps/transform/helpers.ts | 8 +- .../transform/start_reset_delete/deleting.ts | 4 + .../transform/start_reset_delete/resetting.ts | 4 + .../transform/start_reset_delete/starting.ts | 106 +++++++++++++++++- .../test/functional/services/transform/api.ts | 8 +- .../services/transform/transform_table.ts | 48 ++++++++ 16 files changed, 341 insertions(+), 31 deletions(-) create mode 100644 x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_health_pane.tsx diff --git a/x-pack/plugins/transform/common/api_schemas/transforms.ts b/x-pack/plugins/transform/common/api_schemas/transforms.ts index 28634e280ee34..5b300a613be94 100644 --- a/x-pack/plugins/transform/common/api_schemas/transforms.ts +++ b/x-pack/plugins/transform/common/api_schemas/transforms.ts @@ -72,6 +72,8 @@ export const settingsSchema = schema.object({ docs_per_second: schema.maybe(schema.nullable(schema.number())), // Optional value that takes precedence over cluster's setting. num_failure_retries: schema.maybe(schema.nullable(schema.number())), + // Unattended mode flag + unattended: schema.maybe(schema.boolean()), }); export const sourceSchema = schema.object({ diff --git a/x-pack/plugins/transform/common/constants.ts b/x-pack/plugins/transform/common/constants.ts index dceda770827c7..20f4d4ff77a6f 100644 --- a/x-pack/plugins/transform/common/constants.ts +++ b/x-pack/plugins/transform/common/constants.ts @@ -130,7 +130,7 @@ export const TRANSFORM_HEALTH_LABEL = { export const TRANSFORM_HEALTH_DESCRIPTION = { green: i18n.translate('xpack.transform.transformHealth.greenDescription', { - defaultMessage: 'The transform is healthy.', + defaultMessage: 'The transform is running as expected.', }), unknown: i18n.translate('xpack.transform.transformHealth.unknownDescription', { defaultMessage: 'The health of the transform could not be determined.', @@ -197,3 +197,6 @@ export const DEFAULT_CONTINUOUS_MODE_DELAY = '60s'; export const DEFAULT_TRANSFORM_FREQUENCY = '1m'; export const DEFAULT_TRANSFORM_SETTINGS_DOCS_PER_SECOND = null; export const DEFAULT_TRANSFORM_SETTINGS_MAX_PAGE_SEARCH_SIZE = 500; + +// Used in the transform list's expanded row for the messages and issues table. +export const TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; diff --git a/x-pack/plugins/transform/common/types/transform_stats.ts b/x-pack/plugins/transform/common/types/transform_stats.ts index 17e5f5a3fa936..c1194ea8f1018 100644 --- a/x-pack/plugins/transform/common/types/transform_stats.ts +++ b/x-pack/plugins/transform/common/types/transform_stats.ts @@ -10,6 +10,13 @@ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { type TransformHealth, type TransformState, TRANSFORM_STATE } from '../constants'; import { TransformId } from './transform'; +export interface TransformHealthIssue { + issue: string; + details?: string; + count: number; + first_occurrence?: number; +} + export interface TransformStats { id: TransformId; checkpointing: { @@ -29,12 +36,7 @@ export interface TransformStats { }; health: { status: TransformHealth; - issues?: Array<{ - issue: string; - details?: string; - count: number; - first_occurrence?: number; - }>; + issues?: TransformHealthIssue[]; }; node?: { id: string; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx index 314162e9b3ea1..43e20106ee3ab 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx @@ -6,6 +6,7 @@ */ import React, { FC, useMemo } from 'react'; +import { css } from '@emotion/react'; import moment from 'moment-timezone'; import { EuiButtonEmpty, EuiTabbedContent } from '@elastic/eui'; @@ -25,6 +26,7 @@ import { ExpandedRowDetailsPane, SectionConfig, SectionItem } from './expanded_r import { ExpandedRowJsonPane } from './expanded_row_json_pane'; import { ExpandedRowMessagesPane } from './expanded_row_messages_pane'; import { ExpandedRowPreviewPane } from './expanded_row_preview_pane'; +import { ExpandedRowHealthPane } from './expanded_row_health_pane'; import { TransformHealthColoredDot } from './transform_health_colored_dot'; function getItemDescription(value: any) { @@ -258,6 +260,21 @@ export const ExpandedRow: FC = ({ item, onAlertEdit }) => { name: 'JSON', content: , }, + ...(item.stats.health + ? [ + { + id: `transform-health-tab-${tabId}`, + 'data-test-subj': 'transformHealthTab', + name: i18n.translate( + 'xpack.transform.transformList.transformDetails.tabs.transformHealthLabel', + { + defaultMessage: 'Health', + } + ), + content: , + }, + ] + : []), { id: `transform-messages-tab-${tabId}`, 'data-test-subj': 'transformMessagesTab', @@ -293,7 +310,13 @@ export const ExpandedRow: FC = ({ item, onAlertEdit }) => { initialSelectedTab={tabs[0]} onTabClick={() => {}} expand={false} - style={{ width: '100%' }} + css={css` + width: 100%; + + .euiTable { + background-color: transparent; + } + `} data-test-subj="transformExpandedRowTabbedContent" /> ); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_health_pane.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_health_pane.tsx new file mode 100644 index 0000000000000..0e8ab94dc2086 --- /dev/null +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_health_pane.tsx @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { type FC } from 'react'; + +import { formatDate, EuiPanel, EuiSpacer, EuiInMemoryTable } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import { TIME_FORMAT } from '../../../../../../common/constants'; +import type { TransformHealthIssue } from '../../../../../../common/types/transform_stats'; + +import { TransformListRow } from '../../../../common'; + +import { TransformHealthColoredDot } from './transform_health_colored_dot'; + +interface ExpandedRowHealthPaneProps { + health: TransformListRow['stats']['health']; +} + +export const ExpandedRowHealthPane: FC = ({ health }) => { + const { status, issues } = health; + + const sorting = { + sort: { + field: 'first_occurrence' as const, + direction: 'desc' as const, + }, + }; + + const columns = [ + { + field: 'first_occurrence', + name: i18n.translate( + 'xpack.transform.transformList.transformDetails.healthPane.firstOccurrenceLabel', + { + defaultMessage: 'First occurrence', + } + ), + render: (firstOccurrence: number) => formatDate(firstOccurrence, TIME_FORMAT), + sortable: true, + }, + { + field: 'count', + name: i18n.translate('xpack.transform.transformList.transformDetails.healthPane.countLabel', { + defaultMessage: 'count', + }), + sortable: true, + width: '60px', + }, + { + field: 'issue', + name: i18n.translate('xpack.transform.transformList.transformDetails.healthPane.issueLabel', { + defaultMessage: 'Issue', + }), + sortable: true, + }, + { + field: 'details', + name: i18n.translate( + 'xpack.transform.transformList.transformDetails.healthPane.detailsLabel', + { + defaultMessage: 'Details', + } + ), + width: '50%', + }, + ]; + + return ( + + + + {Array.isArray(issues) && issues.length > 0 && ( + <> + + + data-test-subj="transformHealthTabContentIssueTable" + items={issues} + columns={columns} + compressed={true} + pagination={issues.length > 10} + sorting={sorting} + /> + + )} + + ); +}; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_messages_pane.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_messages_pane.tsx index 2b428ddf10505..4cf387ad2973b 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_messages_pane.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_messages_pane.tsx @@ -5,22 +5,21 @@ * 2.0. */ -import React, { MouseEvent, useState } from 'react'; +import React, { MouseEvent, useState, type FC } from 'react'; import { - EuiSpacer, + formatDate, + EuiPanel, EuiBasicTable, EuiBasicTableProps, EuiToolTip, EuiButtonIcon, } from '@elastic/eui'; -// @ts-ignore -import { formatDate } from '@elastic/eui/lib/services/format'; import { euiLightVars as theme } from '@kbn/ui-theme'; import { i18n } from '@kbn/i18n'; -import { DEFAULT_MAX_AUDIT_MESSAGE_SIZE } from '../../../../../../common/constants'; +import { DEFAULT_MAX_AUDIT_MESSAGE_SIZE, TIME_FORMAT } from '../../../../../../common/constants'; import { isGetTransformsAuditMessagesResponseSchema } from '../../../../../../common/api_schemas/type_guards'; import { TransformMessage } from '../../../../../../common/types/messages'; @@ -28,9 +27,7 @@ import { useApi } from '../../../../hooks/use_api'; import { JobIcon } from '../../../../components/job_icon'; import { useRefreshTransformList } from '../../../../common'; -const TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'; - -interface Props { +interface ExpandedRowMessagesPaneProps { transformId: string; } @@ -39,7 +36,7 @@ interface Sorting { direction: 'asc' | 'desc'; } -export const ExpandedRowMessagesPane: React.FC = ({ transformId }) => { +export const ExpandedRowMessagesPane: FC = ({ transformId }) => { const [messages, setMessages] = useState([]); const [msgCount, setMsgCount] = useState(0); @@ -218,8 +215,12 @@ export const ExpandedRowMessagesPane: React.FC = ({ transformId }) => { }; return ( -
- + = ({ transformId }) => { onChange={onChange} sorting={sorting} /> -
+ ); }; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx index 2bb3a9c22654d..85fbc2c604fc1 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx @@ -18,14 +18,22 @@ import { interface TransformHealthProps { healthStatus: TransformHealth; + compact?: boolean; } -export const TransformHealthColoredDot: FC = ({ healthStatus }) => { - return ( +export const TransformHealthColoredDot: FC = ({ + healthStatus, + compact = true, +}) => { + return compact ? ( - {TRANSFORM_HEALTH_LABEL[healthStatus]} + {TRANSFORM_HEALTH_LABEL[healthStatus]} + ) : ( + + {TRANSFORM_HEALTH_LABEL[healthStatus]} {TRANSFORM_HEALTH_DESCRIPTION[healthStatus]} + ); }; diff --git a/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts b/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts index e8ded6f662867..017d2466fb90d 100644 --- a/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts +++ b/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts @@ -185,6 +185,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { status: TRANSFORM_STATE.STOPPED, mode: 'batch', progress: '100', + health: 'Healthy', }, indexPreview: { columns: 10, @@ -368,6 +369,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { status: TRANSFORM_STATE.STOPPED, mode: 'batch', progress: '100', + health: 'Healthy', }, indexPreview: { columns: 10, @@ -432,6 +434,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { status: TRANSFORM_STATE.STOPPED, mode: 'batch', progress: '100', + health: 'Healthy', }, indexPreview: { columns: 10, @@ -479,6 +482,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { status: TRANSFORM_STATE.STOPPED, mode: 'batch', progress: '100', + health: 'Healthy', }, indexPreview: { columns: 10, @@ -819,6 +823,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { status: testData.expected.row.status, mode: testData.expected.row.mode, progress: testData.expected.row.progress, + health: testData.expected.row.health, }); }); diff --git a/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_saved_search.ts b/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_saved_search.ts index 9f985a16da98d..c976be55a7885 100644 --- a/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_saved_search.ts +++ b/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_saved_search.ts @@ -68,6 +68,7 @@ export default function ({ getService }: FtrProviderContext) { status: TRANSFORM_STATE.STOPPED, mode: 'batch', progress: '100', + health: 'Healthy', }, sourceIndex: 'ft_farequote', indexPreview: { @@ -105,6 +106,7 @@ export default function ({ getService }: FtrProviderContext) { status: TRANSFORM_STATE.STOPPED, mode: 'batch', progress: '100', + health: 'Healthy', }, sourceIndex: 'ft_farequote', indexPreview: { @@ -297,6 +299,7 @@ export default function ({ getService }: FtrProviderContext) { status: testData.expected.row.status, mode: testData.expected.row.mode, progress: testData.expected.row.progress, + health: testData.expected.row.health, }); await transform.testExecution.logTestStep( diff --git a/x-pack/test/functional/apps/transform/edit_clone/editing.ts b/x-pack/test/functional/apps/transform/edit_clone/editing.ts index 5f767825c7c31..10cacc361779c 100644 --- a/x-pack/test/functional/apps/transform/edit_clone/editing.ts +++ b/x-pack/test/functional/apps/transform/edit_clone/editing.ts @@ -73,6 +73,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'pivot', mode: 'batch', progress: '100', + health: 'Healthy', }, }, }, @@ -95,6 +96,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'latest', mode: 'batch', progress: '100', + health: 'Healthy', }, }, }, @@ -231,6 +233,7 @@ export default function ({ getService }: FtrProviderContext) { status: testData.expected.row.status, mode: testData.expected.row.mode, progress: testData.expected.row.progress, + health: testData.expected.row.health, }); await transform.testExecution.logTestStep( diff --git a/x-pack/test/functional/apps/transform/helpers.ts b/x-pack/test/functional/apps/transform/helpers.ts index d4b163871cc4c..831cefce6afad 100644 --- a/x-pack/test/functional/apps/transform/helpers.ts +++ b/x-pack/test/functional/apps/transform/helpers.ts @@ -60,11 +60,14 @@ export function isLatestTransformTestData(arg: any): arg is LatestTransformTestD export function getPivotTransformConfig( prefix: string, - continuous?: boolean + continuous?: boolean, + unattended?: boolean ): TransformPivotConfig { const timestamp = Date.now(); return { - id: `ec_${prefix}_pivot_${timestamp}_${continuous ? 'cont' : 'batch'}`, + id: `ec_${prefix}_pivot_${timestamp}_${continuous ? 'cont' : 'batch'}${ + unattended ? '_unattended' : '' + }`, source: { index: ['ft_ecommerce'] }, pivot: { group_by: { category: { terms: { field: 'category.keyword' } } }, @@ -75,6 +78,7 @@ export function getPivotTransformConfig( } transform with avg(products.base_price) grouped by terms(category.keyword)`, dest: { index: `user-ec_2_${timestamp}` }, ...(continuous ? { sync: { time: { field: 'order_date', delay: '60s' } } } : {}), + ...(unattended ? { settings: { unattended: true } } : {}), }; } diff --git a/x-pack/test/functional/apps/transform/start_reset_delete/deleting.ts b/x-pack/test/functional/apps/transform/start_reset_delete/deleting.ts index e76ef118fde0d..80a00e0b09dfd 100644 --- a/x-pack/test/functional/apps/transform/start_reset_delete/deleting.ts +++ b/x-pack/test/functional/apps/transform/start_reset_delete/deleting.ts @@ -27,6 +27,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'pivot', mode: 'batch', progress: 100, + health: 'Healthy', }, }, }, @@ -39,6 +40,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'pivot', mode: 'continuous', progress: undefined, + health: 'Healthy', }, }, }, @@ -55,6 +57,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'latest', mode: 'batch', progress: 100, + health: 'Healthy', }, }, }, @@ -114,6 +117,7 @@ export default function ({ getService }: FtrProviderContext) { status: testData.expected.row.status, mode: testData.expected.row.mode, progress: testData.expected.row.progress, + health: testData.expected.row.health, }); await transform.testExecution.logTestStep('should show the delete modal'); diff --git a/x-pack/test/functional/apps/transform/start_reset_delete/resetting.ts b/x-pack/test/functional/apps/transform/start_reset_delete/resetting.ts index ef62d9986813d..c6e5180dfa8fb 100644 --- a/x-pack/test/functional/apps/transform/start_reset_delete/resetting.ts +++ b/x-pack/test/functional/apps/transform/start_reset_delete/resetting.ts @@ -28,6 +28,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'pivot', mode: 'batch', progress: 100, + health: 'Healthy', }, }, }, @@ -41,6 +42,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'pivot', mode: 'continuous', progress: undefined, + health: 'Healthy', }, }, }, @@ -57,6 +59,7 @@ export default function ({ getService }: FtrProviderContext) { type: 'latest', mode: 'batch', progress: 100, + health: 'Healthy', }, }, }, @@ -116,6 +119,7 @@ export default function ({ getService }: FtrProviderContext) { status: testData.expected.row.status, mode: testData.expected.row.mode, progress: testData.expected.row.progress, + health: testData.expected.row.health, }); await transform.testExecution.logTestStep('should show the reset modal'); diff --git a/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts b/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts index 1fccec9a9192b..3a06dbb6108c7 100644 --- a/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts +++ b/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts @@ -5,36 +5,106 @@ * 2.0. */ -import { TRANSFORM_STATE } from '@kbn/transform-plugin/common/constants'; +import { + TRANSFORM_STATE, + TRANSFORM_HEALTH, + TRANSFORM_HEALTH_LABEL, + TRANSFORM_HEALTH_DESCRIPTION, +} from '@kbn/transform-plugin/common/constants'; +import { + TransformLatestConfig, + TransformPivotConfig, +} from '@kbn/transform-plugin/common/types/transform'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { getLatestTransformConfig, getPivotTransformConfig } from '../helpers'; +interface TestDataPivot { + suiteTitle: string; + originalConfig: TransformPivotConfig; + mode: 'batch' | 'continuous'; + type: 'pivot'; + expected: { + healthDescription: string; + healthLabel: string; + healthStatus: string; + }; +} + +interface TestDataLatest { + suiteTitle: string; + originalConfig: TransformLatestConfig; + mode: 'batch' | 'continuous'; + type: 'latest'; + expected: { + healthDescription: string; + healthLabel: string; + healthStatus: string; + }; +} + +type TestData = TestDataPivot | TestDataLatest; + export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const transform = getService('transform'); describe('starting', function () { const PREFIX = 'starting'; - const testDataList = [ + const testDataList: TestData[] = [ { suiteTitle: 'batch transform with pivot configuration', originalConfig: getPivotTransformConfig(PREFIX, false), mode: 'batch', + type: 'pivot', + expected: { + healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, + healthLabel: TRANSFORM_HEALTH_LABEL.green, + healthStatus: TRANSFORM_HEALTH.GREEN, + }, }, { suiteTitle: 'continuous transform with pivot configuration', originalConfig: getPivotTransformConfig(PREFIX, true), mode: 'continuous', + type: 'pivot', + expected: { + healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, + healthLabel: TRANSFORM_HEALTH_LABEL.green, + healthStatus: TRANSFORM_HEALTH.GREEN, + }, + }, + { + suiteTitle: 'non healthy continuous transform with pivot configuration', + originalConfig: getPivotTransformConfig(PREFIX, true, true), + mode: 'continuous', + type: 'pivot', + expected: { + healthDescription: TRANSFORM_HEALTH_DESCRIPTION.yellow, + healthLabel: TRANSFORM_HEALTH_LABEL.yellow, + healthStatus: TRANSFORM_HEALTH.YELLOW, + }, }, { suiteTitle: 'batch transform with latest configuration', originalConfig: getLatestTransformConfig(PREFIX, false), mode: 'batch', + type: 'latest', + expected: { + healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, + healthLabel: TRANSFORM_HEALTH_LABEL.green, + healthStatus: TRANSFORM_HEALTH.GREEN, + }, }, { suiteTitle: 'continuous transform with latest configuration', originalConfig: getLatestTransformConfig(PREFIX, true), mode: 'continuous', + type: 'latest', + expected: { + healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, + healthLabel: TRANSFORM_HEALTH_LABEL.green, + healthStatus: TRANSFORM_HEALTH.GREEN, + }, }, ]; @@ -43,7 +113,23 @@ export default function ({ getService }: FtrProviderContext) { await transform.testResources.createIndexPatternIfNeeded('ft_ecommerce', 'order_date'); for (const testData of testDataList) { - await transform.api.createTransform(testData.originalConfig.id, testData.originalConfig); + if ( + testData.expected.healthStatus === TRANSFORM_HEALTH.YELLOW && + testData.type === 'pivot' + ) { + testData.originalConfig.pivot.aggregations['products.base_price.fail'] = { + avg: { + script: { + source: "def a = doc['non_existing'].value", + }, + }, + }; + } + await transform.api.createTransform( + testData.originalConfig.id, + testData.originalConfig, + testData.expected.healthStatus === TRANSFORM_HEALTH.YELLOW + ); } await transform.testResources.setKibanaTimeZoneToUTC(); await transform.securityUI.loginAsTransformPowerUser(); @@ -80,6 +166,12 @@ export default function ({ getService }: FtrProviderContext) { await transform.table.assertTransformRowActionEnabled(transformId, 'Start', true); await transform.table.clickTransformRowAction(transformId, 'Start'); await transform.table.confirmStartTransform(); + + await transform.table.assertTransformExpandedRowHealth( + testData.expected.healthDescription, + testData.expected.healthStatus !== TRANSFORM_HEALTH.GREEN + ); + await transform.table.clearSearchString(testDataList.length); if (testData.mode === 'continuous') { @@ -88,10 +180,16 @@ export default function ({ getService }: FtrProviderContext) { testData.originalConfig.id, TRANSFORM_STATE.STOPPED ); - } else { + } else if (testData.mode === 'batch') { + await transform.testExecution.logTestStep('should display a healthy status'); await transform.table.assertTransformRowProgressGreaterThan(transformId, 0); } + await transform.table.assertTransformRowHealth( + testData.originalConfig.id, + testData.expected.healthLabel + ); + await transform.table.assertTransformRowStatusNotEql( testData.originalConfig.id, TRANSFORM_STATE.FAILED diff --git a/x-pack/test/functional/services/transform/api.ts b/x-pack/test/functional/services/transform/api.ts index 30a3da31a5dbe..dcb76bb23eaf0 100644 --- a/x-pack/test/functional/services/transform/api.ts +++ b/x-pack/test/functional/services/transform/api.ts @@ -215,10 +215,14 @@ export function TransformAPIProvider({ getService }: FtrProviderContext) { return body as TransformPivotConfig; }, - async createTransform(transformId: string, transformConfig: PutTransformsRequestSchema) { + async createTransform( + transformId: string, + transformConfig: PutTransformsRequestSchema, + deferValidation?: boolean + ) { log.debug(`Creating transform with id '${transformId}'...`); const { body, status } = await esSupertest - .put(`/_transform/${transformId}`) + .put(`/_transform/${transformId}${deferValidation ? '?defer_validation=true' : ''}`) .send(transformConfig); this.assertResponseStatusCode(200, status, body); diff --git a/x-pack/test/functional/services/transform/transform_table.ts b/x-pack/test/functional/services/transform/transform_table.ts index 785d7e33d5042..4ae7e4c95821d 100644 --- a/x-pack/test/functional/services/transform/transform_table.ts +++ b/x-pack/test/functional/services/transform/transform_table.ts @@ -57,6 +57,11 @@ export function TransformTableProvider({ getService }: FtrProviderContext) { .findTestSubject('transformListColumnProgress') .findTestSubject('transformListProgress') .attr('value'), + health: $tr + .findTestSubject('transformListColumnHealth') + .findTestSubject('transformListHealth') + .text() + .trim(), }); } @@ -140,6 +145,18 @@ export function TransformTableProvider({ getService }: FtrProviderContext) { }); } + public async assertTransformRowHealth(transformId: string, health: string) { + await retry.tryForTime(30 * 1000, async () => { + await this.refreshTransformList(); + const rows = await this.parseTransformTable(); + const transformRow = rows.filter((row) => row.id === transformId)[0]; + expect(transformRow.health).to.eql( + health, + `Expected transform row status to not be '${health}' (got '${transformRow.health}')` + ); + }); + } + public async assertTransformRowStatusNotEql(transformId: string, status: string) { await retry.tryForTime(30 * 1000, async () => { await this.refreshTransformList(); @@ -187,6 +204,7 @@ export function TransformTableProvider({ getService }: FtrProviderContext) { // Walk through the rest of the tabs and check if the corresponding content shows up await this.switchToExpandedRowTab('transformJsonTab', '~transformJsonTabContent'); + await this.switchToExpandedRowTab('transformHealthTab', '~transformHealthTabContent'); await this.switchToExpandedRowTab('transformMessagesTab', '~transformMessagesTabContent'); await this.switchToExpandedRowTab('transformPreviewTab', '~transformPivotPreview'); } @@ -240,6 +258,36 @@ export function TransformTableProvider({ getService }: FtrProviderContext) { await this.switchToExpandedRowTab('transformDetailsTab', '~transformDetailsTabContent'); } + public async assertTransformExpandedRowHealth( + expectedText: string, + expectIssueTableToExist: boolean + ) { + await this.ensureDetailsOpen(); + + // The expanded row should show the details tab content by default + await testSubjects.existOrFail('transformDetailsTab'); + await testSubjects.existOrFail('~transformDetailsTabContent'); + + // Click on the messages tab and assert the messages + await this.switchToExpandedRowTab('transformHealthTab', '~transformHealthTabContent'); + await retry.tryForTime(30 * 1000, async () => { + const actualText = await testSubjects.getVisibleText('~transformHealthTabContent'); + expect(actualText.toLowerCase()).to.contain( + expectedText.toLowerCase(), + `Expected transform messages text to include '${expectedText}'` + ); + }); + + if (expectIssueTableToExist) { + await testSubjects.existOrFail('transformHealthTabContentIssueTable'); + } else { + await testSubjects.missingOrFail('transformHealthTabContentIssueTable'); + } + + // Switch back to details tab + await this.switchToExpandedRowTab('transformDetailsTab', '~transformDetailsTabContent'); + } + public rowSelector(transformId: string, subSelector?: string) { const row = `~transformListTable > ~row-${transformId}`; return !subSelector ? row : `${row} > ${subSelector}`; From 108b4b512b0d5d5e75f7e603aa5f8bc9fc0f3f13 Mon Sep 17 00:00:00 2001 From: mohamedhamed-ahmed Date: Thu, 16 Feb 2023 09:23:27 +0000 Subject: [PATCH 061/210] fix(bug): fixed sorting on cluster list table (#151372) ## Summary Going to Stack Monitoring in Kibana will bring you to the cluster list. Attempt to click one of the table headings to sort by that field. Expected behavior: The table values are sorted by that field Actual behavior: It changes the direction of the sort on Name closes [#147273](https://github.com/elastic/kibana/issues/147273) ### Testing https://user-images.githubusercontent.com/11225826/219131518-7a9b341a-3b6e-4a46-a680-a1d2a12b2bb1.mov --- .../components/cluster/listing/listing.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js index 77a73e51ea794..612b6e9154689 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js +++ b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js @@ -389,17 +389,21 @@ const StandaloneClusterCallout = ({ changeCluster, storage }) => { }; export const Listing = ({ angular, clusters, sorting, pagination, onTableChange }) => { + const { scope, globalState, storage, showLicenseExpiration } = angular; + const { + sort: { direction, field }, + } = sorting; const { services } = useKibana(); - const _changeCluster = partial(changeCluster, angular.scope, angular.globalState); + const _changeCluster = partial(changeCluster, scope, globalState); const _handleClickIncompatibleLicense = partial( handleClickIncompatibleLicense, - angular.scope, + scope, services.theme.theme$ ); const _handleClickInvalidLicense = partial( handleClickInvalidLicense, - angular.scope, + scope, services.theme.theme$ ); const hasStandaloneCluster = !!clusters.find( @@ -411,13 +415,13 @@ export const Listing = ({ angular, clusters, sorting, pagination, onTableChange {hasStandaloneCluster ? ( - + ) : null} Date: Thu, 16 Feb 2023 11:39:03 +0200 Subject: [PATCH 062/210] [Cloud Security] Improved resource tab (#151335) --- .../__snapshots__/resource_tab.test.ts.snap | 100 --------------- .../findings_flyout/resource_tab.test.ts | 24 ---- .../findings/findings_flyout/resource_tab.tsx | 119 +++++++----------- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 6 files changed, 48 insertions(+), 201 deletions(-) delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/__snapshots__/resource_tab.test.ts.snap delete mode 100644 x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.test.ts diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/__snapshots__/resource_tab.test.ts.snap b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/__snapshots__/resource_tab.test.ts.snap deleted file mode 100644 index ffa5d91e2d677..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/__snapshots__/resource_tab.test.ts.snap +++ /dev/null @@ -1,100 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`prepareDescriptionList create description lists accordingly 1`] = ` -Array [ - Object { - "description": - string - , - "title": - - a - - , - }, - Object { - "description": - 123 - , - "title": - - b - - , - }, - Object { - "description": "undefined", - "title": - - c - - , - }, - Object { - "description": - null - , - "title": - - d - - , - }, - Object { - "description": - true - , - "title": - - e - - , - }, - Object { - "description": - false - , - "title": - - f - - , - }, - Object { - "description": - [ - { - "a": "another string", - "b": 123 - } -] - , - "title": - - g - - , - }, -] -`; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.test.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.test.ts deleted file mode 100644 index 94886e8fb254d..0000000000000 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { prepareDescriptionList } from './resource_tab'; - -const mockData = { - a: 'string', - b: 123, - c: undefined, - d: null, - e: true, - f: false, - g: [{ a: 'another string', b: 123 }], -}; - -describe('prepareDescriptionList', () => { - it('create description lists accordingly', () => { - const descriptionList = prepareDescriptionList(mockData); - expect(descriptionList).toMatchSnapshot(); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.tsx index 86ea3f67acd79..f4e0a5842231f 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/resource_tab.tsx @@ -6,20 +6,22 @@ */ import { - EuiAccordion, EuiCode, EuiCodeBlock, - EuiDescriptionList, - EuiPanel, - EuiSpacer, + EuiInMemoryTable, + EuiInMemoryTableProps, EuiText, - useEuiTheme, } from '@elastic/eui'; -import React, { useMemo } from 'react'; +import React from 'react'; import { getFlattenedObject } from '@kbn/std'; import { i18n } from '@kbn/i18n'; import { CspFinding } from '../../../../common/schemas/csp_finding'; +interface ResourceItem { + key: string; // flattened dot notation object path for CspFinding['resource']; + value: unknown; +} + const getDescriptionDisplay = (value: unknown) => { if (value === undefined) return 'undefined'; if (typeof value === 'boolean' || value === null) { @@ -37,71 +39,46 @@ const getDescriptionDisplay = (value: unknown) => { return {value as string}; }; -export const prepareDescriptionList = (data: any) => - Object.entries(getFlattenedObject(data)) - .sort((a, b) => a[0].localeCompare(b[0])) - .map(([key, value]) => ({ - title: ( - - {key} - - ), - description: getDescriptionDisplay(value), - })); - -export const ResourceTab = ({ data }: { data: CspFinding }) => { - const { euiTheme } = useEuiTheme(); +const search: EuiInMemoryTableProps['search'] = { + box: { + incremental: true, + }, +}; - const accordions = useMemo( - () => [ - { - title: i18n.translate( - 'xpack.csp.findings.findingsFlyout.resourceTab.resourceAccordionTitle', - { defaultMessage: 'Resource' } - ), - id: 'resourceAccordion', - listItems: prepareDescriptionList(data.resource), - }, - { - title: i18n.translate('xpack.csp.findings.findingsFlyout.resourceTab.hostAccordionTitle', { - defaultMessage: 'Host', - }), - id: 'hostAccordion', - listItems: prepareDescriptionList(data.host), - }, - ], - [data.host, data.resource] - ); +const sorting: EuiInMemoryTableProps['sorting'] = { + sort: { + field: 'key', + direction: 'asc', + }, +}; - return ( - <> - {accordions.map((accordion) => ( - - - - {accordion.title} - - } - arrowDisplay="left" - initialIsOpen - > - - - - - - ))} - - ); +const pagination: EuiInMemoryTableProps['pagination'] = { + initialPageSize: 100, + showPerPageOptions: false, }; + +const columns: EuiInMemoryTableProps['columns'] = [ + { + field: 'key', + name: i18n.translate('xpack.csp.flyout.resource.fieldLabel', { defaultMessage: 'Field' }), + width: '25%', + }, + { + field: 'value', + name: i18n.translate('xpack.csp.flyout.resource.fieldValueLabel', { defaultMessage: 'Value' }), + render: (value, record) =>
{getDescriptionDisplay(value)}
, + }, +]; + +const getFlattenedItems = (resource: CspFinding['resource']) => + Object.entries(getFlattenedObject(resource)).map(([key, value]) => ({ key, value })); + +export const ResourceTab = ({ data }: { data: CspFinding }) => ( + +); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 5a609c618f48c..6844a048033de 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10090,8 +10090,6 @@ "xpack.csp.findings.findingsFlyout.overviewTab.ruleNameTitle": "Nom de règle", "xpack.csp.findings.findingsFlyout.overviewTab.ruleTagsTitle": "Balises de règle", "xpack.csp.findings.findingsFlyout.overviewTabTitle": "Aperçu", - "xpack.csp.findings.findingsFlyout.resourceTab.hostAccordionTitle": "Hôte", - "xpack.csp.findings.findingsFlyout.resourceTab.resourceAccordionTitle": "Ressource", "xpack.csp.findings.findingsFlyout.resourceTabTitle": "Ressource", "xpack.csp.findings.findingsFlyout.ruleTab.auditTitle": "Audit", "xpack.csp.findings.findingsFlyout.ruleTab.benchmarkTitle": "Benchmark", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 400dba199ca16..da25100e1e288 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10079,8 +10079,6 @@ "xpack.csp.findings.findingsFlyout.overviewTab.ruleNameTitle": "ルール名", "xpack.csp.findings.findingsFlyout.overviewTab.ruleTagsTitle": "ルールタグ", "xpack.csp.findings.findingsFlyout.overviewTabTitle": "概要", - "xpack.csp.findings.findingsFlyout.resourceTab.hostAccordionTitle": "ホスト", - "xpack.csp.findings.findingsFlyout.resourceTab.resourceAccordionTitle": "リソース", "xpack.csp.findings.findingsFlyout.resourceTabTitle": "リソース", "xpack.csp.findings.findingsFlyout.ruleTab.auditTitle": "監査", "xpack.csp.findings.findingsFlyout.ruleTab.benchmarkTitle": "ベンチマーク", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 1ecd40512117e..6a0cb1c2ad138 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10094,8 +10094,6 @@ "xpack.csp.findings.findingsFlyout.overviewTab.ruleNameTitle": "规则名称", "xpack.csp.findings.findingsFlyout.overviewTab.ruleTagsTitle": "规则标签", "xpack.csp.findings.findingsFlyout.overviewTabTitle": "概览", - "xpack.csp.findings.findingsFlyout.resourceTab.hostAccordionTitle": "主机", - "xpack.csp.findings.findingsFlyout.resourceTab.resourceAccordionTitle": "资源", "xpack.csp.findings.findingsFlyout.resourceTabTitle": "资源", "xpack.csp.findings.findingsFlyout.ruleTab.auditTitle": "审计", "xpack.csp.findings.findingsFlyout.ruleTab.benchmarkTitle": "基准", From 8bf10c41af7fccde830a1d970242fe9d580d3417 Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Thu, 16 Feb 2023 11:41:44 +0200 Subject: [PATCH 063/210] [Cloud Security] Fix CSP pages remount (#151283) --- .../cloud_security_posture/public/plugin.tsx | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/plugin.tsx b/x-pack/plugins/cloud_security_posture/public/plugin.tsx index 9114dcd9e2f4d..a941f1f770b13 100755 --- a/x-pack/plugins/cloud_security_posture/public/plugin.tsx +++ b/x-pack/plugins/cloud_security_posture/public/plugin.tsx @@ -67,19 +67,21 @@ export class CspPlugin Component: LazyCspCustomAssets, }); + // Keep as constant to prevent remounts https://github.com/elastic/kibana/issues/146773 + const App = (props: CspRouterProps) => ( + + +
+ + + +
+
+
+ ); + return { - getCloudSecurityPostureRouter: () => (props: CspRouterProps) => - ( - - -
- - - -
-
-
- ), + getCloudSecurityPostureRouter: () => App, }; } From e974e53b3206031b101de4a843b713bdb349bcdf Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Thu, 16 Feb 2023 12:43:17 +0200 Subject: [PATCH 064/210] [Cloud Security] change `Belongs To` column to use runtime field (#151038) --- .../get_belongs_to_runtime_mapping.ts | 52 +++++++++++++++++++ .../get_identifier_runtime_mapping.ts | 0 .../findings_by_resource_table.test.tsx | 2 +- .../findings_by_resource_table.tsx | 21 +++++++- .../use_findings_by_resource.ts | 17 +++--- .../pages/findings/layout/findings_layout.tsx | 22 -------- .../collectors/accounts_stats_collector.ts | 2 +- .../collectors/resources_stats_collector.ts | 2 +- .../compliance_dashboard/get_clusters.ts | 2 +- .../server/tasks/findings_stats_task.ts | 2 +- 10 files changed, 86 insertions(+), 36 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_belongs_to_runtime_mapping.ts rename x-pack/plugins/cloud_security_posture/{server/lib => common/runtime_mappings}/get_identifier_runtime_mapping.ts (100%) diff --git a/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_belongs_to_runtime_mapping.ts b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_belongs_to_runtime_mapping.ts new file mode 100644 index 0000000000000..3ad655738e24e --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_belongs_to_runtime_mapping.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. + */ + +import { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; + +/** + * Creates the `belongs_to` runtime field with the value of either + * `account.cloud.name` or `cluster.id` based on the value of `rule.benchmark.posture_type` + */ +export const getBelongsToRuntimeMapping = (): MappingRuntimeFields => ({ + belongs_to: { + type: 'keyword', + script: { + source: ` + if (!doc.containsKey('rule.benchmark.posture_type')) + { + def identifier = doc["cluster_id"].value; + emit(identifier); + return + } + else + { + if(doc["rule.benchmark.posture_type"].size() > 0) + { + def policy_template_type = doc["rule.benchmark.posture_type"].value; + if (policy_template_type == "cspm") + { + def identifier = doc["cloud.account.name"].value; + emit(identifier); + return + } + + if (policy_template_type == "kspm") + { + def identifier = doc["cluster_id"].value; + emit(identifier); + return + } + } + + def identifier = doc["cluster_id"].value; + emit(identifier); + return + } + `, + }, + }, +}); diff --git a/x-pack/plugins/cloud_security_posture/server/lib/get_identifier_runtime_mapping.ts b/x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_identifier_runtime_mapping.ts similarity index 100% rename from x-pack/plugins/cloud_security_posture/server/lib/get_identifier_runtime_mapping.ts rename to x-pack/plugins/cloud_security_posture/common/runtime_mappings/get_identifier_runtime_mapping.ts diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.test.tsx index a98cedafc6610..8de39503a9644 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.test.tsx @@ -26,7 +26,7 @@ const getFakeFindingsByResource = (): FindingsByResourcePage => { ); return { - cluster_id: chance.guid(), + belongs_to: chance.guid(), resource_id: chance.guid(), 'resource.name': resourceName, 'resource.sub_type': resourceSubtype, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.tsx index 84c89d086a5f6..75f9e3a7fe14b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/findings_by_resource_table.tsx @@ -17,6 +17,8 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import numeral from '@elastic/numeral'; import { Link, generatePath } from 'react-router-dom'; +import { i18n } from '@kbn/i18n'; +import { ColumnNameWithTooltip } from '../../../components/column_name_with_tooltip'; import { ComplianceScoreBar } from '../../../components/compliance_score_bar'; import * as TEST_SUBJECTS from '../test_subjects'; import type { FindingsByResourcePage } from './use_findings_by_resource'; @@ -79,7 +81,7 @@ const FindingsByResourceTableComponent = ({ getNonSortableColumn(findingsByResourceColumns['rule.benchmark.name']), { onAddFilter } ), - createColumnWithFilters(getNonSortableColumn(findingsByResourceColumns.cluster_id), { + createColumnWithFilters(getNonSortableColumn(findingsByResourceColumns.belongs_to), { onAddFilter, }), findingsByResourceColumns.compliance_score, @@ -153,7 +155,22 @@ const baseColumns: Array> = ); }, }, - baseFindingsColumns.cluster_id, + { + field: 'belongs_to', + name: ( + + ), + truncateText: true, + }, { field: 'compliance_score', width: '150px', diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts index 4a0110e0d536e..0442ff3424ad8 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/use_findings_by_resource.ts @@ -9,6 +9,7 @@ import { lastValueFrom } from 'rxjs'; import { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/data-plugin/common'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { Pagination } from '@elastic/eui'; +import { getBelongsToRuntimeMapping } from '../../../../common/runtime_mappings/get_belongs_to_runtime_mapping'; import { MAX_FINDINGS_TO_LOAD } from '../../../common/constants'; import { useKibana } from '../../../common/hooks/use_kibana'; import { showErrorToast } from '../latest_findings/use_latest_findings'; @@ -43,7 +44,7 @@ export interface FindingsByResourcePage { }; compliance_score: number; resource_id: string; - cluster_id: string; + belongs_to: string; 'resource.name': string; 'resource.sub_type': string; 'rule.benchmark.name': string; @@ -62,7 +63,7 @@ interface FindingsAggBucket extends estypes.AggregationsStringRareTermsBucketKey passed_findings: estypes.AggregationsMultiBucketBase; name: estypes.AggregationsMultiBucketAggregateBase; subtype: estypes.AggregationsMultiBucketAggregateBase; - cluster_id: estypes.AggregationsMultiBucketAggregateBase; + belongs_to: estypes.AggregationsMultiBucketAggregateBase; benchmarkName: estypes.AggregationsMultiBucketAggregateBase; cis_sections: estypes.AggregationsMultiBucketAggregateBase; } @@ -75,6 +76,7 @@ export const getFindingsByResourceAggQuery = ({ body: { query, size: 0, + runtime_mappings: getBelongsToRuntimeMapping(), aggs: { ...getFindingsCountAggQuery(), resource_total: { cardinality: { field: 'resource.id' } }, @@ -99,8 +101,9 @@ export const getFindingsByResourceAggQuery = ({ passed_findings: { filter: { term: { 'result.evaluation': 'passed' } }, }, - cluster_id: { - terms: { field: 'cluster_id', size: 1 }, + // this field is runtime generated + belongs_to: { + terms: { field: 'belongs_to', size: 1 }, }, compliance_score: { bucket_script: { @@ -177,12 +180,12 @@ const createFindingsByResource = (resource: FindingsAggBucket): FindingsByResour !Array.isArray(resource.cis_sections.buckets) || !Array.isArray(resource.name.buckets) || !Array.isArray(resource.subtype.buckets) || - !Array.isArray(resource.cluster_id.buckets) || + !Array.isArray(resource.belongs_to.buckets) || !resource.benchmarkName.buckets.length || !resource.cis_sections.buckets.length || !resource.name.buckets.length || !resource.subtype.buckets.length || - !resource.cluster_id.buckets.length + !resource.belongs_to.buckets.length ) throw new Error('expected buckets to be an array'); @@ -190,9 +193,9 @@ const createFindingsByResource = (resource: FindingsAggBucket): FindingsByResour resource_id: resource.key, ['resource.name']: resource.name.buckets[0]?.key, ['resource.sub_type']: resource.subtype.buckets[0]?.key, - cluster_id: resource.cluster_id.buckets[0]?.key, ['rule.section']: resource.cis_sections.buckets.map((v) => v.key), ['rule.benchmark.name']: resource.benchmarkName.buckets[0]?.key, + belongs_to: resource.belongs_to.buckets[0]?.key, compliance_score: resource.compliance_score.value, findings: { failed_findings: resource.failed_findings.doc_count, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx index 1112d1f9d3688..4887c4f28e790 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx @@ -175,28 +175,6 @@ const baseColumns = [ ), }, - { - field: 'cluster_id', - name: ( - - ), - sortable: true, - truncateText: true, - render: (section: string) => ( - - <>{section} - - ), - }, { field: '@timestamp', align: 'right', diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts index 53e7aa66f5e3c..69cce5ed45893 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/accounts_stats_collector.ts @@ -10,7 +10,7 @@ import type { AggregationsMultiBucketBase, SearchRequest, } from '@elastic/elasticsearch/lib/api/types'; -import { getIdentifierRuntimeMapping } from '../../get_identifier_runtime_mapping'; +import { getIdentifierRuntimeMapping } from '../../../../common/runtime_mappings/get_identifier_runtime_mapping'; import { calculatePostureScore } from '../../../../common/utils/helpers'; import type { CspmAccountsStats } from './types'; import { LATEST_FINDINGS_INDEX_DEFAULT_NS } from '../../../../common/constants'; diff --git a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts index 7308ab7e91596..bccb92035a3bb 100644 --- a/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts +++ b/x-pack/plugins/cloud_security_posture/server/lib/telemetry/collectors/resources_stats_collector.ts @@ -7,7 +7,7 @@ import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { Logger } from '@kbn/core/server'; import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; -import { getIdentifierRuntimeMapping } from '../../get_identifier_runtime_mapping'; +import { getIdentifierRuntimeMapping } from '../../../../common/runtime_mappings/get_identifier_runtime_mapping'; import type { CspmResourcesStats } from './types'; import { LATEST_FINDINGS_INDEX_DEFAULT_NS } from '../../../../common/constants'; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/get_clusters.ts b/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/get_clusters.ts index eb1f21efed659..736ba66a25508 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/get_clusters.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/get_clusters.ts @@ -22,7 +22,7 @@ import { import type { FailedFindingsQueryResult } from './get_grouped_findings_evaluation'; import { findingsEvaluationAggsQuery, getStatsFromFindingsEvaluationsAggs } from './get_stats'; import { KeyDocCount } from './compliance_dashboard'; -import { getIdentifierRuntimeMapping } from '../../lib/get_identifier_runtime_mapping'; +import { getIdentifierRuntimeMapping } from '../../../common/runtime_mappings/get_identifier_runtime_mapping'; export interface ClusterBucket extends FailedFindingsQueryResult, KeyDocCount { failed_findings: { diff --git a/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts b/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts index 2895fb43d0b51..2e8401cebd932 100644 --- a/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts +++ b/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts @@ -14,7 +14,7 @@ import { import { SearchRequest } from '@kbn/data-plugin/common'; import { ElasticsearchClient } from '@kbn/core/server'; import type { Logger } from '@kbn/core/server'; -import { getIdentifierRuntimeMapping } from '../lib/get_identifier_runtime_mapping'; +import { getIdentifierRuntimeMapping } from '../../common/runtime_mappings/get_identifier_runtime_mapping'; import { FindingsStatsTaskResult, TaskHealthStatus, ScoreByPolicyTemplateBucket } from './types'; import { BENCHMARK_SCORE_INDEX_DEFAULT_NS, From 860bc493cdf2634e39131c6755e874cce483b9cc Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 16 Feb 2023 11:46:52 +0100 Subject: [PATCH 065/210] Narrow scope of forced minimatch resolution (#151290) The "global" forced resolution of the `minimatch` package unintentionally downgraded some v5.x dependencies to v3.x. The only package where we need to force upgrade `minimatch` is the `globule` package which depends on `minimatch@~3.0.2`. So in this PR I've scoped the resolution to only concern itself with the `globule` dependencies. --- package.json | 2 +- yarn.lock | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4e48afef13c22..60d54b1c6f0ee 100644 --- a/package.json +++ b/package.json @@ -79,10 +79,10 @@ "**/chokidar": "^3.5.3", "**/deepmerge": "^4.2.2", "**/fast-deep-equal": "^3.1.1", + "**/globule/minimatch": "^3.1.2", "**/hoist-non-react-statics": "^3.3.2", "**/isomorphic-fetch/node-fetch": "^2.6.7", "**/istanbul-lib-coverage": "^3.2.0", - "**/minimatch": "^3.1.2", "**/pdfkit/crypto-js": "4.0.0", "**/refractor/prismjs": "~1.27.0", "**/trim": "1.0.1", diff --git a/yarn.lock b/yarn.lock index 06d1eb93ebdbf..98fd4c954e393 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11097,6 +11097,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + brace@0.11.1, brace@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" @@ -20901,13 +20908,27 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@5.0.1, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^5.0.1, minimatch@~3.0.2: +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@~3.0.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" From 0581fa3a91ec840b83c739859041b37f4e3a92f9 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 16 Feb 2023 11:47:44 +0100 Subject: [PATCH 066/210] Bump refractor from v3.5.0 to v3.6.0 (#151296) The new version of `refractor` upgrades its dependency to `prismjs` to a version without security vulnerabilities. This means we can drop our forced resolution of `prismjs`. --- package.json | 1 - yarn.lock | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 60d54b1c6f0ee..09d980b233cd1 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,6 @@ "**/isomorphic-fetch/node-fetch": "^2.6.7", "**/istanbul-lib-coverage": "^3.2.0", "**/pdfkit/crypto-js": "4.0.0", - "**/refractor/prismjs": "~1.27.0", "**/trim": "1.0.1", "**/typescript": "4.6.3", "**/use-composed-ref": "^1.3.0", diff --git a/yarn.lock b/yarn.lock index 98fd4c954e393..3b8f7ec40dad0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23296,7 +23296,7 @@ printj@~1.1.0: resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== -prismjs@^1.22.0, prismjs@~1.25.0, prismjs@~1.27.0: +prismjs@^1.22.0, prismjs@~1.27.0: version "1.27.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== @@ -24609,13 +24609,13 @@ redux@^4.0.0, redux@^4.0.4, redux@^4.1.2, redux@^4.2.0: "@babel/runtime" "^7.9.2" refractor@^3.2.0, refractor@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.5.0.tgz#334586f352dda4beaf354099b48c2d18e0819aec" - integrity sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg== + version "3.6.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" + integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== dependencies: hastscript "^6.0.0" parse-entities "^2.0.0" - prismjs "~1.25.0" + prismjs "~1.27.0" regedit@^5.0.0: version "5.0.0" From ad45020c8e120c982565311bea03a8dad0f4e9ff Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 16 Feb 2023 12:11:14 +0100 Subject: [PATCH 067/210] [Saved Object Management] Address `v1` HTTP API TODOs (#150892) ## Summary This PR addresses 4 TODOs identified in https://github.com/elastic/kibana/pull/149495. We address these TODOs by taking a closer look at actual use of flagged fields in public code: 1. `FindQueryHTTP['namespaceType']`: Probably OK to directly expose this as it seems highly unlikely this value will change soon... We should also be able to version it since it is a well known set. 2. `FindQueryHTTP['search']`: looks like it is allowing users to enter _any_ search value against SO attribs. However, this functionality is constrained because it only takes a search term and runs it against a server-side determined search field. The risk is that consumers of the server-side functionality do not keep their default search field up-to-date. 3. `FindQueryHTTP['fields']`: Our UI only ever passes in `id` here. We should consider a follow up PR to add some counter telemetry to track usage of this option and consider removing it entirely. 4. `FindQueryHTTP['sortField']`: Lock this down to a well known set of values (probably the riskiest change here). --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../common/types/v1.ts | 18 +++++++++++++----- .../public/lib/get_saved_object_counts.ts | 7 ++----- .../objects_table/saved_objects_table.tsx | 12 +++++------- .../server/routes/find.ts | 9 +++++++-- .../saved_objects_management/tsconfig.json | 1 - 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/plugins/saved_objects_management/common/types/v1.ts b/src/plugins/saved_objects_management/common/types/v1.ts index 86b2486c08726..78bd4a50c036e 100644 --- a/src/plugins/saved_objects_management/common/types/v1.ts +++ b/src/plugins/saved_objects_management/common/types/v1.ts @@ -75,7 +75,6 @@ export interface SavedObjectInvalidRelation { export interface SavedObjectManagementTypeInfo { name: string; - // TODO: Fix. We should not directly expose these values to public code. namespaceType: SavedObjectsNamespaceType; hidden: boolean; displayName: string; @@ -118,15 +117,24 @@ export interface FindQueryHTTP { perPage?: number; page?: number; type: string | string[]; - // TODO: Fix. this API allows writing an arbitrary query that is passed straight to our persistence layer, thus leaking SO attributes to the public... + /** + * SO's can register one or more "defaultSearchField"'s against which this query will run using the + * {@link SavedObjectsFindOptions['searchFields'] | search fields} option. + * + * Therefore we are not directly exposing SO attributes to the public here. + */ search?: string; defaultSearchOperator?: FindSearchOperatorHTTP; - // TODO: Fix. this API allows sorting by any field, thus leaking SO attributes to the public... - sortField?: string; + sortField?: keyof SavedObjectWithMetadata; sortOrder?: FindSortOrderHTTP; hasReference?: ReferenceHTTP | ReferenceHTTP[]; hasReferenceOperator?: FindSearchOperatorHTTP; - // TODO: Fix. This exposes attribute schemas to clients. + /** + * It is not clear who might be using this API option, the SOM UI only ever passes in "id" here. + * + * TODO: Determine use. If not in use we should remove this option. If in use we must deprecate and eventually + * remove. + */ fields?: string | string[]; } diff --git a/src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts b/src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts index 23d2818257be2..6366b59a53225 100644 --- a/src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts +++ b/src/plugins/saved_objects_management/public/lib/get_saved_object_counts.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import type { HttpStart, SavedObjectsFindOptionsReference } from '@kbn/core/public'; +import type { HttpStart } from '@kbn/core/public'; import type { v1 } from '../../common'; export async function getSavedObjectCounts({ @@ -16,10 +16,7 @@ export async function getSavedObjectCounts({ references, }: { http: HttpStart; - typesToInclude: string[]; - searchString?: string; - references?: SavedObjectsFindOptionsReference[]; -}): Promise { +} & v1.ScrollCountBodyHTTP): Promise { return await http.post(`/api/kibana/management/saved_objects/scroll/counts`, { body: JSON.stringify({ typesToInclude, searchString, references }), }); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx index 9f6bf01f46cad..264823dd8e991 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx @@ -13,14 +13,13 @@ import { saveAs } from '@elastic/filesaver'; import { EuiSpacer, Query, CriteriaWithPagination } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { HttpStart, OverlayStart, NotificationsStart, ApplicationStart } from '@kbn/core/public'; -import type { SavedObjectsFindOptions } from '@kbn/core-saved-objects-api-server'; import { RedirectAppLinks } from '@kbn/kibana-react-plugin/public'; import { SavedObjectsTaggingApi } from '@kbn/saved-objects-tagging-oss-plugin/public'; import { DataViewsContract } from '@kbn/data-views-plugin/public'; import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { CustomBrandingStart } from '@kbn/core-custom-branding-browser'; import { Subscription } from 'rxjs'; -import type { SavedObjectManagementTypeInfo } from '../../../common/types'; +import type { SavedObjectManagementTypeInfo, FindQueryHTTP } from '../../../common/types/latest'; import { parseQuery, getSavedObjectCounts, @@ -233,17 +232,16 @@ export class SavedObjectsTable extends Component = schema.oneOf([ + schema.literal('created_at'), + schema.literal('updated_at'), + schema.literal('type'), + ]); router.get( { @@ -35,7 +40,7 @@ export const registerFindRoute = ( type: schema.oneOf([schema.string(), schema.arrayOf(schema.string())]), search: schema.maybe(schema.string()), defaultSearchOperator: searchOperatorSchema, - sortField: schema.maybe(schema.string()), + sortField: schema.maybe(sortFieldSchema), sortOrder: schema.maybe(schema.oneOf([schema.literal('asc'), schema.literal('desc')])), hasReference: schema.maybe( schema.oneOf([referenceSchema, schema.arrayOf(referenceSchema)]) diff --git a/src/plugins/saved_objects_management/tsconfig.json b/src/plugins/saved_objects_management/tsconfig.json index c578ea0fbecc5..7e09853f11e88 100644 --- a/src/plugins/saved_objects_management/tsconfig.json +++ b/src/plugins/saved_objects_management/tsconfig.json @@ -21,7 +21,6 @@ "@kbn/utility-types", "@kbn/i18n-react", "@kbn/test-jest-helpers", - "@kbn/core-saved-objects-api-server", "@kbn/monaco", "@kbn/config-schema", "@kbn/core-custom-branding-browser-mocks", From 3479a4381b257835926c0db0df32dc3c69b3d27c Mon Sep 17 00:00:00 2001 From: Jordan <51442161+JordanSh@users.noreply.github.com> Date: Thu, 16 Feb 2023 13:29:56 +0200 Subject: [PATCH 068/210] [Cloud Security] Minor text fixes (#151360) --- .../public/pages/benchmarks/benchmarks.tsx | 2 +- .../public/pages/benchmarks/benchmarks_table.tsx | 2 +- .../public/pages/rules/rules_table_header.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx index cfcc48b08b15d..d6d4f2acb8c42 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks.tsx @@ -126,7 +126,7 @@ const BenchmarkSearchField = ({ isLoading={isLoading} placeholder={i18n.translate( 'xpack.csp.benchmarks.benchmarkSearchField.searchPlaceholder', - { defaultMessage: 'Search integration name' } + { defaultMessage: 'Search by Integration Name' } )} incremental /> diff --git a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx index dcef8163f028b..35515ea1cca52 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/benchmarks/benchmarks_table.tsx @@ -159,7 +159,7 @@ const BENCHMARKS_TABLE_COLUMNS: Array> = [ { field: 'package_policy.created_at', name: i18n.translate('xpack.csp.benchmarks.benchmarksTable.createdAtColumnTitle', { - defaultMessage: 'Created at', + defaultMessage: 'Created', }), dataType: 'date', truncateText: true, 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 2cebe21dac53d..1385536c97dbf 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 @@ -36,7 +36,7 @@ const SearchField = ({ setLocalValue(e.target.value)} From f80a98d256c5f9ce43e01a36437cc3c0e70b2846 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 16 Feb 2023 12:51:16 +0100 Subject: [PATCH 069/210] [Observability] Update code owner (#151430) --- .github/CODEOWNERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3dd0eae82192b..a77a70ded523c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -461,7 +461,6 @@ src/plugins/newsfeed @elastic/kibana-core test/common/plugins/newsfeed @elastic/kibana-core x-pack/plugins/notifications @elastic/appex-sharedux x-pack/test/cases_api_integration/common/plugins/observability @elastic/response-ops -x-pack/plugins/observability @elastic/observability-ui x-pack/test/security_api_integration/plugins/oidc_provider @elastic/kibana-security test/common/plugins/otel_metrics @elastic/infra-monitoring-ui packages/kbn-optimizer @elastic/kibana-operations @@ -772,6 +771,9 @@ packages/kbn-yarn-lock-validator @elastic/kibana-operations /x-pack/plugins/observability/public/pages/rule_details @elastic/actionable-observability /x-pack/test/observability_functional @elastic/actionable-observability +# keep it below actionable observability +x-pack/plugins/observability @elastic/observability-ui + # Infra Monitoring /x-pack/test/functional/apps/infra @elastic/infra-monitoring-ui /x-pack/test/api_integration/apis/infra @elastic/infra-monitoring-ui From b07ef34b9781c8abf3f26552f5ee241abf54e494 Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Thu, 16 Feb 2023 11:51:54 +0000 Subject: [PATCH 070/210] [SecuritySolution] Track ui metrics for landing pages, nav, and breadcrumbs (#150706) ## Summary Original issue: https://github.com/elastic/kibana/issues/144945 Steps to verify: 1. Click on navigations, landing page items, and bread crumbs. 2. Create some dashboards from `dashboard` landing page. 3. Visit http://localhost:5601/api/stats?extended=true&legacy=true, check `ui_counters` for the clicked events. Find `security_solution dashboardMetics` for dashboard usage. This PR implements: 1. ui tracking(click) for navigations, landing pages, bread crumbs 2. The usage of custom dashboards - the dashboard saved objects labeled with `security solution` 3. ui tracking `legacy_navigation_` for old navigations navigation_ui_metric-1 breadcrumps_ui_metric grouped_nav_manage landing_page_menege_ui-Metrics grouped_nav_explore grouped_nav_dashboards navigation_ui_metric-2 landing_page_explore_ui_metrics landing_page_dashboards_ui_metrics ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../security_solution/common/constants.ts | 1 + .../navigation/breadcrumbs/index.ts | 5 +- .../security_side_nav.test.tsx | 2 + .../security_side_nav/security_side_nav.tsx | 6 +- .../solution_grouped_nav.test.tsx | 46 ++++++++++- .../solution_grouped_nav.tsx | 23 +++++- .../solution_grouped_nav_panel.test.tsx | 42 ++++++++-- .../solution_grouped_nav_panel.tsx | 5 ++ .../solution_grouped_nav/telemetry/const.ts | 11 +++ .../telemetry/telemetry_context.tsx | 28 +++++++ .../navigation/solution_grouped_nav/types.ts | 7 ++ .../use_navigation_items.tsx | 2 + .../use_security_dashboards_table.test.tsx | 20 +++++ .../use_security_dashboards_table.tsx | 2 + .../containers/dashboards/utils.test.ts | 3 +- .../common/containers/dashboards/utils.ts | 2 +- .../public/common/lib/telemetry/index.ts | 10 +++ .../components/landing_links_icons.test.tsx | 20 +++++ .../components/landing_links_icons.tsx | 8 +- .../components/landing_links_images.test.tsx | 23 ++++++ .../components/landing_links_images.tsx | 13 ++- .../landing_pages/pages/dashboards.test.tsx | 11 +++ .../public/landing_pages/pages/dashboards.tsx | 2 + .../management/pages/blocklist/index.tsx | 5 +- .../server/usage/collector.ts | 45 ++++++++++- .../dashboards/get_dashboards_metrics.test.ts | 65 +++++++++++++++ .../dashboards/get_dashboards_metrics.ts | 58 ++++++++++++++ .../server/usage/dashboards/mocks.ts | 80 +++++++++++++++++++ .../security_solution/server/usage/types.ts | 14 ++++ .../schema/xpack_plugins.json | 51 ++++++++++++ 30 files changed, 586 insertions(+), 24 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/const.ts create mode 100644 x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/telemetry_context.tsx create mode 100644 x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.test.ts create mode 100644 x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.ts create mode 100644 x-pack/plugins/security_solution/server/usage/dashboards/mocks.ts diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index 0a100ba2870b7..b2e623eebddb6 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -61,6 +61,7 @@ export const DEFAULT_RULE_REFRESH_INTERVAL_ON = true as const; export const DEFAULT_RULE_REFRESH_INTERVAL_VALUE = 60000 as const; // ms export const DEFAULT_RULE_NOTIFICATION_QUERY_SIZE = 100 as const; export const SECURITY_FEATURE_ID = 'Security' as const; +export const SECURITY_TAG_NAME = 'Security Solution' as const; export const DEFAULT_SPACE_ID = 'default' as const; export const DEFAULT_RELATIVE_DATE_THRESHOLD = 24 as const; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.ts b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.ts index 20d09e38d32b6..6dd4a0e94530d 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/index.ts @@ -9,6 +9,7 @@ import { last, omit } from 'lodash/fp'; import { useDispatch } from 'react-redux'; import type { ChromeBreadcrumb } from '@kbn/core/public'; +import { METRIC_TYPE } from '@kbn/analytics'; import type { StartServices } from '../../../../types'; import { getTrailingBreadcrumbs as getHostDetailsBreadcrumbs } from '../../../../explore/hosts/pages/details/utils'; import { getTrailingBreadcrumbs as getIPDetailsBreadcrumbs } from '../../../../explore/network/pages/details'; @@ -27,6 +28,7 @@ import { getLeadingBreadcrumbsForSecurityPage } from './get_breadcrumbs_for_page import type { GetSecuritySolutionUrl } from '../../link_to'; import { useGetSecuritySolutionUrl } from '../../link_to'; import { useIsGroupedNavigationEnabled } from '../helpers'; +import { TELEMETRY_EVENT, track } from '../../../lib/telemetry'; export interface ObjectWithNavTabs { navTabs: GenericNavRecord; @@ -59,7 +61,8 @@ export const useSetBreadcrumbs = () => { ? { onClick: (ev) => { ev.preventDefault(); - + const trakedPath = breadcrumb.href?.split('?')[0] ?? 'unknown'; + track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.BREADCRUMB}${trakedPath}`); dispatch(timelineActions.showTimeline({ id: TimelineId.active, show: false })); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.test.tsx index f114c7e1dc917..ee03a72fcf924 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.test.tsx @@ -13,6 +13,7 @@ import { SecuritySideNav } from './security_side_nav'; import type { SolutionGroupedNavProps } from '../solution_grouped_nav/solution_grouped_nav'; import type { NavLinkItem } from '../types'; import { bottomNavOffset } from '../../../lib/helpers'; +import { track } from '../../../lib/telemetry'; const manageNavLink: NavLinkItem = { id: SecurityPageName.administration, @@ -91,6 +92,7 @@ describe('SecuritySideNav', () => { }, ], footerItems: [], + tracker: track, }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.tsx index ce239c34eae4a..dc4d7baafa33f 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/security_side_nav/security_side_nav.tsx @@ -23,6 +23,7 @@ import { EuiIconLaunch } from './icons/launch'; import { useShowTimeline } from '../../../utils/timeline/use_show_timeline'; import { useIsPolicySettingsBarVisible } from '../../../../management/pages/policy/view/policy_hooks'; import { bottomNavOffset } from '../../../lib/helpers'; +import { track } from '../../../lib/telemetry'; const isFooterNavItem = (id: SecurityPageName) => id === SecurityPageName.landing || id === SecurityPageName.administration; @@ -65,7 +66,9 @@ const useFormatSideNavItem = (): FormatSideNavItems => { const formatDefaultItem = (navItem: NavLinkItem): DefaultSideNavItem => ({ id: navItem.id, label: navItem.title, - ...getSecuritySolutionLinkProps({ deepLinkId: navItem.id }), + ...getSecuritySolutionLinkProps({ + deepLinkId: navItem.id, + }), ...(navItem.categories && navItem.categories.length > 0 ? { categories: navItem.categories } : {}), @@ -166,6 +169,7 @@ export const SecuritySideNav: React.FC = () => { footerItems={footerItems} selectedId={selectedId} bottomOffset={bottomOffset} + tracker={track} /> ); }; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.test.tsx index 87351a8528670..91c71946d649e 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.test.tsx @@ -12,6 +12,10 @@ import { TestProviders } from '../../../mock'; import type { SolutionGroupedNavProps } from './solution_grouped_nav'; import { SolutionGroupedNav } from './solution_grouped_nav'; import type { SideNavItem } from './types'; +import { METRIC_TYPE } from '@kbn/analytics'; +import { TELEMETRY_EVENT } from './telemetry/const'; + +const mockTrack = jest.fn(); const mockItems: SideNavItem[] = [ { @@ -35,9 +39,17 @@ const mockItems: SideNavItem[] = [ ]; const renderNav = (props: Partial = {}) => - render(, { - wrapper: TestProviders, - }); + render( + , + { + wrapper: TestProviders, + } + ); describe('SolutionGroupedNav', () => { beforeEach(() => { @@ -80,6 +92,23 @@ describe('SolutionGroupedNav', () => { result.getByTestId(`groupedNavItemLink-${SecurityPageName.exploreLanding}`).click(); expect(mockOnClick).toHaveBeenCalled(); }); + + it('should send telemetry if link clicked', () => { + const items = [ + ...mockItems, + { + id: SecurityPageName.exploreLanding, + label: 'Explore', + href: '/explore', + }, + ]; + const result = renderNav({ items }); + result.getByTestId(`groupedNavItemLink-${SecurityPageName.exploreLanding}`).click(); + expect(mockTrack).toHaveBeenCalledWith( + METRIC_TYPE.CLICK, + `${TELEMETRY_EVENT.NAVIGATION}${SecurityPageName.exploreLanding}` + ); + }); }); describe('panel button toggle', () => { @@ -102,6 +131,17 @@ describe('SolutionGroupedNav', () => { expect(result.getByText('Overview')).toBeInTheDocument(); }); + it('should telemetry when button is clicked', () => { + const result = renderNav(); + expect(result.queryByTestId('groupedNavPanel')).not.toBeInTheDocument(); + + result.getByTestId(`groupedNavItemButton-${SecurityPageName.dashboardsLanding}`).click(); + expect(mockTrack).toHaveBeenCalledWith( + METRIC_TYPE.CLICK, + `${TELEMETRY_EVENT.GROUPED_NAVIGATION_TOGGLE}${SecurityPageName.dashboardsLanding}` + ); + }); + it('should close the group panel when the same button is clicked', () => { const result = renderNav(); result.getByTestId(`groupedNavItemButton-${SecurityPageName.dashboardsLanding}`).click(); diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.tsx index 916b00cba75b5..382cb5b4d4293 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav.tsx @@ -15,18 +15,24 @@ import { } from '@elastic/eui'; import classNames from 'classnames'; +import { METRIC_TYPE } from '@kbn/analytics'; import { SolutionNavPanel } from './solution_grouped_nav_panel'; import { EuiListGroupItemStyled } from './solution_grouped_nav.styles'; -import type { DefaultSideNavItem, SideNavItem } from './types'; +import type { DefaultSideNavItem, SideNavItem, Tracker } from './types'; import { isCustomItem, isDefaultItem } from './types'; import { EuiIconSpaces } from './icons/spaces'; import type { LinkCategories } from '../../../links'; +import { TELEMETRY_EVENT } from './telemetry/const'; +import { TelemetryContextProvider, useTelemetryContext } from './telemetry/telemetry_context'; export interface SolutionGroupedNavProps { items: SideNavItem[]; selectedId: string; footerItems?: SideNavItem[]; bottomOffset?: string; + // This enables Telemetry tracking inside group nav, this has to be binded with appId + // e.g.: usageCollection?.reportUiCounter?.bind(null, appId) + tracker?: Tracker; } export interface SolutionNavItemsProps { items: SideNavItem[]; @@ -55,6 +61,7 @@ export const SolutionGroupedNavComponent: React.FC = ({ selectedId, footerItems = [], bottomOffset, + tracker, }) => { const isMobileSize = useIsWithinBreakpoints(['xs', 's']); @@ -117,7 +124,7 @@ export const SolutionGroupedNavComponent: React.FC = ({ }, [activePanelNavId, bottomOffset, navItemsById, onClosePanelNav, onOutsidePanelClick]); return ( - <> + @@ -150,7 +157,7 @@ export const SolutionGroupedNavComponent: React.FC = ({ {portalNav} - + ); }; export const SolutionGroupedNav = React.memo(SolutionGroupedNavComponent); @@ -184,11 +191,18 @@ const SolutionNavItemComponent: React.FC = ({ hasPanelNav, onOpenPanelNav, }) => { + const { tracker } = useTelemetryContext(); + if (isCustomItem(item)) { return {item.render(isSelected)}; } + const { id, href, label, onClick } = item; + const onLinkClicked: React.MouseEventHandler = (ev) => { + tracker?.(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.NAVIGATION}${id}`); + onClick?.(ev); + }; const itemClassNames = classNames('solutionGroupedNavItem', { 'solutionGroupedNavItem--isActive': isActive, 'solutionGroupedNavItem--isPrimary': isSelected, @@ -198,6 +212,7 @@ const SolutionNavItemComponent: React.FC = ({ const onButtonClick: React.MouseEventHandler = (ev) => { ev.preventDefault(); ev.stopPropagation(); + tracker?.(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.GROUPED_NAVIGATION_TOGGLE}${id}`); onOpenPanelNav(id); }; @@ -206,7 +221,7 @@ const SolutionNavItemComponent: React.FC = ({ diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.test.tsx index 3ff29d0f693e1..aeb7e21f21bab 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.test.tsx @@ -15,6 +15,9 @@ import { SolutionNavPanel } from './solution_grouped_nav_panel'; import type { DefaultSideNavItem } from './types'; import { bottomNavOffset } from '../../../lib/helpers'; import { BETA } from '@kbn/kubernetes-security-plugin/common/translations'; +import { TELEMETRY_EVENT } from './telemetry/const'; +import { METRIC_TYPE } from '@kbn/analytics'; +import { TelemetryContextProvider } from './telemetry/telemetry_context'; const mockUseIsWithinMinBreakpoint = jest.fn(() => true); jest.mock('@elastic/eui', () => { @@ -25,6 +28,8 @@ jest.mock('@elastic/eui', () => { }; }); +const mockTrack = jest.fn(); + const mockItems: DefaultSideNavItem[] = [ { id: SecurityPageName.hosts, @@ -67,13 +72,15 @@ const renderNavPanel = (props: Partial = {}) => render( <>
- + + + , { wrapper: TestProviders, @@ -139,6 +146,27 @@ describe('SolutionGroupedNav', () => { result.getByTestId(`groupedNavPanelLink-${SecurityPageName.users}`).click(); expect(mockOnClick).toHaveBeenCalled(); }); + + it('should send telemetry if link clicked', () => { + const mockOnClick = jest.fn((ev) => { + ev.preventDefault(); + }); + const items = [ + ...mockItems, + { + id: SecurityPageName.users, + label: 'Users', + href: '/users', + onClick: mockOnClick, + }, + ]; + const result = renderNavPanel({ items }); + result.getByTestId(`groupedNavPanelLink-${SecurityPageName.users}`).click(); + expect(mockTrack).toHaveBeenCalledWith( + METRIC_TYPE.CLICK, + `${TELEMETRY_EVENT.GROUPED_NAVIGATION}${SecurityPageName.users}` + ); + }); }); describe('bottom offset', () => { diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.tsx index ad917d3b6bf13..25c1a9565b8b8 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/solution_grouped_nav_panel.tsx @@ -23,6 +23,7 @@ import { useIsWithinMinBreakpoint, } from '@elastic/eui'; import classNames from 'classnames'; +import { METRIC_TYPE } from '@kbn/analytics'; import { EuiPanelStyled, EuiTitleStyled, @@ -32,6 +33,8 @@ import { import type { DefaultSideNavItem } from './types'; import type { LinkCategories } from '../../../links/types'; import { NavItemBetaBadge } from '../nav_item_beta_badge'; +import { TELEMETRY_EVENT } from './telemetry/const'; +import { useTelemetryContext } from './telemetry/telemetry_context'; export interface SolutionNavPanelProps { onClose: () => void; @@ -163,6 +166,7 @@ const SolutionNavPanelCategories: React.FC = ({ const SolutionNavPanelItems: React.FC = ({ items, onClose }) => { const panelLinkClassNames = classNames('solutionGroupedNavPanelLink'); const panelLinkItemClassNames = classNames('solutionGroupedNavPanelLinkItem'); + const { tracker } = useTelemetryContext(); return ( <> {items.map(({ id, href, onClick, label, description, isBeta, betaOptions }) => ( @@ -172,6 +176,7 @@ const SolutionNavPanelItems: React.FC = ({ items, on data-test-subj={`groupedNavPanelLink-${id}`} href={href} onClick={(ev) => { + tracker?.(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.GROUPED_NAVIGATION}${id}`); onClose(); onClick?.(ev); }} diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/const.ts b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/const.ts new file mode 100644 index 0000000000000..3daaaf0e61fec --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/const.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 enum TELEMETRY_EVENT { + GROUPED_NAVIGATION = 'grouped_navigation_', + GROUPED_NAVIGATION_TOGGLE = 'grouped_navigation_toggle_', + NAVIGATION = 'navigation_', +} diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/telemetry_context.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/telemetry_context.tsx new file mode 100644 index 0000000000000..c7e97969ad31c --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/telemetry/telemetry_context.tsx @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FC } from 'react'; +import React, { createContext, useContext } from 'react'; +import type { Tracker } from '../types'; + +interface TelemetryProviderProps { + tracker?: Tracker; +} + +const TelemetryContext = createContext<{ tracker?: Tracker } | null>(null); + +export const TelemetryContextProvider: FC = ({ children, tracker }) => { + return {children}; +}; + +export const useTelemetryContext = () => { + const context = useContext(TelemetryContext); + if (!context) { + throw new Error('No TelemetryContext found.'); + } + return context; +}; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/types.ts b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/types.ts index f47e1755cc796..46280fb82e18c 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/types.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/solution_grouped_nav/types.ts @@ -6,9 +6,16 @@ */ import type React from 'react'; +import type { UiCounterMetricType } from '@kbn/analytics'; + import type { SecurityPageName } from '../../../../app/types'; import type { LinkCategories } from '../../../links/types'; +export type Tracker = ( + type: UiCounterMetricType, + event: string | string[], + count?: number | undefined +) => void; export interface DefaultSideNavItem { id: SecurityPageName; label: string; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx index cd5da688ead2a..fb8ff7f920244 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_navigation_items.tsx @@ -21,6 +21,7 @@ import { SecurityPageName } from '../../../../../common/constants'; import { useIsExperimentalFeatureEnabled } from '../../../hooks/use_experimental_features'; import { useGlobalQueryString } from '../../../utils/global_query_string'; import { useUserPrivileges } from '../../user_privileges'; +import { METRIC_TYPE, TELEMETRY_EVENT, track } from '../../../lib/telemetry'; export const usePrimaryNavigationItems = ({ navTabs, @@ -37,6 +38,7 @@ export const usePrimaryNavigationItems = ({ const handleClick = (ev: React.MouseEvent) => { ev.preventDefault(); + track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.LEGACY_NAVIGATION}${id}`); navigateTo({ deepLinkId: id, path: urlSearch }); }; diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.test.tsx b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.test.tsx index bc02fb3b205d6..3a6a12be604e9 100644 --- a/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.test.tsx +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.test.tsx @@ -17,8 +17,10 @@ import { useSecurityDashboardsTableColumns, useSecurityDashboardsTableItems, } from './use_security_dashboards_table'; +import * as telemetry from '../../lib/telemetry'; jest.mock('../../lib/kibana'); +const spyTrack = jest.spyOn(telemetry, 'track'); const TAG_ID = 'securityTagId'; const DASHBOARDS_RESPONSE: DashboardTableItem[] = [ @@ -182,4 +184,22 @@ describe('Security Dashboards Table hooks', () => { expect(result.queryAllByTestId('dashboardTableDescriptionCell')).toHaveLength(2); expect(result.queryAllByTestId('dashboardTableTagsCell')).toHaveLength(2); }); + + it('should send telemetry when dashboard title clicked', async () => { + const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: columnsResult } = renderUseDashboardsTableColumns(); + + const result = render( + , + { + wrapper: TestProviders, + } + ); + + result.getByText('title1').click(); + expect(spyTrack).toHaveBeenCalledWith( + telemetry.METRIC_TYPE.CLICK, + telemetry.TELEMETRY_EVENT.DASHBOARD + ); + }); }); diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.tsx b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.tsx index 71fad3639dc5c..771e68fde0b78 100644 --- a/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.tsx +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/use_security_dashboards_table.tsx @@ -15,6 +15,7 @@ import { LinkAnchor } from '../../components/links'; import { useKibana, useNavigateTo } from '../../lib/kibana'; import * as i18n from './translations'; import { useFetch, REQUEST_NAMES } from '../../hooks/use_fetch'; +import { METRIC_TYPE, TELEMETRY_EVENT, track } from '../../lib/telemetry'; export interface DashboardTableItem extends SavedObject { title?: string; @@ -63,6 +64,7 @@ export const useSecurityDashboardsTableColumns = (): Array< (href: string): MouseEventHandler => (ev) => { ev.preventDefault(); + track(METRIC_TYPE.CLICK, TELEMETRY_EVENT.DASHBOARD); navigateTo({ url: href }); }, [navigateTo] diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts b/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts index 8fceb9369ce40..24911a82a2e82 100644 --- a/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.test.ts @@ -6,7 +6,8 @@ */ import type { SavedObjectsClientContract } from '@kbn/core/public'; -import { getSecurityTagId, SECURITY_TAG_NAME } from './utils'; +import { SECURITY_TAG_NAME } from '../../../../common/constants'; +import { getSecurityTagId } from './utils'; const TAG_ID = 'securityTagId'; const DEFAULT_TAGS_RESPONSE = [ diff --git a/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts b/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts index c76b79bfece89..f5f4e56424513 100644 --- a/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts +++ b/x-pack/plugins/security_solution/public/common/containers/dashboards/utils.ts @@ -9,8 +9,8 @@ import type { SavedObjectAttributes } from '@kbn/securitysolution-io-ts-alerting import type { SavedObjectsClientContract, SavedObject } from '@kbn/core/public'; import type { Tag, TagAttributes } from '@kbn/saved-objects-tagging-plugin/common'; import type { SavedObjectsTaggingApi } from '@kbn/saved-objects-tagging-oss-plugin/public'; +import { SECURITY_TAG_NAME } from '../../../../common/constants'; -export const SECURITY_TAG_NAME = 'Security Solution' as const; export const SECURITY_TAG_DESCRIPTION = 'Security Solution auto-generated tag' as const; /** diff --git a/x-pack/plugins/security_solution/public/common/lib/telemetry/index.ts b/x-pack/plugins/security_solution/public/common/lib/telemetry/index.ts index 45107a06122db..19aaf93417a3e 100644 --- a/x-pack/plugins/security_solution/public/common/lib/telemetry/index.ts +++ b/x-pack/plugins/security_solution/public/common/lib/telemetry/index.ts @@ -56,4 +56,14 @@ export enum TELEMETRY_EVENT { // UI Interactions TAB_CLICKED = 'tab_', + + // Landing pages + LANDING_CARD = 'landing_card_', + // Landing page - dashboard + DASHBOARD = 'navigate_to_dashboard', + CREATE_DASHBOARD = 'create_dashboard', + + // Breadcrumbs + BREADCRUMB = 'breadcrumb_', + LEGACY_NAVIGATION = 'legacy_navigation_', } diff --git a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.test.tsx b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.test.tsx index b340eb0fe741b..eb986c7787769 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.test.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.test.tsx @@ -11,6 +11,7 @@ import { SecurityPageName } from '../../app/types'; import type { NavLinkItem } from '../../common/components/navigation/types'; import { TestProviders } from '../../common/mock'; import { LandingLinksIcons } from './landing_links_icons'; +import * as telemetry from '../../common/lib/telemetry'; const DEFAULT_NAV_ITEM: NavLinkItem = { id: SecurityPageName.overview, @@ -18,6 +19,7 @@ const DEFAULT_NAV_ITEM: NavLinkItem = { description: 'TEST DESCRIPTION', icon: 'myTestIcon', }; +const spyTrack = jest.spyOn(telemetry, 'track'); const mockNavigateTo = jest.fn(); jest.mock('../../common/lib/kibana', () => { @@ -66,4 +68,22 @@ describe('LandingLinksIcons', () => { expect(mockNavigateTo).toHaveBeenCalledWith({ url: '/administration' }); }); + + it('sends telemetry', () => { + const id = SecurityPageName.administration; + const title = 'myTestLable'; + + const { getByText } = render( + + + + ); + + getByText(title).click(); + + expect(spyTrack).toHaveBeenCalledWith( + telemetry.METRIC_TYPE.CLICK, + `${telemetry.TELEMETRY_EVENT.LANDING_CARD}${id}` + ); + }); }); diff --git a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.tsx b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.tsx index 7ccd58117b3b2..01ba5862795ce 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_icons.tsx @@ -14,6 +14,7 @@ import { withSecuritySolutionLink, } from '../../common/components/links'; import type { NavLinkItem } from '../../common/components/navigation/types'; +import { METRIC_TYPE, TELEMETRY_EVENT, track } from '../../common/lib/telemetry'; interface LandingLinksImagesProps { items: NavLinkItem[]; @@ -53,7 +54,12 @@ export const LandingLinksIcons: React.FC = ({ items }) - + { + track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.LANDING_CARD}${id}`); + }} + >

{title}

diff --git a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx index 464a768c5c5cf..bf796b52f8fcd 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.test.tsx @@ -12,6 +12,7 @@ import { SecurityPageName } from '../../app/types'; import type { NavLinkItem } from '../../common/components/navigation/types'; import { TestProviders } from '../../common/mock'; import { LandingLinksImages, LandingImageCards } from './landing_links_images'; +import * as telemetry from '../../common/lib/telemetry'; const DEFAULT_NAV_ITEM: NavLinkItem = { id: SecurityPageName.overview, @@ -34,12 +35,16 @@ jest.mock('../../common/lib/kibana/kibana_react', () => { services: { application: { getUrlForApp: jest.fn(), + navigateToApp: jest.fn(), + navigateToUrl: jest.fn(), }, }, }), }; }); +const spyTrack = jest.spyOn(telemetry, 'track'); + describe('LandingLinksImages', () => { it('renders', () => { const title = 'test label'; @@ -113,6 +118,24 @@ describe('LandingImageCards', () => { expect(getByTestId('LandingImageCard-image')).toHaveAttribute('src', image); }); + it('sends telemetry', () => { + const image = 'test_image.jpeg'; + const title = 'TEST LABEL'; + + const { getByText } = render( + + + + ); + + getByText(title).click(); + + expect(spyTrack).toHaveBeenCalledWith( + telemetry.METRIC_TYPE.CLICK, + `${telemetry.TELEMETRY_EVENT.LANDING_CARD}${DEFAULT_NAV_ITEM.id}` + ); + }); + it('renders beta tag when isBeta is true', () => { const { queryByText } = render( diff --git a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx index ff7c791c01e32..a71d93f9284e3 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/components/landing_links_images.tsx @@ -13,11 +13,13 @@ import { EuiText, EuiTitle, } from '@elastic/eui'; +import { METRIC_TYPE } from '@kbn/analytics'; import React from 'react'; import styled from 'styled-components'; import { withSecuritySolutionLink } from '../../common/components/links'; import { NavItemBetaBadge } from '../../common/components/navigation/nav_item_beta_badge'; import type { NavLinkItem } from '../../common/components/navigation/types'; +import { TELEMETRY_EVENT, track } from '../../common/lib/telemetry'; interface LandingImagesProps { items: NavLinkItem[]; @@ -59,7 +61,13 @@ export const LandingLinksImages: React.FC = ({ items }) => ( {items.map(({ title, description, image, id, isBeta, betaOptions }) => ( - + { + track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.LANDING_CARD}${id}`); + }} + > {/* Empty onClick is to force hover style on `EuiPanel` */} {}}> @@ -141,6 +149,9 @@ export const LandingImageCards: React.FC = React.memo(({ ite } description={{description}} + onClick={() => { + track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.LANDING_CARD}${id}`); + }} /> ))} diff --git a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx index a9b3122a70543..97eb89695bc98 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.test.tsx @@ -12,6 +12,7 @@ import { TestProviders } from '../../common/mock'; import { DashboardsLandingPage } from './dashboards'; import type { NavLinkItem } from '../../common/components/navigation/types'; import { useCapabilities } from '../../common/lib/kibana'; +import * as telemetry from '../../common/lib/telemetry'; jest.mock('../../common/lib/kibana'); jest.mock('../../common/utils/route/spy_routes', () => ({ SpyRoute: () => null })); @@ -22,6 +23,7 @@ jest.mock('../../common/components/dashboards/dashboards_table', () => ({ const DEFAULT_DASHBOARD_CAPABILITIES = { show: true, createNew: true }; const mockUseCapabilities = useCapabilities as jest.Mock; mockUseCapabilities.mockReturnValue(DEFAULT_DASHBOARD_CAPABILITIES); +const spyTrack = jest.spyOn(telemetry, 'track'); const OVERVIEW_ITEM_LABEL = 'Overview'; const DETECTION_RESPONSE_ITEM_LABEL = 'Detection & Response'; @@ -150,6 +152,15 @@ describe('Dashboards landing', () => { expect(result.getByTestId('createDashboardButton')).toHaveAttribute('href', URL); }); + + it('should send telemetry', () => { + const result = renderDashboardLanding(); + result.getByTestId('createDashboardButton').click(); + expect(spyTrack).toHaveBeenCalledWith( + telemetry.METRIC_TYPE.CLICK, + telemetry.TELEMETRY_EVENT.CREATE_DASHBOARD + ); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx index 2123fbf770e95..ee97955b659ab 100644 --- a/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx +++ b/x-pack/plugins/security_solution/public/landing_pages/pages/dashboards.tsx @@ -25,6 +25,7 @@ import { useCapabilities, useNavigateTo } from '../../common/lib/kibana'; import { SpyRoute } from '../../common/utils/route/spy_routes'; import { LandingImageCards } from '../components/landing_links_images'; import * as i18n from './translations'; +import { METRIC_TYPE, TELEMETRY_EVENT, track } from '../../common/lib/telemetry'; /* eslint-disable @elastic/eui/href-or-on-click */ const Header: React.FC<{ canCreateDashboard: boolean }> = ({ canCreateDashboard }) => { @@ -45,6 +46,7 @@ const Header: React.FC<{ canCreateDashboard: boolean }> = ({ canCreateDashboard href={url} onClick={(ev) => { ev.preventDefault(); + track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.CREATE_DASHBOARD}`); navigateTo({ url }); }} data-test-subj="createDashboardButton" diff --git a/x-pack/plugins/security_solution/public/management/pages/blocklist/index.tsx b/x-pack/plugins/security_solution/public/management/pages/blocklist/index.tsx index 3ba5682ccec91..f80630a8474f0 100644 --- a/x-pack/plugins/security_solution/public/management/pages/blocklist/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/blocklist/index.tsx @@ -8,6 +8,7 @@ import { Switch } from 'react-router-dom'; import { Route } from '@kbn/shared-ux-router'; import React, { memo } from 'react'; +import { TrackApplicationView } from '@kbn/usage-collection-plugin/public'; import { MANAGEMENT_ROUTING_BLOCKLIST_PATH } from '../../common/constants'; import { NotFoundPage } from '../../../app/404'; import { Blocklist } from './view/blocklist'; @@ -19,13 +20,13 @@ import { SpyRoute } from '../../../common/utils/route/spy_routes'; */ export const BlocklistContainer = memo(() => { return ( - <> + - + ); }); diff --git a/x-pack/plugins/security_solution/server/usage/collector.ts b/x-pack/plugins/security_solution/server/usage/collector.ts index fc3d1c98a58a6..9296cf44478ae 100644 --- a/x-pack/plugins/security_solution/server/usage/collector.ts +++ b/x-pack/plugins/security_solution/server/usage/collector.ts @@ -6,16 +6,19 @@ */ import type { CollectorFetchContext } from '@kbn/usage-collection-plugin/server'; -import type { CollectorDependencies } from './types'; + +import type { CollectorDependencies, DashboardMetrics } from './types'; import { getDetectionsMetrics } from './detections/get_metrics'; import { getInternalSavedObjectsClient } from './get_internal_saved_objects_client'; import { getEndpointMetrics } from './endpoint/get_metrics'; +import { getDashboardMetrics } from './dashboards/get_dashboards_metrics'; export type RegisterCollector = (deps: CollectorDependencies) => void; export interface UsageData { detectionMetrics: {}; endpointMetrics: {}; + dashboardMetrics: DashboardMetrics; } export const registerCollector: RegisterCollector = ({ @@ -2405,11 +2408,44 @@ export const registerCollector: RegisterCollector = ({ _meta: { description: 'Number of active unique endpoints in last 24 hours' }, }, }, + dashboardMetrics: { + dashboard_tag: { + created_at: { + type: 'keyword', + _meta: { description: 'The time the tab was created' }, + }, + linked_dashboards_count: { + type: 'long', + _meta: { description: 'Number of associated dashboards' }, + }, + }, + dashboards: { + type: 'array', + items: { + created_at: { + type: 'keyword', + _meta: { description: 'The time the dashboard was created' }, + }, + dashboard_id: { + type: 'keyword', + _meta: { description: 'The dashboard saved object id' }, + }, + error_message: { + type: 'keyword', + _meta: { description: 'The relevant error message' }, + }, + error_status_code: { + type: 'long', + _meta: { description: 'The relevant error status code' }, + }, + }, + }, + }, }, isReady: () => true, fetch: async ({ esClient }: CollectorFetchContext): Promise => { const savedObjectsClient = await getInternalSavedObjectsClient(core); - const [detectionMetrics, endpointMetrics] = await Promise.allSettled([ + const [detectionMetrics, endpointMetrics, dashboardMetrics] = await Promise.allSettled([ getDetectionsMetrics({ eventLogIndex, signalsIndex, @@ -2419,10 +2455,15 @@ export const registerCollector: RegisterCollector = ({ mlClient: ml, }), getEndpointMetrics({ esClient, logger }), + getDashboardMetrics({ + savedObjectsClient, + logger, + }), ]); return { detectionMetrics: detectionMetrics.status === 'fulfilled' ? detectionMetrics.value : {}, endpointMetrics: endpointMetrics.status === 'fulfilled' ? endpointMetrics.value : {}, + dashboardMetrics: dashboardMetrics.status === 'fulfilled' ? dashboardMetrics.value : {}, }; }, }); diff --git a/x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.test.ts b/x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.test.ts new file mode 100644 index 0000000000000..8c888eb3bf0e5 --- /dev/null +++ b/x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.test.ts @@ -0,0 +1,65 @@ +/* + * Copyright 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 { loggingSystemMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; + +import { getDashboardMetrics, initialDashboardMetrics } from './get_dashboards_metrics'; +import { + getEmptyTagResponse, + getMockDashboardSearchResponse, + getMockTagSearchResponse, +} from './mocks'; +import { SECURITY_TAG_NAME } from '../../../common/constants'; + +describe('Dashboards Metrics', () => { + let savedObjectsClient: ReturnType; + + describe('getDashboardMetrics()', () => { + beforeEach(() => { + savedObjectsClient = savedObjectsClientMock.create(); + }); + + it('returns empty object if no tags found', async () => { + const logger = loggingSystemMock.createLogger(); + savedObjectsClient.find.mockResolvedValueOnce(getEmptyTagResponse()); + savedObjectsClient.find.mockResolvedValueOnce(getMockDashboardSearchResponse()); + + const result = await getDashboardMetrics({ + savedObjectsClient, + logger, + }); + expect(logger.debug).toHaveBeenCalledWith( + `No ${SECURITY_TAG_NAME} tag found, therefore not collecting telemetry from it` + ); + expect(result).toEqual(initialDashboardMetrics); + }); + + it('returns information with tags and dashboards', async () => { + savedObjectsClient.find.mockResolvedValueOnce(getMockTagSearchResponse()); + savedObjectsClient.find.mockResolvedValueOnce(getMockDashboardSearchResponse()); + + const logger = loggingSystemMock.createLogger(); + const result = await getDashboardMetrics({ + savedObjectsClient, + logger, + }); + + expect(result).toEqual({ + dashboard_tag: { + created_at: '2023-02-14T09:32:17.734Z', + linked_dashboards_count: 1, + }, + dashboards: [ + { + created_at: '2023-02-14T09:32:37.515Z', + dashboard_id: '84df7db0-ac4a-11ed-ae40-ff411efc2344', + }, + ], + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.ts b/x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.ts new file mode 100644 index 0000000000000..df56f7c705435 --- /dev/null +++ b/x-pack/plugins/security_solution/server/usage/dashboards/get_dashboards_metrics.ts @@ -0,0 +1,58 @@ +/* + * Copyright 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 { SavedObjectsClientContract, Logger, SavedObjectsFindResult } from '@kbn/core/server'; +import type { TagWithOptionalId } from '@kbn/saved-objects-tagging-plugin/common'; +import { SECURITY_TAG_NAME } from '../../../common/constants'; + +interface GetDashboardMetricsOptions { + savedObjectsClient: SavedObjectsClientContract; + logger: Logger; +} + +export const getSecurityTag = async ({ + savedObjectsClient, + logger, +}: GetDashboardMetricsOptions): Promise | undefined> => { + const tagResponse = await savedObjectsClient.find({ + type: 'tag', + searchFields: ['name'], + search: SECURITY_TAG_NAME, + }); + // The search query returns partial matches, we need to find the exact tag name + return tagResponse.saved_objects.find(({ attributes }) => attributes.name === SECURITY_TAG_NAME); +}; + +export const initialDashboardMetrics = {}; + +export const getDashboardMetrics = async ({ + savedObjectsClient, + logger, +}: GetDashboardMetricsOptions) => { + const tag = await getSecurityTag({ savedObjectsClient, logger }); + const tagId = tag?.id; + if (!tagId) { + logger.debug(`No ${SECURITY_TAG_NAME} tag found, therefore not collecting telemetry from it`); + return initialDashboardMetrics; + } + const dashboardsResponse = await savedObjectsClient.find({ + type: 'dashboard', + hasReference: { id: tagId, type: 'tag' }, + }); + return { + dashboard_tag: { + created_at: tag.created_at, + linked_dashboards_count: dashboardsResponse.saved_objects.length, + }, + dashboards: dashboardsResponse.saved_objects.map((d) => ({ + created_at: d.created_at, + dashboard_id: d.id, + ...(d?.error?.message ? { error_message: d?.error?.message } : {}), + ...(d?.error?.statusCode ? { error_status_code: d?.error?.statusCode } : {}), + })), + }; +}; diff --git a/x-pack/plugins/security_solution/server/usage/dashboards/mocks.ts b/x-pack/plugins/security_solution/server/usage/dashboards/mocks.ts new file mode 100644 index 0000000000000..80254f2b3fda3 --- /dev/null +++ b/x-pack/plugins/security_solution/server/usage/dashboards/mocks.ts @@ -0,0 +1,80 @@ +/* + * Copyright 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 getEmptyTagResponse = () => ({ + page: 1, + per_page: 20, + total: 0, + saved_objects: [], +}); + +export const getMockTagSearchResponse = () => ({ + page: 1, + per_page: 20, + total: 1, + saved_objects: [ + { + type: 'tag', + id: '79152660-ac4a-11ed-ae40-ff411efc2344', + namespaces: ['default'], + attributes: { + name: 'Security Solution', + description: 'Security Solution auto-generated tag', + color: '#7835c9', + }, + references: [], + migrationVersion: { + tag: '8.0.0', + }, + coreMigrationVersion: '8.0.0', + updated_at: '2023-02-14T09:32:17.734Z', + created_at: '2023-02-14T09:32:17.734Z', + version: 'WzY4OTgsMl0=', + score: 0, + }, + ], +}); + +export const getMockDashboardSearchResponse = () => ({ + page: 1, + per_page: 20, + total: 1, + saved_objects: [ + { + type: 'dashboard', + id: '84df7db0-ac4a-11ed-ae40-ff411efc2344', + namespaces: ['default'], + attributes: { + kibanaSavedObjectMeta: { + searchSourceJSON: '{"query":{"query":"","language":"kuery"},"filter":[]}', + }, + description: '', + timeRestore: false, + optionsJSON: + '{"useMargins":true,"syncColors":false,"syncCursor":true,"syncTooltips":false,"hidePanelTitles":false}', + panelsJSON: '[]', + title: 'My dashboard', + version: 1, + }, + references: [ + { + type: 'tag', + id: '79152660-ac4a-11ed-ae40-ff411efc2344', + name: 'tag-ref-79152660-ac4a-11ed-ae40-ff411efc2344', + }, + ], + migrationVersion: { + dashboard: '8.7.0', + }, + coreMigrationVersion: '8.0.0', + updated_at: '2023-02-14T09:32:37.515Z', + created_at: '2023-02-14T09:32:37.515Z', + version: 'WzY5MDIsMl0=', + score: 0, + }, + ], +}); diff --git a/x-pack/plugins/security_solution/server/usage/types.ts b/x-pack/plugins/security_solution/server/usage/types.ts index 1c97dffab5bb1..4131a105a1b51 100644 --- a/x-pack/plugins/security_solution/server/usage/types.ts +++ b/x-pack/plugins/security_solution/server/usage/types.ts @@ -10,6 +10,20 @@ import type { SanitizedRule } from '@kbn/alerting-plugin/common'; import type { RuleParams } from '../lib/detection_engine/rule_schema'; import type { SetupPlugins } from '../plugin'; +export interface DashboardUsage { + created_at: string | undefined; + dashboard_id: string; + error_message?: string; + error_status_code?: number; +} +export interface DashboardMetrics { + dashboard_tag?: { + created_at: string | undefined; + linked_dashboards_count: number; + }; + dashboards?: DashboardUsage[]; +} + export type CollectorDependencies = { signalsIndex: string; core: CoreSetup; diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index 1dc5393fdb116..d878371964eec 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -13201,6 +13201,57 @@ } } } + }, + "dashboardMetrics": { + "properties": { + "dashboard_tag": { + "properties": { + "created_at": { + "type": "keyword", + "_meta": { + "description": "The time the tab was created" + } + }, + "linked_dashboards_count": { + "type": "long", + "_meta": { + "description": "Number of associated dashboards" + } + } + } + }, + "dashboards": { + "type": "array", + "items": { + "properties": { + "created_at": { + "type": "keyword", + "_meta": { + "description": "The time the dashboard was created" + } + }, + "dashboard_id": { + "type": "keyword", + "_meta": { + "description": "The dashboard saved object id" + } + }, + "error_message": { + "type": "keyword", + "_meta": { + "description": "The relevant error message" + } + }, + "error_status_code": { + "type": "long", + "_meta": { + "description": "The relevant error status code" + } + } + } + } + } + } } } }, From 794a9493d568bffe5bb60200d50ad24092b68d3f Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 16 Feb 2023 12:53:31 +0100 Subject: [PATCH 071/210] Bump crypto-js from v4.0.0 to v4.1.1 (#151293) Removes an unnecessary forced resolution for `crypto-js` which also without a good reason pinned the package to v4.0.0. So this commit also upgrades the package to the newest version. --- package.json | 1 - yarn.lock | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 09d980b233cd1..a72ba0ef83cb9 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "**/hoist-non-react-statics": "^3.3.2", "**/isomorphic-fetch/node-fetch": "^2.6.7", "**/istanbul-lib-coverage": "^3.2.0", - "**/pdfkit/crypto-js": "4.0.0", "**/trim": "1.0.1", "**/typescript": "4.6.3", "**/use-composed-ref": "^1.3.0", diff --git a/yarn.lock b/yarn.lock index 3b8f7ec40dad0..68bd8bb2c9222 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12645,10 +12645,10 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@4.0.0, crypto-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc" - integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg== +crypto-js@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== crypto-random-string@^1.0.0: version "1.0.0" From f1b0dd4720334038663a57bc6458f3e000811ee1 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 16 Feb 2023 12:58:48 +0100 Subject: [PATCH 072/210] [Files] Add `meta` prop to `` (#151417) ## Summary Added the `meta` prop to the `FilePicker` component, also pass this down to the `FileUpload` component so that files created via the picker can have meta set. Close https://github.com/elastic/kibana/issues/151375 ## How to test 1. Start Kibana with examples `yarn start --run-examples` 2. Go to the "Developer examples" in the side-nav menu under analytics 3. Go to "Files example" 4. Upload a file via the "Select file" button, should present an empty file picker if you have no files, otherwise use the little upload component bottom left 5. Either select files or dismiss the modal 6. Inspect the uploaded file and see the `myCool: 'meta'` entry included with other metadata ## Screenshot A file uploaded via the `FilePicker` in the "Files example" plugin. Screenshot 2023-02-16 at 11 41 06 ### 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 --- examples/files_example/public/components/app.tsx | 1 + .../public/components/file_picker.tsx | 1 + .../impl/src/components/empty_prompt.tsx | 3 ++- .../impl/src/components/modal_footer.tsx | 3 ++- .../file/file_picker/impl/src/context.tsx | 5 ++++- .../file_picker/impl/src/file_picker.test.tsx | 16 +++++++++++++++- .../file/file_picker/impl/src/file_picker.tsx | 6 ++++++ .../file/file_upload/impl/src/file_upload.tsx | 2 +- .../file_upload/impl/src/upload_state.test.ts | 2 +- 9 files changed, 33 insertions(+), 6 deletions(-) diff --git a/examples/files_example/public/components/app.tsx b/examples/files_example/public/components/app.tsx index 1f77ca9566cbc..dff0c5d1c9028 100644 --- a/examples/files_example/public/components/app.tsx +++ b/examples/files_example/public/components/app.tsx @@ -174,6 +174,7 @@ export const FilesExampleApp = ({ files, notifications }: FilesExampleAppDeps) = notifications.toasts.addSuccess({ title: 'Uploaded files', }); + refetch(); }} onDone={(ids) => { notifications.toasts.addSuccess({ diff --git a/examples/files_example/public/components/file_picker.tsx b/examples/files_example/public/components/file_picker.tsx index 74ec26bbe268b..3e94029f3a0f8 100644 --- a/examples/files_example/public/components/file_picker.tsx +++ b/examples/files_example/public/components/file_picker.tsx @@ -27,6 +27,7 @@ export const MyFilePicker: FunctionComponent = ({ onClose, onDone, onUplo onDone={(files) => onDone(files.map((f) => f.id))} onUpload={(n) => onUpload(n.map(({ id }) => id))} pageSize={50} + uploadMeta={{ myCool: 'meta' }} multiple /> ); diff --git a/packages/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx b/packages/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx index b32f2426281ca..e5b2b97b65928 100644 --- a/packages/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx +++ b/packages/shared-ux/file/file_picker/impl/src/components/empty_prompt.tsx @@ -20,7 +20,7 @@ interface Props { } export const EmptyPrompt: FunctionComponent = ({ kind, multiple }) => { - const { state } = useFilePickerContext(); + const { state, uploadMeta } = useFilePickerContext(); const { euiTheme } = useEuiTheme(); return ( = ({ kind, multiple }) => { css={css` min-width: calc(${euiTheme.size.xxxl} * 6); `} + meta={uploadMeta as Record} kind={kind} immediate multiple={multiple} diff --git a/packages/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx b/packages/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx index 0b63e56d145b7..da96bd0036c1d 100644 --- a/packages/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx +++ b/packages/shared-ux/file/file_picker/impl/src/components/modal_footer.tsx @@ -26,7 +26,7 @@ interface Props { } export const ModalFooter: FunctionComponent = ({ kind, onDone, onUpload, multiple }) => { - const { state } = useFilePickerContext(); + const { state, uploadMeta } = useFilePickerContext(); const onUploadStart = useCallback(() => state.setIsUploading(true), [state]); const onUploadEnd = useCallback(() => state.setIsUploading(false), [state]); return ( @@ -50,6 +50,7 @@ export const ModalFooter: FunctionComponent = ({ kind, onDone, onUpload, state.resetFilters(); onUpload?.(n); }} + meta={uploadMeta as Record} onUploadStart={onUploadStart} onUploadEnd={onUploadEnd} kind={kind} diff --git a/packages/shared-ux/file/file_picker/impl/src/context.tsx b/packages/shared-ux/file/file_picker/impl/src/context.tsx index 63ec06c1e29e5..864cd332c43f1 100644 --- a/packages/shared-ux/file/file_picker/impl/src/context.tsx +++ b/packages/shared-ux/file/file_picker/impl/src/context.tsx @@ -15,6 +15,7 @@ import { FilePickerState, createFilePickerState } from './file_picker_state'; interface FilePickerContextValue extends FilesContextValue { state: FilePickerState; kind: string; + uploadMeta?: unknown; shouldAllowDelete?: (file: FileJSON) => boolean; } @@ -26,6 +27,7 @@ interface FilePickerContextProps extends Pick { pageSize: number; multiple: boolean; + uploadMeta?: unknown; } export const FilePickerContext: FunctionComponent = ({ @@ -34,6 +36,7 @@ export const FilePickerContext: FunctionComponent = ({ pageSize, multiple, children, + uploadMeta, }) => { const filesContext = useFilesContext(); const { client } = filesContext; @@ -43,7 +46,7 @@ export const FilePickerContext: FunctionComponent = ({ ); useEffect(() => state.dispose, [state]); return ( - + {children} ); diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker.test.tsx b/packages/shared-ux/file/file_picker/impl/src/file_picker.test.tsx index c57c5f0a52c43..639999e943c76 100644 --- a/packages/shared-ux/file/file_picker/impl/src/file_picker.test.tsx +++ b/packages/shared-ux/file/file_picker/impl/src/file_picker.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { act } from 'react-dom/test-utils'; import { registerTestBed } from '@kbn/test-jest-helpers'; - +import { FileUpload } from '@kbn/shared-ux-file-upload'; import { createMockFilesClient } from '@kbn/shared-ux-file-mocks'; import type { FileJSON } from '@kbn/shared-ux-file-types'; import { FilesContext } from '@kbn/shared-ux-file-context'; @@ -125,4 +125,18 @@ describe('FilePicker', () => { await actions.waitUntilLoaded(); expect(exists(testSubjects.paginationControls)).toBe(false); }); + describe('passes "meta" to ', () => { + it('when empty', async () => { + // Empty state + const { component } = await initTestBed({ uploadMeta: { foo: 'bar' } }); + expect(component.find(FileUpload).props().meta).toEqual({ foo: 'bar' }); + }); + it('when there are files', async () => { + const { component } = await initTestBed({ uploadMeta: { bar: 'baz' } }); + client.list.mockImplementation(() => + Promise.resolve({ files: [{ id: 'a' }, { id: 'b' }] as FileJSON[], total: 2 }) + ); + expect(component.find(FileUpload).props().meta).toEqual({ bar: 'baz' }); + }); + }); }); diff --git a/packages/shared-ux/file/file_picker/impl/src/file_picker.tsx b/packages/shared-ux/file/file_picker/impl/src/file_picker.tsx index 3cd76b370dd3d..9d0c0d00428f4 100644 --- a/packages/shared-ux/file/file_picker/impl/src/file_picker.tsx +++ b/packages/shared-ux/file/file_picker/impl/src/file_picker.tsx @@ -55,6 +55,10 @@ export interface Props { * When a user has successfully uploaded some files this callback will be called */ onUpload?: (done: DoneNotification[]) => void; + /** + * `meta` value to be used for file uploads + */ + uploadMeta?: FileJSON['meta']; /** * The number of results to show per page. */ @@ -151,12 +155,14 @@ export const FilePicker: FunctionComponent = ({ kind, shouldAllowDelete, multiple = false, + uploadMeta, onUpload = () => {}, ...rest }) => ( diff --git a/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx b/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx index 7b7d54b425fcd..498a4a93b5fe4 100644 --- a/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx +++ b/packages/shared-ux/file/file_upload/impl/src/file_upload.tsx @@ -88,7 +88,7 @@ export interface Props { onUploadStart?: () => void; /** - * Will be called when attempt ends, in error otherwise + * Will always be called when upload ends, whether success or failure */ onUploadEnd?: () => void; diff --git a/packages/shared-ux/file/file_upload/impl/src/upload_state.test.ts b/packages/shared-ux/file/file_upload/impl/src/upload_state.test.ts index 08e50faf1bd7a..8fe9622fffc6e 100644 --- a/packages/shared-ux/file/file_upload/impl/src/upload_state.test.ts +++ b/packages/shared-ux/file/file_upload/impl/src/upload_state.test.ts @@ -67,7 +67,7 @@ describe('UploadState', () => { }); }); - it('uploads all provided files and reports errors', async () => { + it('uploads all provided files', async () => { testScheduler.run(({ expectObservable, cold, flush }) => { const file1 = { name: 'test', size: 1 } as File; const file2 = { name: 'test 2', size: 1 } as File; From 3c5a2a6dd8aa47ea5b9379818cc51149618341df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Thu, 16 Feb 2023 08:05:04 -0500 Subject: [PATCH 073/210] Re-enable task management tests around bulk enable / disable (#151369) Fixes https://github.com/elastic/kibana/issues/141055. Re-enabling task management's `scheduling and running tasks` test suite now that we've fixed some issues around bulk enable / disable of tasks in https://github.com/elastic/kibana/pull/148985. Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/1920. --- .../test_suites/task_manager/task_management.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts index e030175f4f164..36f2742ce1c39 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management.ts @@ -54,8 +54,7 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const testHistoryIndex = '.kibana_task_manager_test_result'; - // FLAKY: https://github.com/elastic/kibana/issues/141055 - describe.skip('scheduling and running tasks', () => { + describe('scheduling and running tasks', () => { beforeEach(async () => { // clean up before each test return await supertest.delete('/api/sample_tasks').set('kbn-xsrf', 'xxx').expect(200); From 826d4bcb45850cf7ff5d558ec11063f1e5b8be49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20=C3=81brah=C3=A1m?= Date: Thu, 16 Feb 2023 14:12:28 +0100 Subject: [PATCH 074/210] [Security Solution] Remove artifact privileges from `t2_analyst` role (#149918) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Removes the following privileges from the `t2_analyst` role to meet the requirements: - `trusted_applications_read`, - `event_filters_read`, - `host_isolation_exceptions_read`, - `blocklist_read` > **Note** > Updating the tests is ~still a todo~ done ✅ ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../artifact_tabs_in_policy_details.cy.ts | 30 +++++------------- .../cypress/e2e/mocked_data/artifacts.cy.ts | 28 +++++++++++++---- .../public/management/cypress/tasks/login.ts | 22 +++++++++++++ .../endpoint/common/roles_users/t2_analyst.ts | 9 +----- .../with_artifact_read_privileges_role.ts | 31 +++++++++++++++++++ .../apis/endpoint_artifacts/blocklists.ts | 4 +-- .../apis/endpoint_artifacts/event_filters.ts | 4 +-- .../host_isolation_exceptions.ts | 4 +-- .../apis/endpoint_artifacts/trusted_apps.ts | 4 +-- .../services/roles_users.ts | 7 ++++- 10 files changed, 97 insertions(+), 46 deletions(-) create mode 100644 x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/with_artifact_read_privileges_role.ts diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts index 02c11cd441e3f..63ca9bc8b5c97 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifact_tabs_in_policy_details.cy.ts @@ -15,7 +15,13 @@ import { yieldFirstPolicyID, } from '../../tasks/artifacts'; import { loadEndpointDataForEventFiltersIfNeeded } from '../../tasks/load_endpoint_data'; -import { login, loginWithCustomRole, loginWithRole, ROLE } from '../../tasks/login'; +import { + getRoleWithArtifactReadPrivilege, + login, + loginWithCustomRole, + loginWithRole, + ROLE, +} from '../../tasks/login'; import { performUserActions } from '../../tasks/perform_user_actions'; const loginWithPrivilegeAll = () => { @@ -32,28 +38,6 @@ const loginWithPrivilegeNone = (privilegePrefix: string) => { loginWithCustomRole('roleWithoutArtifactPrivilege', roleWithoutArtifactPrivilege); }; -const getRoleWithArtifactReadPrivilege = (privilegePrefix: string) => { - const endpointSecurityPolicyManagerRole = getEndpointSecurityPolicyManager(); - - return { - ...endpointSecurityPolicyManagerRole, - kibana: [ - { - ...endpointSecurityPolicyManagerRole.kibana[0], - feature: { - ...endpointSecurityPolicyManagerRole.kibana[0].feature, - siem: [ - ...endpointSecurityPolicyManagerRole.kibana[0].feature.siem.filter( - (privilege) => privilege !== `${privilegePrefix}all` - ), - `${privilegePrefix}read`, - ], - }, - }, - ], - }; -}; - const getRoleWithoutArtifactPrivilege = (privilegePrefix: string) => { const endpointSecurityPolicyManagerRole = getEndpointSecurityPolicyManager(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts index 6c8c345674d20..b1899da0413ed 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/mocked_data/artifacts.cy.ts @@ -5,7 +5,13 @@ * 2.0. */ -import { login, loginWithRole, ROLE } from '../../tasks/login'; +import { + getRoleWithArtifactReadPrivilege, + login, + loginWithCustomRole, + loginWithRole, + ROLE, +} from '../../tasks/login'; import { getArtifactsListTestsData } from '../../fixtures/artifacts_page'; import { removeAllArtifacts } from '../../tasks/artifacts'; @@ -17,8 +23,9 @@ const loginWithWriteAccess = (url: string) => { cy.visit(url); }; -const loginWithReadAccess = (url: string) => { - loginWithRole(ROLE.t2_analyst); +const loginWithReadAccess = (privilegePrefix: string, url: string) => { + const roleWithArtifactReadPrivilege = getRoleWithArtifactReadPrivilege(privilegePrefix); + loginWithCustomRole('roleWithArtifactReadPrivilege', roleWithArtifactReadPrivilege); cy.visit(url); }; @@ -51,7 +58,10 @@ describe('Artifacts pages', () => { }); it(`read - should show empty state page if there is no ${testData.title} entry and the add button does not exist`, () => { - loginWithReadAccess(`/app/security/administration/${testData.urlPath}`); + loginWithReadAccess( + testData.privilegePrefix, + `/app/security/administration/${testData.urlPath}` + ); cy.getBySel(testData.emptyState).should('exist'); cy.getBySel(`${testData.pagePrefix}-emptyState-addButton`).should('not.exist'); }); @@ -82,7 +92,10 @@ describe('Artifacts pages', () => { }); it(`read - should not be able to update/delete an existing ${testData.title} entry`, () => { - loginWithReadAccess(`/app/security/administration/${testData.urlPath}`); + loginWithReadAccess( + testData.privilegePrefix, + `/app/security/administration/${testData.urlPath}` + ); cy.getBySel('header-page-title').contains(testData.title); cy.getBySel(`${testData.pagePrefix}-card-header-actions-button`).should('not.exist'); cy.getBySel(`${testData.pagePrefix}-card-cardEditAction`).should('not.exist'); @@ -90,7 +103,10 @@ describe('Artifacts pages', () => { }); it(`read - should not be able to create a new ${testData.title} entry`, () => { - loginWithReadAccess(`/app/security/administration/${testData.urlPath}`); + loginWithReadAccess( + testData.privilegePrefix, + `/app/security/administration/${testData.urlPath}` + ); cy.getBySel('header-page-title').contains(testData.title); cy.getBySel(`${testData.pagePrefix}-pageAddButton`).should('not.exist'); }); diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts index 7d13090ac0ff8..c213693f37f5b 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts @@ -360,3 +360,25 @@ export const loginAndWaitForPage = (url: string) => { login(); cy.visit(url); }; + +export const getRoleWithArtifactReadPrivilege = (privilegePrefix: string) => { + const endpointSecurityPolicyManagerRole = getEndpointSecurityPolicyManager(); + + return { + ...endpointSecurityPolicyManagerRole, + kibana: [ + { + ...endpointSecurityPolicyManagerRole.kibana[0], + feature: { + ...endpointSecurityPolicyManagerRole.kibana[0].feature, + siem: [ + ...endpointSecurityPolicyManagerRole.kibana[0].feature.siem.filter( + (privilege) => privilege !== `${privilegePrefix}all` + ), + `${privilegePrefix}read`, + ], + }, + }, + ], + }; +}; diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/t2_analyst.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/t2_analyst.ts index a80ea19516ca5..32d3fac8ac680 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/t2_analyst.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/t2_analyst.ts @@ -17,14 +17,7 @@ export const getT2Analyst: () => Omit = () => { ...noResponseActionsRole.kibana[0], feature: { ...noResponseActionsRole.kibana[0].feature, - siem: [ - 'minimal_all', - 'actions_log_management_read', - 'trusted_applications_read', - 'event_filters_read', - 'host_isolation_exceptions_read', - 'blocklist_read', - ], + siem: ['minimal_all', 'actions_log_management_read'], }, }, ], diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/with_artifact_read_privileges_role.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/with_artifact_read_privileges_role.ts new file mode 100644 index 0000000000000..aa09afb0cb74e --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/with_artifact_read_privileges_role.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Role } from '@kbn/security-plugin/common'; +import { getNoResponseActionsRole } from './without_response_actions_role'; + +export const getWithArtifactReadPrivilegesRole: () => Omit = () => { + const noResponseActionsRole = getNoResponseActionsRole(); + return { + ...noResponseActionsRole, + kibana: [ + { + ...noResponseActionsRole.kibana[0], + feature: { + ...noResponseActionsRole.kibana[0].feature, + siem: [ + 'minimal_all', + 'blocklist_read', + 'trusted_applications_read', + 'host_isolation_exceptions_read', + 'event_filters_read', + ], + }, + }, + ], + }; +}; diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/blocklists.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/blocklists.ts index 1c081b2d734f1..a5a5c109fe440 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/blocklists.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/blocklists.ts @@ -309,7 +309,7 @@ export default function ({ getService }: FtrProviderContext) { for (const blocklistApiCall of [...blocklistApiCalls, ...needsWritePrivilege]) { it(`should error on [${blocklistApiCall.method}] - [${blocklistApiCall.info}]`, async () => { await supertestWithoutAuth[blocklistApiCall.method](blocklistApiCall.path) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(blocklistApiCall.getBody()) .expect(403, { @@ -322,7 +322,7 @@ export default function ({ getService }: FtrProviderContext) { for (const blocklistApiCall of needsReadPrivilege) { it(`should not error on [${blocklistApiCall.method}] - [${blocklistApiCall.info}]`, async () => { await supertestWithoutAuth[blocklistApiCall.method](blocklistApiCall.path) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(blocklistApiCall.getBody()) .expect(200); diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/event_filters.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/event_filters.ts index b425a10b75102..de6f0d73f2c7c 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/event_filters.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/event_filters.ts @@ -248,7 +248,7 @@ export default function ({ getService }: FtrProviderContext) { for (const eventFilterApiCall of [...eventFilterCalls, ...needsWritePrivilege]) { it(`should error on [${eventFilterApiCall.method}] - [${eventFilterApiCall.info}]`, async () => { await supertestWithoutAuth[eventFilterApiCall.method](eventFilterApiCall.path) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(eventFilterApiCall.getBody()) .expect(403, { @@ -261,7 +261,7 @@ export default function ({ getService }: FtrProviderContext) { for (const eventFilterApiCall of needsReadPrivilege) { it(`should not error on [${eventFilterApiCall.method}] - [${eventFilterApiCall.info}]`, async () => { await supertestWithoutAuth[eventFilterApiCall.method](eventFilterApiCall.path) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(eventFilterApiCall.getBody()) .expect(200); diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/host_isolation_exceptions.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/host_isolation_exceptions.ts index 250f2add8d48c..765d34da5d603 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/host_isolation_exceptions.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/host_isolation_exceptions.ts @@ -290,7 +290,7 @@ export default function ({ getService }: FtrProviderContext) { await supertestWithoutAuth[hostIsolationExceptionApiCall.method]( hostIsolationExceptionApiCall.path ) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(hostIsolationExceptionApiCall.getBody()) .expect(403, { @@ -305,7 +305,7 @@ export default function ({ getService }: FtrProviderContext) { await supertestWithoutAuth[hostIsolationExceptionApiCall.method]( hostIsolationExceptionApiCall.path ) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(hostIsolationExceptionApiCall.getBody()) .expect(200); diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/trusted_apps.ts b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/trusted_apps.ts index dcc10b178d5e5..4f26fabe97bff 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/trusted_apps.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/endpoint_artifacts/trusted_apps.ts @@ -276,7 +276,7 @@ export default function ({ getService }: FtrProviderContext) { for (const trustedAppApiCall of [...trustedAppApiCalls, ...needsWritePrivilege]) { it(`should error on [${trustedAppApiCall.method}] - [${trustedAppApiCall.info}]`, async () => { await supertestWithoutAuth[trustedAppApiCall.method](trustedAppApiCall.path) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(trustedAppApiCall.getBody()) .expect(403, { @@ -289,7 +289,7 @@ export default function ({ getService }: FtrProviderContext) { for (const trustedAppApiCall of needsReadPrivilege) { it(`should not error on [${trustedAppApiCall.method}] - [${trustedAppApiCall.info}]`, async () => { await supertestWithoutAuth[trustedAppApiCall.method](trustedAppApiCall.path) - .auth(ROLE.t2_analyst, 'changeme') + .auth(ROLE.artifact_read_role, 'changeme') .set('kbn-xsrf', 'true') .send(trustedAppApiCall.getBody()) .expect(200); diff --git a/x-pack/test/security_solution_endpoint_api_int/services/roles_users.ts b/x-pack/test/security_solution_endpoint_api_int/services/roles_users.ts index 552744510ab59..930d0c1ddcba6 100644 --- a/x-pack/test/security_solution_endpoint_api_int/services/roles_users.ts +++ b/x-pack/test/security_solution_endpoint_api_int/services/roles_users.ts @@ -11,11 +11,13 @@ import { getT1Analyst } from '@kbn/security-solution-plugin/scripts/endpoint/com import { getT2Analyst } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/t2_analyst'; import { getHunter } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/hunter'; import { getThreadIntelligenceAnalyst } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/thread_intelligence_analyst'; +import { getDetectionsEngineer } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/detections_engineer'; import { getSocManager } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/soc_manager'; import { getPlatformEngineer } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/platform_engineer'; import { getEndpointOperationsAnalyst } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/endpoint_operations_analyst'; import { getEndpointSecurityPolicyManager } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/endpoint_security_policy_manager'; import { getWithResponseActionsRole } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/with_response_actions_role'; +import { getWithArtifactReadPrivilegesRole } from '@kbn/security-solution-plugin/scripts/endpoint/common/roles_users/with_artifact_read_privileges_role'; import { FtrProviderContext } from '../ftr_provider_context'; @@ -30,18 +32,21 @@ export enum ROLE { endpoint_operations_analyst = 'endpointOperationsAnalyst', endpoint_security_policy_manager = 'endpointSecurityPolicyManager', response_actions_role = 'executeResponseActions', + artifact_read_role = 'artifactReadRole', } -const rolesMapping: { [id: string]: Omit } = { +const rolesMapping: { [key in ROLE]: Omit } = { t1Analyst: getT1Analyst(), t2Analyst: getT2Analyst(), hunter: getHunter(), threadIntelligenceAnalyst: getThreadIntelligenceAnalyst(), + detectionsEngineer: getDetectionsEngineer(), socManager: getSocManager(), platformEngineer: getPlatformEngineer(), endpointOperationsAnalyst: getEndpointOperationsAnalyst(), endpointSecurityPolicyManager: getEndpointSecurityPolicyManager(), executeResponseActions: getWithResponseActionsRole(), + artifactReadRole: getWithArtifactReadPrivilegesRole(), }; export function RolesUsersProvider({ getService }: FtrProviderContext) { From b76ea2f69f725c1a6e06a63e03c151a94475ba03 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 16 Feb 2023 14:19:55 +0100 Subject: [PATCH 075/210] Revert "update dependency playwright to ^1.30.0" (#151435) Reverts elastic/kibana#151106 Temporarily reverting it since it broke synthetics test runner tests in kibana ![image](https://user-images.githubusercontent.com/3505601/219363923-87cbff94-6fdb-43d5-ad7b-a0c2a4016846.png) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + package.json | 2 +- yarn.lock | 15 +++++---------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a77a70ded523c..b3c079f8be1c8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -461,6 +461,7 @@ src/plugins/newsfeed @elastic/kibana-core test/common/plugins/newsfeed @elastic/kibana-core x-pack/plugins/notifications @elastic/appex-sharedux x-pack/test/cases_api_integration/common/plugins/observability @elastic/response-ops +x-pack/plugins/observability @elastic/observability-ui x-pack/test/security_api_integration/plugins/oidc_provider @elastic/kibana-security test/common/plugins/otel_metrics @elastic/infra-monitoring-ui packages/kbn-optimizer @elastic/kibana-operations diff --git a/package.json b/package.json index a72ba0ef83cb9..49d0cf9cde3b7 100644 --- a/package.json +++ b/package.json @@ -1417,7 +1417,7 @@ "pirates": "^4.0.1", "piscina": "^3.2.0", "pixelmatch": "^5.3.0", - "playwright": "^1.30.0", + "playwright": "^1.26.0", "pngjs": "^3.4.0", "postcss": "^8.4.14", "postcss-loader": "^4.2.0", diff --git a/yarn.lock b/yarn.lock index 68bd8bb2c9222..47a95163be00d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22765,17 +22765,12 @@ playwright-core@1.27.1, playwright-core@=1.27.1: resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.27.1.tgz#840ef662e55a3ed759d8b5d3d00a5f885a7184f4" integrity sha512-9EmeXDncC2Pmp/z+teoVYlvmPWUC6ejSSYZUln7YaP89Z6lpAaiaAnqroUt/BoLo8tn7WYShcfaCh+xofZa44Q== -playwright-core@1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.30.0.tgz#de987cea2e86669e3b85732d230c277771873285" - integrity sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g== - -playwright@^1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.30.0.tgz#b1d7be2d45d97fbb59f829f36f521f12010fe072" - integrity sha512-ENbW5o75HYB3YhnMTKJLTErIBExrSlX2ZZ1C/FzmHjUYIfxj/UnI+DWpQr992m+OQVSg0rCExAOlRwB+x+yyIg== +playwright@^1.26.0: + version "1.27.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.27.1.tgz#4eecac5899566c589d4220ca8acc16abe8a67450" + integrity sha512-xXYZ7m36yTtC+oFgqH0eTgullGztKSRMb4yuwLPl8IYSmgBM88QiB+3IWb1mRIC9/NNwcgbG0RwtFlg+EAFQHQ== dependencies: - playwright-core "1.30.0" + playwright-core "1.27.1" plugin-error@^1.0.1: version "1.0.1" From a5113d800132048c9f51cffcbe55e72b8baa92d1 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 16 Feb 2023 08:30:30 -0500 Subject: [PATCH 076/210] feat(slo): add APM availability indicator type form (#151379) --- .github/CODEOWNERS | 3 + ...ailability_indicator_type_form.stories.tsx | 37 +++++ .../apm_availability_indicator_type_form.tsx | 157 ++++++++++++++++++ .../apm_latency_indicator_type_form.tsx | 2 +- .../field_selector.stories.tsx | 2 +- .../field_selector.tsx | 2 +- .../slo_edit/components/slo_edit_form.tsx | 48 ++++-- .../public/pages/slo_edit/constants.ts | 6 + .../helpers/use_section_form_validation.ts | 14 ++ 9 files changed, 252 insertions(+), 19 deletions(-) create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.stories.tsx create mode 100644 x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.tsx rename x-pack/plugins/observability/public/pages/slo_edit/components/{apm_latency => common}/field_selector.stories.tsx (95%) rename x-pack/plugins/observability/public/pages/slo_edit/components/{apm_latency => common}/field_selector.tsx (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b3c079f8be1c8..f2d11bf493d94 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -770,6 +770,9 @@ packages/kbn-yarn-lock-validator @elastic/kibana-operations /x-pack/plugins/observability/public/pages/cases @elastic/actionable-observability /x-pack/plugins/observability/public/pages/rules @elastic/actionable-observability /x-pack/plugins/observability/public/pages/rule_details @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/slos @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/slo_edit @elastic/actionable-observability +/x-pack/plugins/observability/public/pages/slo_details @elastic/actionable-observability /x-pack/test/observability_functional @elastic/actionable-observability # keep it below actionable observability diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.stories.tsx new file mode 100644 index 0000000000000..9f1ca20c3411f --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.stories.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { ComponentStory } from '@storybook/react'; +import { FormProvider, useForm } from 'react-hook-form'; + +import { KibanaReactStorybookDecorator } from '../../../../utils/kibana_react.storybook_decorator'; +import { + ApmAvailabilityIndicatorTypeForm as Component, + Props, +} from './apm_availability_indicator_type_form'; +import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../../constants'; + +export default { + component: Component, + title: 'app/SLO/EditPage/ApmAvailability/Form', + decorators: [KibanaReactStorybookDecorator], +}; + +const Template: ComponentStory = (props: Props) => { + const methods = useForm({ defaultValues: SLO_EDIT_FORM_DEFAULT_VALUES }); + return ( + + + + ); +}; + +const defaultProps = {}; + +export const Form = Template.bind({}); +Form.args = defaultProps; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.tsx new file mode 100644 index 0000000000000..bac23feb17b85 --- /dev/null +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_availability/apm_availability_indicator_type_form.tsx @@ -0,0 +1,157 @@ +/* + * Copyright 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 { + EuiComboBox, + EuiComboBoxOptionOption, + EuiFlexGroup, + EuiFlexItem, + EuiFormLabel, +} from '@elastic/eui'; +import { Control, Controller } from 'react-hook-form'; +import { i18n } from '@kbn/i18n'; +import type { CreateSLOInput } from '@kbn/slo-schema'; + +import { FieldSelector } from '../common/field_selector'; + +export interface Props { + control: Control; +} + +export function ApmAvailabilityIndicatorTypeForm({ control }: Props) { + return ( + + + + + + + + + + + + + + + {i18n.translate('xpack.observability.slos.sloEdit.apmAvailability.goodStatusCodes', { + defaultMessage: 'Good status codes', + })} + + ( + { + field.onChange(selected.map((opts) => opts.value)); + }} + isClearable={true} + data-test-subj="sloEditApmAvailabilityGoodStatusCodesSelector" + /> + )} + /> + + + + + ); +} + +function generateStatusCodeOptions(codes: string[] = ['2xx', '3xx', '4xx', '5xx']) { + return codes.map((code) => ({ + label: code, + value: code, + 'data-test-subj': `${code}Option`, + })); +} diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx index d071dd92de358..a8515d157bbcf 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/apm_latency_indicator_type_form.tsx @@ -11,7 +11,7 @@ import { Control, Controller } from 'react-hook-form'; import { i18n } from '@kbn/i18n'; import type { CreateSLOInput } from '@kbn/slo-schema'; -import { FieldSelector } from './field_selector'; +import { FieldSelector } from '../common/field_selector'; export interface Props { control: Control; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/field_selector.stories.tsx similarity index 95% rename from x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.tsx rename to x-pack/plugins/observability/public/pages/slo_edit/components/common/field_selector.stories.tsx index 28f98a39f9762..b20915109f2b4 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.stories.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/field_selector.stories.tsx @@ -15,7 +15,7 @@ import { SLO_EDIT_FORM_DEFAULT_VALUES } from '../../constants'; export default { component: Component, - title: 'app/SLO/EditPage/ApmLatency/FieldSelector', + title: 'app/SLO/EditPage/Common/FieldSelector', decorators: [KibanaReactStorybookDecorator], }; diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/common/field_selector.tsx similarity index 99% rename from x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx rename to x-pack/plugins/observability/public/pages/slo_edit/components/common/field_selector.tsx index af3ff50954757..beedb41e25c2f 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/apm_latency/field_selector.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/common/field_selector.tsx @@ -52,7 +52,7 @@ export function FieldSelector({ ? [ { value: '*', - label: i18n.translate('xpack.observability.slos.sloEdit.apmFieldSelector.all', { + label: i18n.translate('xpack.observability.slos.sloEdit.fieldSelector.all', { defaultMessage: 'All', }), }, diff --git a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx index f1faba1119652..506611c5130c7 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx +++ b/x-pack/plugins/observability/public/pages/slo_edit/components/slo_edit_form.tsx @@ -9,6 +9,7 @@ import React, { useEffect } from 'react'; import { EuiAvatar, EuiButton, + EuiFlexGroup, EuiFormLabel, EuiPanel, EuiSelect, @@ -36,6 +37,7 @@ import { import { paths } from '../../../config'; import { SLI_OPTIONS, SLO_EDIT_FORM_DEFAULT_VALUES } from '../constants'; import { ApmLatencyIndicatorTypeForm } from './apm_latency/apm_latency_indicator_type_form'; +import { ApmAvailabilityIndicatorTypeForm } from './apm_availability/apm_availability_indicator_type_form'; export interface Props { slo: SLOWithSummaryResponse | undefined; @@ -110,6 +112,8 @@ export function SloEditForm({ slo }: Props) { return ; case 'sli.apm.transactionDuration': return ; + case 'sli.apm.transactionErrorRate': + return ; default: return null; } @@ -225,22 +229,34 @@ export function SloEditForm({ slo }: Props) { - - {isEditMode - ? i18n.translate('xpack.observability.slos.sloEdit.editSloButton', { - defaultMessage: 'Update SLO', - }) - : i18n.translate('xpack.observability.slos.sloEdit.createSloButton', { - defaultMessage: 'Create SLO', - })} - + + + {isEditMode + ? i18n.translate('xpack.observability.slos.sloEdit.editSloButton', { + defaultMessage: 'Update SLO', + }) + : i18n.translate('xpack.observability.slos.sloEdit.createSloButton', { + defaultMessage: 'Create SLO', + })} + + navigateToUrl(basePath.prepend(paths.observability.slos))} + > + {i18n.translate('xpack.observability.slos.sloEdit.cancelButton', { + defaultMessage: 'Cancel', + })} + + diff --git a/x-pack/plugins/observability/public/pages/slo_edit/constants.ts b/x-pack/plugins/observability/public/pages/slo_edit/constants.ts index 53044a34b08ca..a7e44f34b4f55 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/constants.ts +++ b/x-pack/plugins/observability/public/pages/slo_edit/constants.ts @@ -24,6 +24,12 @@ export const SLI_OPTIONS: Array<{ defaultMessage: 'APM latency', }), }, + { + value: 'sli.apm.transactionErrorRate', + text: i18n.translate('xpack.observability.slos.sliTypes.apmAvailabilityIndicator', { + defaultMessage: 'APM availability', + }), + }, ]; export const BUDGETING_METHOD_OPTIONS: Array<{ value: BudgetingMethod; text: string }> = [ diff --git a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts index 0f258b6102cbe..e79ea23464ece 100644 --- a/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts +++ b/x-pack/plugins/observability/public/pages/slo_edit/helpers/use_section_form_validation.ts @@ -45,6 +45,20 @@ export function useSectionFormValidation({ getFieldState, getValues, formState, (field) => !getFieldState(field, formState).invalid ); break; + case 'sli.apm.transactionErrorRate': + isIndicatorSectionValid = + ( + [ + 'indicator.params.service', + 'indicator.params.environment', + 'indicator.params.transactionType', + 'indicator.params.transactionName', + ] as const + ).every((field) => !getFieldState(field, formState).invalid && getValues(field) !== '') && + (['indicator.params.index', 'indicator.params.goodStatusCodes'] as const).every( + (field) => !getFieldState(field, formState).invalid + ); + break; default: isIndicatorSectionValid = false; break; From fa4c5a1dd614ca3917170bc4dc8f8033a66dfe36 Mon Sep 17 00:00:00 2001 From: Ersin Erdal <92688503+ersin-erdal@users.noreply.github.com> Date: Thu, 16 Feb 2023 15:06:45 +0100 Subject: [PATCH 077/210] Add an integration test for Alerts Summary event log (#151349) Resolves: #150474 This PR intends to add an integration test for event logs that generated by a rule that has summary actions. --- .../tests/alerting/group1/event_log.ts | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/event_log.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/event_log.ts index 6574c2164b06c..01bb215a63d6d 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/event_log.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group1/event_log.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { IValidatedEvent, nanosToMillis } from '@kbn/event-log-plugin/server'; -import { ESTestIndexTool } from '@kbn/alerting-api-integration-helpers'; +import { ES_TEST_INDEX_NAME, ESTestIndexTool } from '@kbn/alerting-api-integration-helpers'; import { Spaces } from '../../../scenarios'; import { getUrlPrefix, @@ -324,6 +324,85 @@ export default function eventLogTests({ getService }: FtrProviderContext) { } }); + it('should generate expected events for summary actions', async () => { + const { body: createdAction } = await supertest + .post(`${getUrlPrefix(space.id)}/api/actions/connector`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'Test conn', + connector_type_id: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + objectRemover.add(space.id, createdAction.id, 'action', 'actions'); + + const response = await supertest + .post(`${getUrlPrefix(space.id)}/api/alerting/rule`) + .set('kbn-xsrf', 'foo') + .send( + getTestRuleData({ + rule_type_id: 'test.always-firing-alert-as-data', + schedule: { interval: '10m' }, + throttle: undefined, + notify_when: undefined, + params: { + index: ES_TEST_INDEX_NAME, + reference: 'test', + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: { + index: ES_TEST_INDEX_NAME, + reference: 'test', + message: '', + }, + frequency: { + summary: true, + throttle: null, + notify_when: 'onActiveAlert', + }, + }, + ], + }) + ); + + expect(response.status).to.eql(200); + const alertId = response.body.id; + objectRemover.add(space.id, alertId, 'rule', 'alerting'); + + // get the events we're expecting + const events = await retry.try(async () => { + return await getEventLog({ + getService, + spaceId: space.id, + type: 'alert', + id: alertId, + provider: 'alerting', + actions: new Map([ + // make sure the counts of the # of events per type are as expected + ['execute-start', { equal: 1 }], + ['execute', { equal: 1 }], + ['active-instance', { equal: 2 }], + ['execute-action', { equal: 1 }], + ]), + }); + }); + + const executeActions = events.filter( + (event) => event?.event?.action === 'execute-action' + ); + + expect(executeActions.length).to.be(1); + + const summary = executeActions[0]?.kibana?.alerting?.summary; + expect(summary?.new?.count).to.be(2); + expect(summary?.ongoing?.count).to.be(0); + expect(summary?.recovered?.count).to.be(0); + }); + it('should generate expected events for rules with multiple searches', async () => { const numSearches = 4; const delaySeconds = 2; From 41afa5c9c460ffe7e82f14719677a9eb6f380cc6 Mon Sep 17 00:00:00 2001 From: Sloane Perrault Date: Thu, 16 Feb 2023 09:09:16 -0500 Subject: [PATCH 078/210] [Enterprise Search] Engine Search Preview (#150939) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary - Upgrades to Search UI with engines connector support - Adds engine search preview page - Links from documents count to search preview page 🎩 hat tip to @joemcelroy for laying a lot of the groundwork here. https://user-images.githubusercontent.com/1699281/218552958-ba859d76-05c8-4220-a44b-2dc945898420.mov ### 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) - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Joseph McElroy Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- package.json | 9 +- .../components/engine/engine_overview.tsx | 34 +-- .../engine_search_preview.tsx | 194 ++++++++++++++++++ .../engine_search_preview_logic.ts | 90 ++++++++ .../components/engine/engine_view.tsx | 6 + .../applications/shared/layout/nav.test.tsx | 10 +- .../public/applications/shared/layout/nav.tsx | 21 +- .../routes/enterprise_search/engines.test.ts | 2 +- .../routes/enterprise_search/engines.ts | 2 +- .../plugins/enterprise_search/tsconfig.json | 1 + yarn.lock | 50 ++--- 11 files changed, 359 insertions(+), 60 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts diff --git a/package.json b/package.json index 49d0cf9cde3b7..85892dfa5e0e3 100644 --- a/package.json +++ b/package.json @@ -105,11 +105,12 @@ "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", - "@elastic/react-search-ui": "^1.19.0", + "@elastic/react-search-ui": "^1.19.1", + "@elastic/react-search-ui-views": "^1.19.1", "@elastic/request-crypto": "2.0.1", - "@elastic/search-ui": "^1.19.0", - "@elastic/search-ui-app-search-connector": "^1.19.0", - "@elastic/search-ui-engines-connector": "^1.19.0", + "@elastic/search-ui": "^1.19.1", + "@elastic/search-ui-app-search-connector": "^1.19.1", + "@elastic/search-ui-engines-connector": "^1.19.1", "@emotion/cache": "^11.10.3", "@emotion/css": "^11.10.0", "@emotion/react": "^11.10.4", diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_overview.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_overview.tsx index bad7da8a8d219..d45a9c85e9c82 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_overview.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_overview.tsx @@ -77,19 +77,27 @@ export const EngineOverview: React.FC = () => { - - - - + + + + + + (url, { + body: JSON.stringify(request), + }); + + const withUniqueIds = { + ...response, + hits: { + ...response.hits, + hits: response.hits.hits.map((hit) => ({ + ...hit, + _id: btoa(JSON.stringify([hit._index, hit._id])), + })), + }, + }; + + return withUniqueIds; + } +} + +const ResultsView: React.FC = ({ children }) => { + return {children}; +}; + +const ResultView: React.FC = ({ result }) => { + const fields = Object.entries(result) + .filter(([key]) => !key.startsWith('_') && key !== 'id') + .map(([key, value]) => { + return { + name: key, + value: value.raw, + }; + }); + + const { + _meta: { + id: encodedId, + rawHit: { _index: index }, + }, + } = result; + + const [, id] = JSON.parse(atob(encodedId)); + + const columns: Array> = [ + { + field: 'name', + name: 'name', + render: (name: string) => { + return "{name}"; + }, + truncateText: true, + width: '20%', + }, + { + field: 'value', + name: 'value', + render: (value: string) => value, + }, + ]; + + return ( + + + + ID: {id} + + + from + {index} + + + + + + + ); +}; + +const InputView: React.FC = ({ getInputProps }) => { + return ( + + + + Search + + + ); +}; + +export const EngineSearchPreview: React.FC = () => { + const { http } = useValues(HttpLogic); + const { engineName, isLoadingEngine } = useValues(EngineViewLogic); + const { resultFields, searchableFields } = useValues(EngineSearchPreviewLogic); + const { engineData } = useValues(EngineIndicesLogic); + + if (!engineData) return null; + + const transporter = new InternalEngineTransporter(http, engineName); + + const connector = new EnginesAPIConnector(transporter); + + const config: SearchDriverOptions = { + alwaysSearchOnInitialLoad: true, + apiConnector: connector, + hasA11yNotifications: true, + searchQuery: { + result_fields: resultFields, + search_fields: searchableFields, + }, + }; + + return ( + + + + + + + + + + + + + + + + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.ts new file mode 100644 index 0000000000000..531bde8efa080 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_search_preview/engine_search_preview_logic.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 { kea, MakeLogicType } from 'kea'; + +import { FieldConfiguration, SearchFieldConfiguration } from '@elastic/search-ui'; + +import { FetchEngineFieldCapabilitiesApiLogic } from '../../../api/engines/fetch_engine_field_capabilities_api_logic'; +import { EngineNameLogic } from '../engine_name_logic'; + +interface EngineSearchPreviewActions { + fetchEngineFieldCapabilities: typeof FetchEngineFieldCapabilitiesApiLogic.actions.makeRequest; +} + +export interface EngineSearchPreviewValues { + engineFieldCapabilitiesData: typeof FetchEngineFieldCapabilitiesApiLogic.values.data; + engineName: typeof EngineNameLogic.values.engineName; + resultFields: Record; + searchableFields: Record; +} + +export const EngineSearchPreviewLogic = kea< + MakeLogicType +>({ + connect: { + actions: [ + FetchEngineFieldCapabilitiesApiLogic, + ['makeRequest as fetchEngineFieldCapabilities'], + ], + values: [ + EngineNameLogic, + ['engineName'], + FetchEngineFieldCapabilitiesApiLogic, + ['data as engineFieldCapabilitiesData'], + ], + }, + events: ({ actions, values }) => ({ + afterMount: () => { + if (!values.engineFieldCapabilitiesData) { + actions.fetchEngineFieldCapabilities({ + engineName: values.engineName, + }); + } + }, + }), + path: ['enterprise_search', 'content', 'engine_search_preview_logic'], + selectors: ({ selectors }) => ({ + resultFields: [ + () => [selectors.engineFieldCapabilitiesData], + (data: EngineSearchPreviewValues['engineFieldCapabilitiesData']) => { + if (!data) return {}; + + const resultFields = Object.fromEntries( + Object.entries(data.field_capabilities.fields) + .filter(([, mappings]) => { + return Object.values(mappings).some(({ metadata_field: isMeta }) => !isMeta); + }) + .map(([key]) => { + return [key, { raw: {}, snippet: {} }]; + }) + ); + + return resultFields; + }, + ], + searchableFields: [ + () => [selectors.engineFieldCapabilitiesData], + (data: EngineSearchPreviewValues['engineFieldCapabilitiesData']) => { + if (!data) return {}; + + const searchableFields = Object.fromEntries( + Object.entries(data.field_capabilities.fields) + .filter(([, mappings]) => + Object.entries(mappings).some( + ([type, { metadata_field: isMeta, searchable: isSearchable }]) => + type === 'text' && !isMeta && isSearchable + ) + ) + .map(([key]) => [key, { weight: 1 }]) + ); + + return searchableFields; + }, + ], + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx index 9fd27c752ac46..f66a443d62413 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/engine/engine_view.tsx @@ -25,6 +25,7 @@ import { EngineError } from './engine_error'; import { EngineIndices } from './engine_indices'; import { EngineOverview } from './engine_overview'; import { EngineSchema } from './engine_schema'; +import { EngineSearchPreview } from './engine_search_preview/engine_search_preview'; import { EngineViewHeaderActions } from './engine_view_header_actions'; import { EngineViewLogic } from './engine_view_logic'; import { EngineHeaderDocsAction } from './header_docs_action'; @@ -78,6 +79,11 @@ export const EngineView: React.FC = () => { + ( { id: 'enterpriseSearchEngineSchema', name: 'Schema', }, - // { - // href: `/app/enterprise_search/content/engines/${engineName}/preview`, - // id: 'enterpriseSearchEnginePreview', - // name: 'Preview', - // }, + { + href: `/app/enterprise_search/content/engines/${engineName}/preview`, + id: 'enterpriseSearchEnginePreview', + name: 'Preview', + }, { href: `/app/enterprise_search/content/engines/${engineName}/api`, id: 'enterpriseSearchEngineAPI', diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx index bd28fb86175f5..8c7025312e387 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.tsx @@ -291,17 +291,16 @@ export const useEnterpriseSearchEngineNav = (engineName?: string, isEmptyState?: to: `${enginePath}/${EngineViewTabs.SCHEMA}`, }), }, - // Hidden until Preview page is available - // { - // id: 'enterpriseSearchEnginePreview', - // name: i18n.translate('xpack.enterpriseSearch.nav.engine.previewTitle', { - // defaultMessage: 'Preview', - // }), - // ...generateNavLink({ - // shouldNotCreateHref: true, - // to: `${enginePath}/${EngineViewTabs.PREVIEW}`, - // }), - // }, + { + id: 'enterpriseSearchEnginePreview', + name: i18n.translate('xpack.enterpriseSearch.nav.engine.previewTitle', { + defaultMessage: 'Preview', + }), + ...generateNavLink({ + shouldNotCreateHref: true, + to: `${enginePath}/${EngineViewTabs.PREVIEW}`, + }), + }, { id: 'enterpriseSearchEngineAPI', name: i18n.translate('xpack.enterpriseSearch.nav.engine.apiTitle', { diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts index 663806c147e34..83e31f1ddf03d 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.test.ts @@ -238,7 +238,7 @@ describe('engines routes', () => { beforeEach(() => { jest.clearAllMocks(); mockRouter = new MockRouter({ - method: 'get', + method: 'post', path: '/internal/enterprise_search/engines/{engine_name}/search', }); diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts index 2a0469d77cd48..71b0061a7d1ba 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/engines.ts @@ -112,7 +112,7 @@ export function registerEnginesRoutes({ }) ); - router.get( + router.post( { path: '/internal/enterprise_search/engines/{engine_name}/search', validate: { diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json index 96a61dbc2b61a..8b9eef8ce1864 100644 --- a/x-pack/plugins/enterprise_search/tsconfig.json +++ b/x-pack/plugins/enterprise_search/tsconfig.json @@ -48,5 +48,6 @@ "@kbn/discover-plugin", "@kbn/guided-onboarding", "@kbn/shared-ux-router", + "@kbn/core-http-browser", ] } diff --git a/yarn.lock b/yarn.lock index 47a95163be00d..3eeb586370a5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1617,23 +1617,23 @@ resolved "https://registry.yarnpkg.com/@elastic/numeral/-/numeral-2.5.1.tgz#96acf39c3d599950646ef8ccfd24a3f057cf4932" integrity sha512-Tby6TKjixRFY+atVNeYUdGr9m0iaOq8230KTwn8BbUhkh7LwozfgKq0U98HRX7n63ZL62szl+cDKTYzh5WPCFQ== -"@elastic/react-search-ui-views@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@elastic/react-search-ui-views/-/react-search-ui-views-1.19.0.tgz#f425144560c89138725b9532a68c562106662555" - integrity sha512-GkDeZl9zwcZR51+kKzAHQ1HzfYXP3nturhU1bKG4vflw5rQgaHuVXfwbjEfrkacyuhdRkx6nIIqULbMbl+kl0g== +"@elastic/react-search-ui-views@1.19.1", "@elastic/react-search-ui-views@^1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@elastic/react-search-ui-views/-/react-search-ui-views-1.19.1.tgz#c44c5c823de5b5c61cc2f1f6bedbd973af0e78bc" + integrity sha512-1IOVoG5GYKvrKoYZL247bd7eKVQAR4iJaYBkA4KOa8CEXdc3+N0Z63uAit+4+pAH6Z6IONNwk2iQPMDf2zjQGA== dependencies: - "@elastic/search-ui" "1.19.0" + "@elastic/search-ui" "1.19.1" downshift "^3.2.10" rc-pagination "^1.20.1" react-select "^5.0.0" -"@elastic/react-search-ui@^1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@elastic/react-search-ui/-/react-search-ui-1.19.0.tgz#89406226556de54c7665a8ec7be0c3a806e1b4b8" - integrity sha512-WkoSlvGKpCDTJSskclGFX4NejArgbWNk/FhlzrLwM26UqU6Azyr4oMfNTqYh03CBu/8OaiOShQPX+VREdvqBaA== +"@elastic/react-search-ui@^1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@elastic/react-search-ui/-/react-search-ui-1.19.1.tgz#57e68e2e8c34cc8ac99d8f3825b4034db90e5b97" + integrity sha512-cB3tsDgVmp6fSrNJH8qmTZVDab4M0qKa0pyxrDSALJK8J7RFS9P4tO8Pb31R0jn4dtt1JDcy+e3JhHv/RABwlQ== dependencies: - "@elastic/react-search-ui-views" "1.19.0" - "@elastic/search-ui" "1.19.0" + "@elastic/react-search-ui-views" "1.19.1" + "@elastic/search-ui" "1.19.1" "@elastic/request-crypto@2.0.1": version "2.0.1" @@ -1644,26 +1644,26 @@ "@types/node-jose" "1.1.10" node-jose "2.1.0" -"@elastic/search-ui-app-search-connector@^1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@elastic/search-ui-app-search-connector/-/search-ui-app-search-connector-1.19.0.tgz#bc1db3589ab039a1459953374dafceb50629fb0c" - integrity sha512-ihjGyYCYV9BRNbjsVpBZNCg3SMr73DNhHq2NekTCxMahMS5TbUs88EH0ggWEqfZDxtEyS2coKmKM4UEHZid7kw== +"@elastic/search-ui-app-search-connector@^1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@elastic/search-ui-app-search-connector/-/search-ui-app-search-connector-1.19.1.tgz#beb6b317207ace9480fc8cd0a16e63e3c4657e0d" + integrity sha512-cHYtk2M6F1OdkJSXdb6EMvn6p4oE2duNZ/Il+W++6l5NXzyqPrVnh+6uGEPN64j+CxvTwxAEdV2uQbUpEKBrtw== dependencies: "@elastic/app-search-javascript" "^8.1.2" - "@elastic/search-ui" "1.19.0" + "@elastic/search-ui" "1.19.1" -"@elastic/search-ui-engines-connector@^1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@elastic/search-ui-engines-connector/-/search-ui-engines-connector-1.19.0.tgz#1c1256b3b2d3e52d806f3f309f5193ebe7a8f0a1" - integrity sha512-jNoY/j6atD6OD7F3sUD4vSMI/0ehQg058UheW/xkP2qNtB11rOZfBD47Al8tDOF+aKG5/dSxaV2mOfJzY9MzRw== +"@elastic/search-ui-engines-connector@^1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@elastic/search-ui-engines-connector/-/search-ui-engines-connector-1.19.1.tgz#5efab4f405e7bfb573fb0a81ad776d02e2248d23" + integrity sha512-LHTeSmDGOR5T5Y/9K1AngedHp3KAgdMhUq7KgvJnRkYogOCCfqWizcVXdURKXp8A+t6Gocg24o1TMWOSBR+3+w== dependencies: - "@elastic/search-ui" "1.19.0" + "@elastic/search-ui" "1.19.1" "@searchkit/sdk" "^3.0.0" -"@elastic/search-ui@1.19.0", "@elastic/search-ui@^1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@elastic/search-ui/-/search-ui-1.19.0.tgz#4f5b20856061f9500b307679d190accdfaf9f916" - integrity sha512-cShId22JPOkGiyPAmWYjttH/1q8D2Ac14d3lMXfgMNE+98jjWt0Nf/TvrfjLbTpdSVFUaDg/vAVciTRKk1qOVw== +"@elastic/search-ui@1.19.1", "@elastic/search-ui@^1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@elastic/search-ui/-/search-ui-1.19.1.tgz#76c1c72248e42f326970a6f3b0b445ab5f581847" + integrity sha512-2DcZ1b4fiL0vjRhVFU1OnqGKOy7aVJr563VO9FDpUUFCXlMySKWnuwh0kcUatqeNO4Sxw9GyJZbtzOgnTyQaag== dependencies: date-fns "^1.30.1" deep-equal "^1.0.1" From 31c73b9719daabd15a19954606111658b1a441ef Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Thu, 16 Feb 2023 14:18:14 +0000 Subject: [PATCH 079/210] [ML] Changes for optional spaces plugin (#151170) Changes to ensure ML behaves correctly when the spaces plugin is disabled. Related to https://github.com/elastic/kibana/issues/149687 Closes https://github.com/elastic/kibana/issues/149953 ML was in pretty good shape for this change as we already assumed spaces could be optional. The only change needed is to ensure the saved object sync button is enabled on the management page even when spaces is missing. Previously we incorrectly hid this button. --- .../ml_saved_objects_spaces_list.tsx | 2 +- .../contexts/kibana/kibana_context.ts | 2 +- .../jobs_list_page/jobs_list_page.tsx | 27 +++++++++---------- .../space_management/space_management.tsx | 2 +- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/ml_saved_objects_spaces_list/ml_saved_objects_spaces_list.tsx b/x-pack/plugins/ml/public/application/components/ml_saved_objects_spaces_list/ml_saved_objects_spaces_list.tsx index ff78f79b7604d..d1207248c7f74 100644 --- a/x-pack/plugins/ml/public/application/components/ml_saved_objects_spaces_list/ml_saved_objects_spaces_list.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_saved_objects_spaces_list/ml_saved_objects_spaces_list.tsx @@ -19,7 +19,7 @@ import { useMlApiContext } from '../../contexts/kibana'; import { useToastNotificationService } from '../../services/toast_notification_service'; interface Props { - spacesApi: SpacesPluginStart; + spacesApi: SpacesPluginStart; // this component is only ever used when spaces is enabled spaceIds: string[]; id: string; mlSavedObjectType: MlSavedObjectType; diff --git a/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts b/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts index d88d9abb24a87..aebe71477c7bc 100644 --- a/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts +++ b/x-pack/plugins/ml/public/application/contexts/kibana/kibana_context.ts @@ -40,7 +40,7 @@ interface StartPlugins { usageCollection?: UsageCollectionSetup; fieldFormats: FieldFormatsRegistry; dashboard: DashboardSetup; - spacesApi: SpacesPluginStart; + spacesApi?: SpacesPluginStart; charts: ChartsPluginStart; cases?: CasesUiStart; unifiedSearch: UnifiedSearchPublicPluginStart; diff --git a/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx b/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx index ef8238a7e966e..4bd30a2f5af46 100644 --- a/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx +++ b/x-pack/plugins/ml/public/application/management/jobs_list/components/jobs_list_page/jobs_list_page.tsx @@ -62,7 +62,6 @@ export const JobsListPage: FC<{ () => mlApiServicesProvider(new HttpService(coreStart.http)), [coreStart.http] ); - const spacesEnabled = spacesApi !== undefined; const [initialized, setInitialized] = useState(false); const [accessDenied, setAccessDenied] = useState(false); const [isPlatinumOrTrialLicense, setIsPlatinumOrTrialLicense] = useState(true); @@ -153,20 +152,18 @@ export const JobsListPage: FC<{ > - {spacesEnabled && ( - <> - setShowSyncFlyout(true)} - data-test-subj="mlStackMgmtSyncButton" - > - {i18n.translate('xpack.ml.management.jobsList.syncFlyoutButton', { - defaultMessage: 'Synchronize saved objects', - })} - - {showSyncFlyout && } - - - )} + <> + setShowSyncFlyout(true)} + data-test-subj="mlStackMgmtSyncButton" + > + {i18n.translate('xpack.ml.management.jobsList.syncFlyoutButton', { + defaultMessage: 'Synchronize saved objects', + })} + + {showSyncFlyout && } + + void; } From 20fc667792117c406c826055ad3c34a7b6c55e1b Mon Sep 17 00:00:00 2001 From: Coen Warmer Date: Thu, 16 Feb 2023 15:28:36 +0100 Subject: [PATCH 080/210] [SLO Index][SLO Welcome Prompt]: Use ObservabilityPageTemplate so menu stays visible (#151428) --- .../pages/slos/components/slo_list_welcome_prompt.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_welcome_prompt.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_welcome_prompt.tsx index c78a7f2455518..5231edb3d945c 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_welcome_prompt.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_welcome_prompt.tsx @@ -20,6 +20,7 @@ import { i18n } from '@kbn/i18n'; import { useKibana } from '../../../utils/kibana_react'; import { useLicense } from '../../../hooks/use_license'; +import { usePluginContext } from '../../../hooks/use_plugin_context'; import { paths } from '../../../config'; import illustration from './assets/illustration.svg'; @@ -28,6 +29,7 @@ export function SloListWelcomePrompt() { application: { navigateToUrl }, http: { basePath }, } = useKibana().services; + const { ObservabilityPageTemplate } = usePluginContext(); const { hasAtLeast } = useLicense(); @@ -38,11 +40,7 @@ export function SloListWelcomePrompt() { }; return ( - + @@ -177,6 +175,6 @@ export function SloListWelcomePrompt() { } /> - + ); } From b94c77780eb71d56aa809e5df4a5c594abab2d25 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Thu, 16 Feb 2023 16:15:52 +0100 Subject: [PATCH 081/210] [Fleet] Hide from UI some shipper options (#151341) Closes https://github.com/elastic/kibana/issues/147613 Closes https://github.com/elastic/kibana/issues/147613 ## Summary Follow up of https://github.com/elastic/kibana/pull/145755 Introduce a feature flag (`showExperimentalShipperOptions`) to hide from the UI the shipper options that are still not ready to be shown to the user. The only available parameters for now should be the following, as per [comment](https://github.com/elastic/ingest-dev/issues/1512#issuecomment-1409233389): - Mem queue - Max batch size - Queue flush timeout ### Testing steps - Add a new output and in the yaml editor add one of the following and save it; ``` shipper: {} ``` or ``` shipper: enabled: true ``` - Edit the output, the shipper section should appear under "advanced options" Screenshot 2023-02-15 at 16 30 01 - Generated full agent policy: Screenshot 2023-02-16 at 15 05 20 There are more parameters visible, but they're set to `null` ### Checklist - [ ] [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 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../fleet/common/experimental_features.ts | 1 + .../advanced_options_section.tsx | 299 +++++++++--------- .../edit_output_flyout/use_output_form.tsx | 34 +- .../agent_policies/full_agent_policy.ts | 4 - 4 files changed, 177 insertions(+), 161 deletions(-) diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts index 37acc7b056917..349fb089259ff 100644 --- a/x-pack/plugins/fleet/common/experimental_features.ts +++ b/x-pack/plugins/fleet/common/experimental_features.ts @@ -20,6 +20,7 @@ export const allowedExperimentalValues = Object.freeze({ displayAgentMetrics: true, showIntegrationsSubcategories: false, agentFqdnMode: true, + showExperimentalShipperOptions: false, }); type ExperimentalConfigKeys = Array; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/advanced_options_section.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/advanced_options_section.tsx index fa0d576282372..2c33383a63acc 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/advanced_options_section.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/advanced_options_section.tsx @@ -23,6 +23,8 @@ import { import { i18n } from '@kbn/i18n'; +import { ExperimentalFeaturesService } from '../../../../services'; + import type { OutputFormInputsType } from './use_output_form'; export interface AdvancedOptionsSectionProps { @@ -46,6 +48,7 @@ export const AdvancedOptionsSection: React.FunctionComponent - + {showExperimentalShipperOptions && ( + <> + - - - - + + + + } /> - } - /> - - - - - - - - - + + + + + + + + + - - - - + + + + } /> - } - /> - - - + + + + + + + + + + - - - - - - - } - {...diskQueuePathInput.formRowProps} - > - - + {...diskQueuePathInput.formRowProps} + > + + - - } - > - - - - - - + - - - - + } + > + + + + + + + + + + + - + - - - - + + + + } /> - } - /> - - - - - - - - + + + + + + +
+ - + - - - - + + + + } /> - } - /> - - - - - - - - - - - + + + + + + + + + + + + + )} ) : null; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx index 5c012c12924d8..28175ebeafeba 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/use_output_form.tsx @@ -23,6 +23,7 @@ import { } from '../../../../hooks'; import type { Output, PostOutputRequest } from '../../../../types'; import { useConfirmModal } from '../../hooks/use_confirm_modal'; +import { ExperimentalFeaturesService } from '../../../../services'; import { validateName, @@ -65,6 +66,8 @@ export interface OutputFormInputsType { export function useOutputForm(onSucess: () => void, output?: Output) { const fleetStatus = useFleetStatus(); + const { showExperimentalShipperOptions } = ExperimentalFeaturesService.get(); + const hasEncryptedSavedObjectConfigured = !fleetStatus.missingOptionalFeatures?.includes( 'encrypted_saved_object_encryption_key_required' ); @@ -159,7 +162,6 @@ export function useOutputForm(onSucess: () => void, output?: Output) { !diskQueueCompressionEnabled.value ?? false ); - // These parameters are yet tbd - https://github.com/elastic/kibana/issues/147613 const memQueueEvents = useNumberInput(output?.shipper?.mem_queue_events || undefined); const queueFlushTimeout = useNumberInput(output?.shipper?.queue_flush_timeout || undefined); const maxBatchBytes = useNumberInput(output?.shipper?.max_batch_bytes || undefined); @@ -265,8 +267,20 @@ export function useOutputForm(onSucess: () => void, output?: Output) { setIsloading(true); let shipperParams = {}; + if (!isShipperDisabled) { shipperParams = { + shipper: { + mem_queue_events: memQueueEvents.value ? Number(memQueueEvents.value) : null, + queue_flush_timeout: queueFlushTimeout.value ? Number(queueFlushTimeout.value) : null, + max_batch_bytes: maxBatchBytes.value ? Number(maxBatchBytes.value) : null, + }, + }; + } + + if (!isShipperDisabled && showExperimentalShipperOptions) { + shipperParams = { + ...shipperParams, shipper: { disk_queue_enabled: diskQueueEnabledInput.value, disk_queue_path: @@ -284,9 +298,6 @@ export function useOutputForm(onSucess: () => void, output?: Output) { ? Number(compressionLevelInput.value) : null, loadbalance: loadBalanceEnabledInput.value, - mem_queue_events: memQueueEvents.value ? Number(memQueueEvents.value) : null, - queue_flush_timeout: queueFlushTimeout.value ? Number(queueFlushTimeout.value) : null, - max_batch_bytes: maxBatchBytes.value ? Number(maxBatchBytes.value) : null, }, }; } @@ -353,8 +364,10 @@ export function useOutputForm(onSucess: () => void, output?: Output) { } }, [ validate, - isLogstash, isShipperDisabled, + showExperimentalShipperOptions, + proxyIdInput.value, + isLogstash, nameInput.value, typeInput.value, logstashHostsInput.value, @@ -366,10 +379,11 @@ export function useOutputForm(onSucess: () => void, output?: Output) { sslCertificateAuthoritiesInput.value, elasticsearchUrlInput.value, caTrustedFingerprintInput.value, - proxyIdInput.value, - notifications.toasts, - onSucess, output, + onSucess, + memQueueEvents.value, + queueFlushTimeout.value, + maxBatchBytes.value, diskQueueEnabledInput.value, diskQueuePathInput.value, diskQueueMaxSizeInput.value, @@ -377,10 +391,8 @@ export function useOutputForm(onSucess: () => void, output?: Output) { diskQueueCompressionEnabled.value, compressionLevelInput.value, loadBalanceEnabledInput.value, - memQueueEvents.value, - queueFlushTimeout.value, - maxBatchBytes.value, confirm, + notifications.toasts, ]); return { diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts index fe434c015e438..58cf87009a5d0 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts @@ -221,10 +221,6 @@ export function transformOutputToFullPolicyOutput( if (!isShipperDisabled) { shipperDiskQueueData = buildShipperQueueData(shipper); } - /* - TODO: Once the Elastic-Shipper is ready, - Verify that these parameters have the correct names and structure - */ /* eslint-disable @typescript-eslint/naming-convention */ const { loadbalance, From b4f5fa6ed800bbcd886464d9ccc3f2fbe1bb3e2a Mon Sep 17 00:00:00 2001 From: Maja Grubic Date: Thu, 16 Feb 2023 16:16:32 +0100 Subject: [PATCH 082/210] [SavedObjectFinder] Remove savedObjects.find (#151220) ## Summary This PR replaces deprecated client-side `savedObjects.find` method with a server-side one and a corresponding API call. As a result, the dependencies of the `SavedObjectFinder` component have changed slightly: instead of `coreStart.savedObjects`, the component is now taking `coreStart.http`. If you have been tagged as a reviewer, it means your plugin is using `SavedObjectFinder` somewhere. To test it, ensure it all works as previously. ### 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 ~- [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/))~ ~- [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))~ ~- [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~ ~- [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))~ ~- [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers)~ ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../public/dashboard_actions/index.ts | 2 +- .../embeddable/api/add_panel_from_library.ts | 5 +- .../public/services/http/http.stub.ts | 1 + .../public/services/http/http_service.ts | 3 +- .../dashboard/public/services/http/types.ts | 5 +- src/plugins/embeddable/public/plugin.tsx | 2 +- src/plugins/saved_objects/common/index.ts | 1 + src/plugins/saved_objects/common/types.ts | 35 +++ .../saved_objects/public/finder/index.ts | 6 +- .../finder/saved_object_finder.test.tsx | 208 +++++++++--------- .../public/finder/saved_object_finder.tsx | 70 +++--- src/plugins/saved_objects/public/index.ts | 3 +- .../saved_objects/server/plugin.test.mocks.ts | 12 + .../saved_objects/server/plugin.test.ts | 37 ++++ src/plugins/saved_objects/server/plugin.ts | 5 +- .../saved_objects/server/routes/find.ts | 61 +++++ .../saved_objects/server/routes/index.ts | 14 ++ src/plugins/saved_objects/server/types.ts | 10 + src/plugins/saved_objects/tsconfig.json | 1 + .../public/wizard/new_vis_modal.test.tsx | 20 +- .../public/wizard/new_vis_modal.tsx | 11 +- .../search_selection/search_selection.tsx | 6 +- .../public/wizard/show_new_vis.tsx | 3 +- src/plugins/visualizations/tsconfig.json | 1 + .../embeddable_flyout/flyout.component.tsx | 4 +- .../canvas/public/services/kibana/platform.ts | 1 + .../canvas/public/services/platform.ts | 2 + .../canvas/public/services/stubs/platform.ts | 1 + .../guidance_panel/guidance_panel.tsx | 4 +- .../graph/public/components/search_bar.tsx | 4 +- .../graph/public/components/source_picker.tsx | 10 +- .../graph/public/services/source_modal.tsx | 6 +- .../source_selection.test.tsx | 2 +- .../source_selection/source_selection.tsx | 8 +- .../components/data_view/change_data_view.tsx | 4 +- .../new_job/pages/index_or_search/page.tsx | 4 +- .../search_selection/search_selection.tsx | 4 +- 37 files changed, 374 insertions(+), 202 deletions(-) create mode 100644 src/plugins/saved_objects/common/types.ts create mode 100644 src/plugins/saved_objects/server/plugin.test.mocks.ts create mode 100644 src/plugins/saved_objects/server/plugin.test.ts create mode 100644 src/plugins/saved_objects/server/routes/find.ts create mode 100644 src/plugins/saved_objects/server/routes/index.ts create mode 100644 src/plugins/saved_objects/server/types.ts diff --git a/src/plugins/dashboard/public/dashboard_actions/index.ts b/src/plugins/dashboard/public/dashboard_actions/index.ts index 6317c10dda1a6..652b66b2ad195 100644 --- a/src/plugins/dashboard/public/dashboard_actions/index.ts +++ b/src/plugins/dashboard/public/dashboard_actions/index.ts @@ -39,7 +39,7 @@ export const buildAllDashboardActions = async ({ uiActions.registerAction(clonePanelAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, clonePanelAction.id); - const SavedObjectFinder = getSavedObjectFinder(core.savedObjects, uiSettings); + const SavedObjectFinder = getSavedObjectFinder(uiSettings, core.http); const changeViewAction = new ReplacePanelAction(SavedObjectFinder); uiActions.registerAction(changeViewAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, changeViewAction.id); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts index 1cd2d05d9282f..79a3caeafba17 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { HttpStart } from '@kbn/core/public'; import { isErrorEmbeddable, openAddPanelFlyout } from '@kbn/embeddable-plugin/public'; import { getSavedObjectFinder } from '@kbn/saved-objects-plugin/public'; @@ -18,14 +19,14 @@ export function addFromLibrary(this: DashboardContainer) { notifications, usageCollection, settings: { uiSettings, theme }, - dashboardSavedObject: { savedObjectsClient }, embeddable: { getEmbeddableFactories, getEmbeddableFactory }, + http, } = pluginServices.getServices(); if (isErrorEmbeddable(this)) return; this.openOverlay( openAddPanelFlyout({ - SavedObjectFinder: getSavedObjectFinder({ client: savedObjectsClient }, uiSettings), + SavedObjectFinder: getSavedObjectFinder(uiSettings, http as HttpStart), reportUiCounter: usageCollection.reportUiCounter, getAllFactories: getEmbeddableFactories, getFactory: getEmbeddableFactory, diff --git a/src/plugins/dashboard/public/services/http/http.stub.ts b/src/plugins/dashboard/public/services/http/http.stub.ts index 37abd532f7d9d..8a2aac5dc44db 100644 --- a/src/plugins/dashboard/public/services/http/http.stub.ts +++ b/src/plugins/dashboard/public/services/http/http.stub.ts @@ -17,5 +17,6 @@ export const httpServiceFactory: HttpServiceFactory = () => { return { basePath: serviceMock.http.basePath, + get: serviceMock.http.get, }; }; diff --git a/src/plugins/dashboard/public/services/http/http_service.ts b/src/plugins/dashboard/public/services/http/http_service.ts index 26ccc3a943f95..ee81ebacfd686 100644 --- a/src/plugins/dashboard/public/services/http/http_service.ts +++ b/src/plugins/dashboard/public/services/http/http_service.ts @@ -16,10 +16,11 @@ export type HttpServiceFactory = KibanaPluginServiceFactory< >; export const httpServiceFactory: HttpServiceFactory = ({ coreStart }) => { const { - http: { basePath }, + http: { basePath, get }, } = coreStart; return { basePath, + get, }; }; diff --git a/src/plugins/dashboard/public/services/http/types.ts b/src/plugins/dashboard/public/services/http/types.ts index e92bac92f6286..3b0d16b6b372e 100644 --- a/src/plugins/dashboard/public/services/http/types.ts +++ b/src/plugins/dashboard/public/services/http/types.ts @@ -6,8 +6,9 @@ * Side Public License, v 1. */ -import type { CoreSetup } from '@kbn/core/public'; +import type { CoreStart } from '@kbn/core/public'; export interface DashboardHTTPService { - basePath: CoreSetup['http']['basePath']; + basePath: CoreStart['http']['basePath']; + get: CoreStart['http']['get']; } diff --git a/src/plugins/embeddable/public/plugin.tsx b/src/plugins/embeddable/public/plugin.tsx index 937ea9a28639d..1ea92fe129ccf 100644 --- a/src/plugins/embeddable/public/plugin.tsx +++ b/src/plugins/embeddable/public/plugin.tsx @@ -207,7 +207,7 @@ export class EmbeddablePublicPlugin implements Plugin diff --git a/src/plugins/saved_objects/common/index.ts b/src/plugins/saved_objects/common/index.ts index f2a1aa7c06e54..056d0b4638efc 100644 --- a/src/plugins/saved_objects/common/index.ts +++ b/src/plugins/saved_objects/common/index.ts @@ -8,3 +8,4 @@ export const PER_PAGE_SETTING = 'savedObjects:perPage'; export const LISTING_LIMIT_SETTING = 'savedObjects:listingLimit'; +export type { SavedObjectCommon, FindQueryHTTP, FindResponseHTTP, FinderAttributes } from './types'; diff --git a/src/plugins/saved_objects/common/types.ts b/src/plugins/saved_objects/common/types.ts new file mode 100644 index 0000000000000..7feca5eecb40e --- /dev/null +++ b/src/plugins/saved_objects/common/types.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 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 { SavedObject } from '@kbn/core-saved-objects-server'; + +export type SavedObjectCommon = SavedObject; + +export interface FindQueryHTTP { + perPage?: number; + page?: number; + type: string | string[]; + search?: string; + searchFields?: string[]; + defaultSearchOperator?: 'AND' | 'OR'; + sortField?: string; + sortOrder?: 'asc' | 'desc'; + fields?: string | string[]; +} + +export interface FinderAttributes { + title?: string; + name?: string; + type: string; +} + +export interface FindResponseHTTP { + saved_objects: Array>; + total: number; + page: number; + per_page: number; +} diff --git a/src/plugins/saved_objects/public/finder/index.ts b/src/plugins/saved_objects/public/finder/index.ts index dc4213978aa52..aaf6259daca1d 100644 --- a/src/plugins/saved_objects/public/finder/index.ts +++ b/src/plugins/saved_objects/public/finder/index.ts @@ -6,9 +6,5 @@ * Side Public License, v 1. */ -export type { - SavedObjectMetaData, - SavedObjectFinderUiProps, - FinderAttributes, -} from './saved_object_finder'; +export type { SavedObjectMetaData, SavedObjectFinderUiProps } from './saved_object_finder'; export { SavedObjectFinderUi, getSavedObjectFinder } from './saved_object_finder'; diff --git a/src/plugins/saved_objects/public/finder/saved_object_finder.test.tsx b/src/plugins/saved_objects/public/finder/saved_object_finder.test.tsx index bb33de184f6ce..17f81733f831b 100644 --- a/src/plugins/saved_objects/public/finder/saved_object_finder.test.tsx +++ b/src/plugins/saved_objects/public/finder/saved_object_finder.test.tsx @@ -52,43 +52,45 @@ describe('SavedObjectsFinder', () => { }, ]; - it('should call saved object client on startup', async () => { + it('should call api find on startup', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( ); wrapper.instance().componentDidMount!(); - expect(core.savedObjects.client.find).toHaveBeenCalledWith({ - type: ['search'], - fields: ['title', 'name'], - search: undefined, - page: 1, - perPage: 10, - searchFields: ['title^3', 'description', 'name'], - defaultSearchOperator: 'AND', + expect(core.http.get).toHaveBeenCalledWith('/internal/saved-objects-finder/find', { + query: { + type: ['search'], + fields: ['title', 'name'], + search: undefined, + page: 1, + perPage: 10, + searchFields: ['title^3', 'description', 'name'], + defaultSearchOperator: 'AND', + }, }); }); it('should list initial items', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( @@ -104,14 +106,14 @@ describe('SavedObjectsFinder', () => { it('should call onChoose on item click', async () => { const chooseStub = sinon.stub(); const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { describe('sorting', () => { it('should list items ascending', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( @@ -150,14 +152,14 @@ describe('SavedObjectsFinder', () => { it('should list items descending', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( @@ -174,14 +176,14 @@ describe('SavedObjectsFinder', () => { it('should not show the saved objects which get filtered by showSavedObject', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { describe('search', () => { it('should request filtered list on search input', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( @@ -223,25 +225,27 @@ describe('SavedObjectsFinder', () => { .first() .simulate('change', { target: { value: 'abc' } }); - expect(core.savedObjects.client.find).toHaveBeenCalledWith({ - type: ['search'], - fields: ['title', 'name'], - search: 'abc*', - page: 1, - perPage: 10, - searchFields: ['title^3', 'description', 'name'], - defaultSearchOperator: 'AND', + expect(core.http.get).toHaveBeenCalledWith('/internal/saved-objects-finder/find', { + query: { + type: ['search'], + fields: ['title', 'name'], + search: 'abc*', + page: 1, + perPage: 10, + searchFields: ['title^3', 'description', 'name'], + defaultSearchOperator: 'AND', + }, }); }); it('should include additional fields in search if listed in meta data', async () => { const core = coreMock.createStart(); core.uiSettings.get.mockImplementation(() => 10); - (core.savedObjects.client.find as jest.Mock).mockResolvedValue({ savedObjects: [] }); + (core.http.get as jest.Mock).mockResolvedValue({ saved_objects: [] }); const wrapper = shallow( { .first() .simulate('change', { target: { value: 'abc' } }); - expect(core.savedObjects.client.find).toHaveBeenCalledWith({ - type: ['type1', 'type2'], - fields: ['title', 'name', 'field1', 'field2', 'field3'], - search: 'abc*', - page: 1, - perPage: 10, - searchFields: ['title^3', 'description'], - defaultSearchOperator: 'AND', + expect(core.http.get).toHaveBeenCalledWith('/internal/saved-objects-finder/find', { + query: { + type: ['type1', 'type2'], + fields: ['title', 'name', 'field1', 'field2', 'field3'], + search: 'abc*', + page: 1, + perPage: 10, + searchFields: ['title^3', 'description'], + defaultSearchOperator: 'AND', + }, }); }); it('should respect response order on search input', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( @@ -307,14 +313,14 @@ describe('SavedObjectsFinder', () => { it('should request multiple saved object types at once', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { ); wrapper.instance().componentDidMount!(); - expect(core.savedObjects.client.find).toHaveBeenCalledWith({ - type: ['search', 'vis'], - fields: ['title', 'name'], - search: undefined, - page: 1, - perPage: 10, - searchFields: ['title^3', 'description'], - defaultSearchOperator: 'AND', + expect(core.http.get).toHaveBeenCalledWith('/internal/saved-objects-finder/find', { + query: { + type: ['search', 'vis'], + fields: ['title', 'name'], + search: undefined, + page: 1, + perPage: 10, + searchFields: ['title^3', 'description'], + defaultSearchOperator: 'AND', + }, }); }); @@ -359,16 +367,16 @@ describe('SavedObjectsFinder', () => { it('should not render filter buttons if disabled', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => + (core.http.get as any as jest.SpyInstance).mockImplementation(() => Promise.resolve({ - savedObjects: [doc, doc2, doc3], + saved_objects: [doc, doc2, doc3], }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should not render filter buttons if there is only one type in the list', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => + (core.http.get as any as jest.SpyInstance).mockImplementation(() => Promise.resolve({ - savedObjects: [doc, doc2], + saved_objects: [doc, doc2], }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should apply filter if selected', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => + (core.http.get as any as jest.SpyInstance).mockImplementation(() => Promise.resolve({ - savedObjects: [doc, doc2, doc3], + saved_objects: [doc, doc2, doc3], }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should display no items message if there are no items', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [] }) ); core.uiSettings.get.mockImplementation(() => 10); const noItemsMessage = ; const wrapper = shallow( { it('should show a table pagination with initial per page', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: longItemList }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: longItemList }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should allow switching the page size', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: longItemList }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: longItemList }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should switch page correctly', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: longItemList }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: longItemList }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should show an ordinary pagination for fixed page sizes', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: longItemList }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: longItemList }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { it('should switch page correctly for fixed page sizes', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: longItemList }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: longItemList }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { describe('loading state', () => { it('should display a spinner during initial loading', () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as jest.Mock).mockResolvedValue({ savedObjects: [] }); + (core.http.get as jest.Mock).mockResolvedValue({ saved_objects: [] }); const wrapper = shallow( @@ -597,13 +605,13 @@ describe('SavedObjectsFinder', () => { it('should hide the spinner if data is shown', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc] }) ); const wrapper = shallow( { it('should not show the spinner if there are already items', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc] }) ); const wrapper = shallow( @@ -649,14 +657,14 @@ describe('SavedObjectsFinder', () => { it('should render with children', async () => { const core = coreMock.createStart(); - (core.savedObjects.client.find as any as jest.SpyInstance).mockImplementation(() => - Promise.resolve({ savedObjects: [doc, doc2] }) + (core.http.get as any as jest.SpyInstance).mockImplementation(() => + Promise.resolve({ saved_objects: [doc, doc2] }) ); core.uiSettings.get.mockImplementation(() => 10); const wrapper = shallow( { type: string; name: string; - getIconForSavedObject(savedObject: SimpleSavedObject): IconType; - getTooltipForSavedObject?(savedObject: SimpleSavedObject): string; - showSavedObject?(savedObject: SimpleSavedObject): boolean; - getSavedObjectSubType?(savedObject: SimpleSavedObject): string; + getIconForSavedObject(savedObject: SavedObjectCommon): IconType; + getTooltipForSavedObject?(savedObject: SavedObjectCommon): string; + showSavedObject?(savedObject: SavedObjectCommon): boolean; + getSavedObjectSubType?(savedObject: SavedObjectCommon): string; includeFields?: string[]; defaultSearchField?: string; } -export interface FinderAttributes { - title?: string; - name?: string; - type: string; -} - interface SavedObjectFinderState { items: Array<{ title: string | null; name: string | null; - id: SimpleSavedObject['id']; - type: SimpleSavedObject['type']; - savedObject: SimpleSavedObject; + id: SavedObjectCommon['id']; + type: SavedObjectCommon['type']; + savedObject: SavedObjectCommon; }>; query: string; isFetchingItems: boolean; @@ -77,10 +72,10 @@ interface SavedObjectFinderState { interface BaseSavedObjectFinder { onChoose?: ( - id: SimpleSavedObject['id'], - type: SimpleSavedObject['type'], + id: SavedObjectCommon['id'], + type: SavedObjectCommon['type'], name: string, - savedObject: SimpleSavedObject + savedObject: SavedObjectCommon ) => void; noItemsMessage?: React.ReactNode; savedObjectMetaData: Array>; @@ -100,8 +95,8 @@ interface SavedObjectFinderInitialPageSize extends BaseSavedObjectFinder { export type SavedObjectFinderProps = SavedObjectFinderFixedPage | SavedObjectFinderInitialPageSize; export type SavedObjectFinderUiProps = { - savedObjects: CoreStart['savedObjects']; uiSettings: CoreStart['uiSettings']; + http: CoreStart['http']; } & SavedObjectFinderProps; class SavedObjectFinderUi extends React.Component< @@ -134,7 +129,7 @@ class SavedObjectFinderUi extends React.Component< }, []); const perPage = this.props.uiSettings.get(LISTING_LIMIT_SETTING); - const resp = await this.props.savedObjects.client.find({ + const params: FindQueryHTTP = { type: Object.keys(metaDataMap), fields: [...new Set(fields)], search: query ? `${query}*` : undefined, @@ -142,15 +137,17 @@ class SavedObjectFinderUi extends React.Component< perPage, searchFields: ['title^3', 'description', ...additionalSearchFields], defaultSearchOperator: 'AND', - }); + }; + const resp = (await this.props.http.get('/internal/saved-objects-finder/find', { + query: params as Record, + })) as FindResponseHTTP; - resp.savedObjects = resp.savedObjects.filter((savedObject) => { + resp.saved_objects = resp.saved_objects.filter((savedObject) => { const metaData = metaDataMap[savedObject.type]; if (metaData.showSavedObject) { return metaData.showSavedObject(savedObject); - } else { - return true; } + return true; }); if (!this.isComponentMounted) { @@ -163,14 +160,11 @@ class SavedObjectFinderUi extends React.Component< this.setState({ isFetchingItems: false, page: 0, - items: resp.savedObjects.map((savedObject) => { - const { - attributes: { name, title }, - id, - type, - } = savedObject; + items: resp.saved_objects.map((savedObject) => { + const { attributes, id, type } = savedObject; + const { name, title } = attributes as FinderAttributes; const titleToUse = typeof title === 'string' ? title : ''; - const nameToUse = name && typeof name === 'string' ? name : titleToUse; + const nameToUse = name ? name : titleToUse; return { title: titleToUse, name: nameToUse, @@ -533,9 +527,9 @@ class SavedObjectFinderUi extends React.Component< } } -const getSavedObjectFinder = (savedObject: SavedObjectsStart, uiSettings: IUiSettingsClient) => { +const getSavedObjectFinder = (uiSettings: IUiSettingsClient, http: HttpStart) => { return (props: SavedObjectFinderProps) => ( - + ); }; diff --git a/src/plugins/saved_objects/public/index.ts b/src/plugins/saved_objects/public/index.ts index 2cfb84d608c67..5d10887c8c722 100644 --- a/src/plugins/saved_objects/public/index.ts +++ b/src/plugins/saved_objects/public/index.ts @@ -10,7 +10,8 @@ import { SavedObjectsPublicPlugin } from './plugin'; export type { OnSaveProps, OriginSaveModalProps, SaveModalState, SaveResult } from './save_modal'; export { SavedObjectSaveModal, SavedObjectSaveModalOrigin, showSaveModal } from './save_modal'; -export type { SavedObjectFinderUiProps, SavedObjectMetaData, FinderAttributes } from './finder'; +export type { SavedObjectFinderUiProps, SavedObjectMetaData } from './finder'; +export type { FinderAttributes } from '../common/types'; export { getSavedObjectFinder, SavedObjectFinderUi } from './finder'; export type { SavedObjectDecorator, diff --git a/src/plugins/saved_objects/server/plugin.test.mocks.ts b/src/plugins/saved_objects/server/plugin.test.mocks.ts new file mode 100644 index 0000000000000..af29314a63c79 --- /dev/null +++ b/src/plugins/saved_objects/server/plugin.test.mocks.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 registerRoutesMock = jest.fn(); +jest.doMock('./routes', () => ({ + registerRoutes: registerRoutesMock, +})); diff --git a/src/plugins/saved_objects/server/plugin.test.ts b/src/plugins/saved_objects/server/plugin.test.ts new file mode 100644 index 0000000000000..68569a6a24c17 --- /dev/null +++ b/src/plugins/saved_objects/server/plugin.test.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { registerRoutesMock } from './plugin.test.mocks'; + +import { coreMock } from '@kbn/core/server/mocks'; +import { SavedObjectsServerPlugin } from './plugin'; +import { uiSettings } from './ui_settings'; + +describe('SavedObjectsPlugin', () => { + let plugin: SavedObjectsServerPlugin; + let coreSetup: ReturnType; + + beforeEach(() => { + coreSetup = coreMock.createSetup(); + plugin = new SavedObjectsServerPlugin(); + }); + + afterEach(() => { + registerRoutesMock.mockReset(); + }); + + describe('#setup', () => { + it('calls `registerRoutes` and `registerSettings` with the correct parameters', () => { + plugin.setup(coreSetup); + + expect(coreSetup.uiSettings.register).toHaveBeenCalledWith(uiSettings); + expect(coreSetup.http.createRouter).toHaveBeenCalledTimes(1); + expect(registerRoutesMock).toHaveBeenCalledTimes(1); + }); + }); +}); diff --git a/src/plugins/saved_objects/server/plugin.ts b/src/plugins/saved_objects/server/plugin.ts index c540846a191f8..6d01010e37612 100644 --- a/src/plugins/saved_objects/server/plugin.ts +++ b/src/plugins/saved_objects/server/plugin.ts @@ -6,12 +6,15 @@ * Side Public License, v 1. */ -import { CoreSetup, Plugin } from '@kbn/core/server'; +import type { CoreSetup, Plugin, RequestHandlerContext } from '@kbn/core/server'; +import { registerRoutes } from './routes'; import { uiSettings } from './ui_settings'; export class SavedObjectsServerPlugin implements Plugin { public setup(core: CoreSetup) { core.uiSettings.register(uiSettings); + const router = core.http.createRouter(); + registerRoutes(router); return {}; } diff --git a/src/plugins/saved_objects/server/routes/find.ts b/src/plugins/saved_objects/server/routes/find.ts new file mode 100644 index 0000000000000..37439429451ed --- /dev/null +++ b/src/plugins/saved_objects/server/routes/find.ts @@ -0,0 +1,61 @@ +/* + * Copyright 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 { schema } from '@kbn/config-schema'; +import { SavedObjectsRouter } from '../types'; +import type { SavedObjectCommon, FindResponseHTTP } from '../../common'; + +export const registerFindRoute = (router: SavedObjectsRouter) => { + router.get( + { + path: '/internal/saved-objects-finder/find', + validate: { + query: schema.object({ + perPage: schema.number({ min: 0, defaultValue: 20 }), + page: schema.number({ min: 0, defaultValue: 1 }), + type: schema.oneOf([schema.string(), schema.arrayOf(schema.string())]), + search: schema.maybe(schema.string()), + defaultSearchOperator: schema.oneOf([schema.literal('AND'), schema.literal('OR')]), + sortField: schema.maybe(schema.string()), + sortOrder: schema.maybe(schema.oneOf([schema.literal('asc'), schema.literal('desc')])), + fields: schema.oneOf([schema.string(), schema.arrayOf(schema.string())], { + defaultValue: [], + }), + searchFields: schema.maybe(schema.arrayOf(schema.string())), + }), + }, + options: { + authRequired: 'optional', + }, + }, + async (ctx, req, res) => { + const savedObjectsClient = (await ctx.core).savedObjects.client; + const { query } = req; + + const searchTypes = Array.isArray(query.type) ? query.type : [query.type]; + const includedFields = Array.isArray(query.fields) ? query.fields : [query.fields]; + + const findResponse = await savedObjectsClient.find>({ + ...query, + type: searchTypes, + fields: includedFields, + }); + + const savedObjects = findResponse.saved_objects; + + const response: FindResponseHTTP = { + saved_objects: savedObjects, + total: findResponse.total, + per_page: findResponse.per_page, + page: findResponse.page, + }; + + return res.ok({ body: response }); + } + ); +}; diff --git a/src/plugins/saved_objects/server/routes/index.ts b/src/plugins/saved_objects/server/routes/index.ts new file mode 100644 index 0000000000000..df9a797e8184d --- /dev/null +++ b/src/plugins/saved_objects/server/routes/index.ts @@ -0,0 +1,14 @@ +/* + * Copyright 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 { SavedObjectsRouter } from '../types'; +import { registerFindRoute } from './find'; + +export const registerRoutes = (router: SavedObjectsRouter) => { + registerFindRoute(router); +}; diff --git a/src/plugins/saved_objects/server/types.ts b/src/plugins/saved_objects/server/types.ts new file mode 100644 index 0000000000000..e6ec45a63d04f --- /dev/null +++ b/src/plugins/saved_objects/server/types.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. + */ +import { IRouter, RequestHandlerContext } from '@kbn/core/server'; + +export type SavedObjectsRouter = IRouter; diff --git a/src/plugins/saved_objects/tsconfig.json b/src/plugins/saved_objects/tsconfig.json index d35fe2e1cc183..4307e0768cb17 100644 --- a/src/plugins/saved_objects/tsconfig.json +++ b/src/plugins/saved_objects/tsconfig.json @@ -15,6 +15,7 @@ "@kbn/test-jest-helpers", "@kbn/utility-types", "@kbn/config-schema", + "@kbn/core-saved-objects-server", ], "exclude": [ "target/**/*", diff --git a/src/plugins/visualizations/public/wizard/new_vis_modal.test.tsx b/src/plugins/visualizations/public/wizard/new_vis_modal.test.tsx index 36d756d63f660..edce87cebe495 100644 --- a/src/plugins/visualizations/public/wizard/new_vis_modal.test.tsx +++ b/src/plugins/visualizations/public/wizard/new_vis_modal.test.tsx @@ -10,8 +10,9 @@ import React from 'react'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { TypesStart, VisGroups, BaseVisType } from '../vis_types'; import NewVisModal from './new_vis_modal'; -import { ApplicationStart, SavedObjectsStart, DocLinksStart } from '@kbn/core/public'; +import { ApplicationStart, DocLinksStart } from '@kbn/core/public'; import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks'; +import { httpServiceMock } from '@kbn/core-http-browser-mocks'; describe('NewVisModal', () => { const defaultVisTypeParams = { @@ -75,6 +76,7 @@ describe('NewVisModal', () => { }, }, }; + const http = httpServiceMock.createStartContract({ basePath: '' }); beforeAll(() => { Object.defineProperty(window, 'location', { @@ -98,7 +100,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{} as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); expect(wrapper.find('[data-test-subj="visGroup-aggbased"]').exists()).toBe(true); @@ -115,7 +117,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{} as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); expect(wrapper.find('[data-test-subj="visGroup-tools"]').exists()).toBe(true); @@ -131,7 +133,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{} as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); expect(wrapper.find('[data-test-subj="visType-vis2"]').exists()).toBe(true); @@ -148,7 +150,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{} as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); const visCard = wrapper.find('[data-test-subj="visType-vis"]').last(); @@ -167,7 +169,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{} as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); const visCard = wrapper.find('[data-test-subj="visType-vis"]').last(); @@ -193,7 +195,7 @@ describe('NewVisModal', () => { application={{ navigateToApp } as unknown as ApplicationStart} docLinks={docLinks as DocLinksStart} stateTransfer={stateTransfer} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); const visCard = wrapper.find('[data-test-subj="visType-visWithAliasUrl"]').last(); @@ -218,7 +220,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{ navigateToApp } as unknown as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); const visCard = wrapper.find('[data-test-subj="visType-visWithAliasUrl"]').last(); @@ -239,7 +241,7 @@ describe('NewVisModal', () => { uiSettings={uiSettings} application={{} as ApplicationStart} docLinks={docLinks as DocLinksStart} - savedObjects={{} as SavedObjectsStart} + http={http} /> ); const aggBasedGroupCard = wrapper diff --git a/src/plugins/visualizations/public/wizard/new_vis_modal.tsx b/src/plugins/visualizations/public/wizard/new_vis_modal.tsx index 4ceb93b7ec061..ed682ca54e680 100644 --- a/src/plugins/visualizations/public/wizard/new_vis_modal.tsx +++ b/src/plugins/visualizations/public/wizard/new_vis_modal.tsx @@ -12,12 +12,7 @@ import { EuiModal } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { METRIC_TYPE, UiCounterMetricType } from '@kbn/analytics'; -import { - ApplicationStart, - IUiSettingsClient, - SavedObjectsStart, - DocLinksStart, -} from '@kbn/core/public'; +import { ApplicationStart, IUiSettingsClient, DocLinksStart, HttpStart } from '@kbn/core/public'; import { EmbeddableStateTransfer } from '@kbn/embeddable-plugin/public'; import { SearchSelection } from './search_selection'; import { GroupSelection } from './group_selection'; @@ -34,7 +29,7 @@ interface TypeSelectionProps { addBasePath: (path: string) => string; uiSettings: IUiSettingsClient; docLinks: DocLinksStart; - savedObjects: SavedObjectsStart; + http: HttpStart; application: ApplicationStart; outsideVisualizeApp?: boolean; stateTransfer?: EmbeddableStateTransfer; @@ -97,7 +92,7 @@ class NewVisModal extends React.Component this.setState({ showSearchVisModal: false })} /> diff --git a/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx b/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx index 5771747794273..02e5864da9ce0 100644 --- a/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx +++ b/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx @@ -10,7 +10,7 @@ import React from 'react'; import { EuiModalBody, EuiModalHeader, EuiModalHeaderTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { IUiSettingsClient, SavedObjectsStart } from '@kbn/core/public'; +import { IUiSettingsClient, HttpStart } from '@kbn/core/public'; import { SavedObjectFinderUi } from '@kbn/saved-objects-plugin/public'; import type { BaseVisType } from '../../vis_types'; @@ -21,7 +21,7 @@ interface SearchSelectionProps { onSearchSelected: (searchId: string, searchType: string) => void; visType: BaseVisType; uiSettings: IUiSettingsClient; - savedObjects: SavedObjectsStart; + http: HttpStart; goBack: () => void; } @@ -85,7 +85,7 @@ export class SearchSelection extends React.Component { ]} fixedPageSize={this.fixedPageSize} uiSettings={this.props.uiSettings} - savedObjects={this.props.savedObjects} + http={this.props.http} /> diff --git a/src/plugins/visualizations/public/wizard/show_new_vis.tsx b/src/plugins/visualizations/public/wizard/show_new_vis.tsx index b702cb5aa4209..6e298bb036122 100644 --- a/src/plugins/visualizations/public/wizard/show_new_vis.tsx +++ b/src/plugins/visualizations/public/wizard/show_new_vis.tsx @@ -13,7 +13,6 @@ import { I18nProvider } from '@kbn/i18n-react'; import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import { getHttp, - getSavedObjects, getTypes, getUISettings, getApplication, @@ -81,7 +80,7 @@ export function showNewVisModal({ visTypesRegistry={getTypes()} addBasePath={getHttp().basePath.prepend} uiSettings={getUISettings()} - savedObjects={getSavedObjects()} + http={getHttp()} application={getApplication()} docLinks={getDocLinks()} showAggsSelection={showAggsSelection} diff --git a/src/plugins/visualizations/tsconfig.json b/src/plugins/visualizations/tsconfig.json index 658d391f0a0de..01fdf03133b73 100644 --- a/src/plugins/visualizations/tsconfig.json +++ b/src/plugins/visualizations/tsconfig.json @@ -50,6 +50,7 @@ "@kbn/core-overlays-browser", "@kbn/config-schema", "@kbn/usage-collection-plugin", + "@kbn/core-http-browser-mocks", "@kbn/shared-ux-router", ], "exclude": [ diff --git a/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx b/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx index 0ac0dd279560b..e92c8277488ca 100644 --- a/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx +++ b/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx @@ -38,7 +38,7 @@ export const AddEmbeddableFlyout: FC = ({ const embeddablesService = useEmbeddablesService(); const platformService = usePlatformService(); const { getEmbeddableFactories } = embeddablesService; - const { getSavedObjects, getUISettings } = platformService; + const { getHttp, getUISettings } = platformService; const onAddPanel = useCallback( (id: string, savedObjectType: string) => { @@ -82,8 +82,8 @@ export const AddEmbeddableFlyout: FC = ({ savedObjectMetaData={availableSavedObjects} showFilter={true} noItemsMessage={strings.getNoItemsText()} - savedObjects={getSavedObjects()} uiSettings={getUISettings()} + http={getHttp()} /> diff --git a/x-pack/plugins/canvas/public/services/kibana/platform.ts b/x-pack/plugins/canvas/public/services/kibana/platform.ts index 8a6ea957ab97c..0b51963eeee31 100644 --- a/x-pack/plugins/canvas/public/services/kibana/platform.ts +++ b/x-pack/plugins/canvas/public/services/kibana/platform.ts @@ -45,5 +45,6 @@ export const platformServiceFactory: CanvaPlatformServiceFactory = ({ getSavedObjects: () => coreStart.savedObjects, getSavedObjectsClient: () => coreStart.savedObjects.client, getUISettings: () => coreStart.uiSettings, + getHttp: () => coreStart.http, }; }; diff --git a/x-pack/plugins/canvas/public/services/platform.ts b/x-pack/plugins/canvas/public/services/platform.ts index 613c89770e6e8..b436f51bb33f9 100644 --- a/x-pack/plugins/canvas/public/services/platform.ts +++ b/x-pack/plugins/canvas/public/services/platform.ts @@ -13,6 +13,7 @@ import { ChromeBreadcrumb, IBasePath, ChromeStart, + HttpStart, } from '@kbn/core/public'; import { SpacesPluginStart } from '@kbn/spaces-plugin/public'; @@ -37,4 +38,5 @@ export interface CanvasPlatformService { getSavedObjects: () => SavedObjectsStart; getSavedObjectsClient: () => SavedObjectsClientContract; getUISettings: () => IUiSettingsClient; + getHttp: () => HttpStart; } diff --git a/x-pack/plugins/canvas/public/services/stubs/platform.ts b/x-pack/plugins/canvas/public/services/stubs/platform.ts index 6a0b122069935..d96599257f9b6 100644 --- a/x-pack/plugins/canvas/public/services/stubs/platform.ts +++ b/x-pack/plugins/canvas/public/services/stubs/platform.ts @@ -36,4 +36,5 @@ export const platformServiceFactory: CanvasPlatformServiceFactory = () => ({ setFullscreen: noop, redirectLegacyUrl: noop, getLegacyUrlConflict: undefined, + getHttp: noop, }); diff --git a/x-pack/plugins/graph/public/components/guidance_panel/guidance_panel.tsx b/x-pack/plugins/graph/public/components/guidance_panel/guidance_panel.tsx index 3f95b6adf6b45..81be2e191516a 100644 --- a/x-pack/plugins/graph/public/components/guidance_panel/guidance_panel.tsx +++ b/x-pack/plugins/graph/public/components/guidance_panel/guidance_panel.tsx @@ -77,7 +77,7 @@ function GuidancePanelComponent(props: GuidancePanelProps) { const kibana = useKibana(); const { services, overlays } = kibana; - const { savedObjects, uiSettings, application, data } = services; + const { http, uiSettings, application, data } = services; const [hasDataViews, setHasDataViews] = useState(true); useEffect(() => { @@ -90,7 +90,7 @@ function GuidancePanelComponent(props: GuidancePanelProps) { if (!overlays || !application) return null; const onOpenDatasourcePicker = () => { - openSourceModal({ overlays, savedObjects, uiSettings }, onIndexPatternSelected); + openSourceModal({ overlays, http, uiSettings }, onIndexPatternSelected); }; let content = ( diff --git a/x-pack/plugins/graph/public/components/search_bar.tsx b/x-pack/plugins/graph/public/components/search_bar.tsx index c3e846adffbd3..fcd5d576116d9 100644 --- a/x-pack/plugins/graph/public/components/search_bar.tsx +++ b/x-pack/plugins/graph/public/components/search_bar.tsx @@ -98,7 +98,6 @@ export function SearchBarComponent(props: SearchBarStateProps & SearchBarProps) const kibana = useKibana(); const { services, overlays } = kibana; const { - savedObjects, uiSettings, appName, unifiedSearch, @@ -132,8 +131,7 @@ export function SearchBarComponent(props: SearchBarStateProps & SearchBarProps) data-test-subj="graphDatasourceButton" onClick={() => { confirmWipeWorkspace( - () => - openSourceModal({ overlays, savedObjects, uiSettings }, onIndexPatternSelected), + () => openSourceModal({ overlays, http, uiSettings }, onIndexPatternSelected), i18n.translate('xpack.graph.clearWorkspace.confirmText', { defaultMessage: 'If you change data sources, your current fields and vertices will be reset.', diff --git a/x-pack/plugins/graph/public/components/source_picker.tsx b/x-pack/plugins/graph/public/components/source_picker.tsx index 31ec5b0663ea2..ceb165fd50840 100644 --- a/x-pack/plugins/graph/public/components/source_picker.tsx +++ b/x-pack/plugins/graph/public/components/source_picker.tsx @@ -14,20 +14,16 @@ import { IndexPatternSavedObject } from '../types'; export interface SourcePickerProps { onIndexPatternSelected: (indexPattern: IndexPatternSavedObject) => void; - savedObjects: CoreStart['savedObjects']; + http: CoreStart['http']; uiSettings: CoreStart['uiSettings']; } const fixedPageSize = 8; -export function SourcePicker({ - savedObjects, - uiSettings, - onIndexPatternSelected, -}: SourcePickerProps) { +export function SourcePicker({ http, uiSettings, onIndexPatternSelected }: SourcePickerProps) { return ( { onIndexPatternSelected(indexPattern as IndexPatternSavedObject); diff --git a/x-pack/plugins/graph/public/services/source_modal.tsx b/x-pack/plugins/graph/public/services/source_modal.tsx index cf20e01733139..258bb58d1e077 100644 --- a/x-pack/plugins/graph/public/services/source_modal.tsx +++ b/x-pack/plugins/graph/public/services/source_modal.tsx @@ -14,11 +14,11 @@ import { IndexPatternSavedObject } from '../types'; export function openSourceModal( { overlays, - savedObjects, + http, uiSettings, }: { overlays: KibanaReactOverlays; - savedObjects: CoreStart['savedObjects']; + http: CoreStart['http']; uiSettings: CoreStart['uiSettings']; }, onSelected: (indexPattern: IndexPatternSavedObject) => void @@ -26,7 +26,7 @@ export function openSourceModal( const modalRef = overlays.openModal( { onSelected(indexPattern); modalRef.close(); diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.test.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.test.tsx index 18b93e35a3f36..d52265634cc23 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.test.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.test.tsx @@ -71,8 +71,8 @@ const mockNavigateToPath = jest.fn(); jest.mock('../../../../../contexts/kibana', () => ({ useMlKibana: () => ({ services: { - savedObjects: {}, uiSettings: {}, + http: {}, }, }), useNavigateToPath: () => mockNavigateToPath, diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx index 870715401d709..ed327eb7dc71b 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx @@ -14,11 +14,11 @@ import { EuiPageContent_Deprecated as EuiPageContent, } from '@elastic/eui'; -import type { SimpleSavedObject } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; import { getNestedProperty } from '@kbn/ml-nested-property'; import { SavedObjectFinderUi } from '@kbn/saved-objects-plugin/public'; +import { SavedObjectCommon } from '@kbn/saved-objects-plugin/common'; import { useMlKibana, useNavigateToPath } from '../../../../../contexts/kibana'; import { useToastNotificationService } from '../../../../../services/toast_notification_service'; import { getDataViewAndSavedSearch, isCcsIndexPattern } from '../../../../../util/index_utils'; @@ -27,7 +27,7 @@ const fixedPageSize: number = 20; export const SourceSelection: FC = () => { const { - services: { savedObjects, uiSettings }, + services: { http, uiSettings }, } = useMlKibana(); const navigateToPath = useNavigateToPath(); @@ -39,7 +39,7 @@ export const SourceSelection: FC = () => { id: string, type: string, fullName: string, - savedObject: SimpleSavedObject + savedObject: SavedObjectCommon ) => { // Kibana data views including `:` are cross-cluster search indices // and are not supported by Data Frame Analytics yet. For saved searches @@ -152,7 +152,7 @@ export const SourceSelection: FC = () => { ]} fixedPageSize={fixedPageSize} uiSettings={uiSettings} - savedObjects={savedObjects} + http={http} /> diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx index cc3b20966935b..40a8a3f5a5c4c 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx @@ -54,7 +54,7 @@ interface Props { export const ChangeDataViewModal: FC = ({ onClose }) => { const { services: { - savedObjects, + http, uiSettings, data: { dataViews }, }, @@ -171,7 +171,7 @@ export const ChangeDataViewModal: FC = ({ onClose }) => { ]} fixedPageSize={fixedPageSize} uiSettings={uiSettings} - savedObjects={savedObjects} + http={http} /> )} diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx index 5ece063f9df84..352a2a390fe28 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx +++ b/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx @@ -19,7 +19,7 @@ export interface PageProps { export const Page: FC = ({ nextStepPath }) => { const RESULTS_PER_PAGE = 20; - const { uiSettings, savedObjects } = useMlKibana().services; + const { uiSettings, http } = useMlKibana().services; const navigateToPath = useNavigateToPath(); const onObjectSelection = (id: string, type: string) => { @@ -72,7 +72,7 @@ export const Page: FC = ({ nextStepPath }) => { ]} fixedPageSize={RESULTS_PER_PAGE} uiSettings={uiSettings} - savedObjects={savedObjects} + http={http} /> diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/search_selection/search_selection.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/search_selection/search_selection.tsx index 6a0614bf4256c..500ada3af2aad 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/search_selection/search_selection.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/search_selection/search_selection.tsx @@ -19,7 +19,7 @@ interface SearchSelectionProps { const fixedPageSize: number = 8; export const SearchSelection: FC = ({ onSearchSelected }) => { - const { uiSettings, savedObjects } = useAppDependencies(); + const { uiSettings, http } = useAppDependencies(); return ( <> @@ -72,7 +72,7 @@ export const SearchSelection: FC = ({ onSearchSelected }) ]} fixedPageSize={fixedPageSize} uiSettings={uiSettings} - savedObjects={savedObjects} + http={http} /> From 8bcd29fbaa68aa934574678f1de156baafe92f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Kopyci=C5=84ski?= Date: Thu, 16 Feb 2023 16:22:01 +0100 Subject: [PATCH 083/210] Cleanup package.json resolutions (#151312) --- package.json | 7 +------ yarn.lock | 46 +++++++++++++++++++++++----------------------- 2 files changed, 24 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 85892dfa5e0e3..3cce5bf6c7b47 100644 --- a/package.json +++ b/package.json @@ -77,16 +77,11 @@ "resolutions": { "**/@types/node": "16.11.68", "**/chokidar": "^3.5.3", - "**/deepmerge": "^4.2.2", - "**/fast-deep-equal": "^3.1.1", "**/globule/minimatch": "^3.1.2", "**/hoist-non-react-statics": "^3.3.2", "**/isomorphic-fetch/node-fetch": "^2.6.7", - "**/istanbul-lib-coverage": "^3.2.0", "**/trim": "1.0.1", "**/typescript": "4.6.3", - "**/use-composed-ref": "^1.3.0", - "**/use-latest": "^1.2.1", "globby/fast-glob": "^3.2.11" }, "dependencies": { @@ -1170,7 +1165,7 @@ "@types/file-saver": "^2.0.0", "@types/flot": "^0.0.31", "@types/fnv-plus": "^1.3.0", - "@types/geojson": "7946.0.7", + "@types/geojson": "^7946.0.10", "@types/getos": "^3.0.0", "@types/gulp": "^4.0.6", "@types/gulp-zip": "^4.0.1", diff --git a/yarn.lock b/yarn.lock index 3eeb586370a5f..f166a66a39668 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8046,17 +8046,7 @@ dependencies: "@types/node" "*" -"@types/geojson@*", "@types/geojson@^7946.0.8": - version "7946.0.8" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" - integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== - -"@types/geojson@7946.0.7": - version "7946.0.7" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" - integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== - -"@types/geojson@^7946.0.10": +"@types/geojson@*", "@types/geojson@^7946.0.10", "@types/geojson@^7946.0.8": version "7946.0.10" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== @@ -8940,12 +8930,7 @@ dependencies: "@types/ws" "*" -"@types/semver@^7": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" - integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== - -"@types/semver@^7.3.12": +"@types/semver@^7", "@types/semver@^7.3.12": version "7.3.12" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== @@ -13568,7 +13553,12 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.1.1, deepmerge@^4.2.2: +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -15477,10 +15467,15 @@ fancy-log@^1.3.3: parse-node-version "^1.0.0" time-stamp "^1.0.0" -fast-deep-equal@^2.0.1, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@~3.1.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" @@ -18328,7 +18323,12 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@3.0.0, istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1, istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== From fbdeffb48fcc6c23ded1e84e62d3f33dc84de23d Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 16 Feb 2023 16:35:09 +0100 Subject: [PATCH 084/210] Fix eslint rule for restricting certain lodash imports (#151023) Fixes #110422 TL;DR: The `lodash.set` function is unsafe and shouldn't be called. Cause of error: If you specify multiple `no-restricted-imports` paths for the same module, only the last path is used. Instead you need to combine them into a single path as I've done in this PR. This regression was introduced in #100277 --- .eslintrc.js | 151 +++++++++--------- .../src/lib/utils/dedot.ts | 2 +- .../kbn-apm-synthtrace-client/tsconfig.json | 1 + .../build_filters/phrase_filter.test.ts | 2 +- packages/kbn-es-query/tsconfig.json | 1 + .../src/common/lib/ast/to_expression.test.js | 3 +- packages/kbn-interpreter/tsconfig.json | 1 + packages/kbn-safer-lodash-set/README.md | 2 +- .../control_group/control_group_telemetry.ts | 2 +- src/plugins/controls/tsconfig.json | 1 + .../common/data_views/data_views.test.ts | 3 +- src/plugins/data_views/tsconfig.json | 1 + .../es/content_stream/content_stream.test.ts | 2 +- src/plugins/files/tsconfig.json | 1 + .../create_action_event_log_record_object.ts | 3 +- x-pack/plugins/actions/tsconfig.json | 3 +- .../server/lib/rule_run_metrics_store.ts | 2 +- .../common/apply_bulk_edit_operation.ts | 3 +- .../fleet/get_package_policy_decorators.ts | 3 +- x-pack/plugins/apm/tsconfig.json | 1 + .../partition_labels/extended_template.tsx | 2 +- .../partition_labels/simple_template.tsx | 2 +- x-pack/plugins/cases/public/api/utils.ts | 3 +- .../cases/public/common/mock/connectors.ts | 2 +- .../cases/public/containers/api.test.tsx | 3 +- .../migrations/user_actions/alerts.test.ts | 3 +- .../crawl_details_preview.test.tsx | 3 +- .../suggested_documents_callout.test.tsx | 3 +- .../curations/views/curations.test.tsx | 3 +- .../views/curations_overview.test.tsx | 3 +- .../suggested_curations_callout.test.tsx | 3 +- .../crawl_details_preview.test.tsx | 3 +- .../plugins/enterprise_search/tsconfig.json | 1 + x-pack/plugins/lens/public/utils.ts | 3 +- x-pack/plugins/lens/tsconfig.json | 1 + .../server/lib/logstash/get_node_info.test.ts | 3 +- ...managed_policy_create_import_extension.tsx | 3 +- .../osquery/server/lib/update_global_packs.ts | 3 +- .../server/routes/pack/create_pack_route.ts | 3 +- .../server/routes/pack/update_pack_route.ts | 15 +- .../routes/status/create_status_route.ts | 3 +- x-pack/plugins/osquery/tsconfig.json | 1 + .../server/lib/content_stream.test.ts | 2 +- .../server/routes/lib/jobs_query.test.ts | 2 +- x-pack/plugins/reporting/tsconfig.json | 1 + .../server/config/create_config.ts | 3 +- x-pack/plugins/screenshotting/tsconfig.json | 1 + .../security/public/components/use_form.ts | 4 +- x-pack/plugins/security/tsconfig.json | 1 + .../column_headers/helpers.test.tsx | 3 +- .../components/alerts_table/actions.test.tsx | 2 +- .../public/explore/network/store/reducer.ts | 3 +- .../public/explore/users/store/reducer.ts | 2 +- .../services/action_responder.ts | 2 +- .../enrichment_by_type/host_risk.ts | 3 +- .../enrichment_by_type/user_risk.ts | 3 +- .../enrichments/utils/transforms.test.ts | 2 +- .../server/lib/telemetry/helpers.test.ts | 3 +- .../opsgenie/render_template_variables.ts | 3 +- .../connector_types/tines/render.test.ts | 2 +- .../server/connector_types/tines/render.ts | 2 +- x-pack/plugins/stack_connectors/tsconfig.json | 1 + .../lib/requests/get_monitor_duration.test.ts | 2 +- .../lib/requests/get_pings.test.ts | 2 +- .../requests/search/find_potential_matches.ts | 2 +- x-pack/plugins/synthetics/tsconfig.json | 1 + .../application/lib/value_validators.ts | 3 +- .../plugins/triggers_actions_ui/tsconfig.json | 1 + 68 files changed, 172 insertions(+), 141 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index c011bbe6636c0..221453e382802 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -183,50 +183,49 @@ const DEV_PATTERNS = [ const RESTRICTED_IMPORTS = [ { name: 'lodash', - importNames: ['set', 'setWith'], - message: 'Please use @kbn/safer-lodash-set instead', + importNames: ['set', 'setWith', 'template'], + message: + 'lodash.set/setWith: Please use @kbn/safer-lodash-set instead.\n' + + 'lodash.template: Function is unsafe, and not compatible with our content security policy.', }, { name: 'lodash.set', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/set instead', }, { name: 'lodash.setwith', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/setWith instead', }, { name: 'lodash/set', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/set instead', }, { name: 'lodash/setWith', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/setWith instead', }, { name: 'lodash/fp', - importNames: ['set', 'setWith', 'assoc', 'assocPath'], - message: 'Please use @kbn/safer-lodash-set instead', + importNames: ['set', 'setWith', 'assoc', 'assocPath', 'template'], + message: + 'lodash.set/setWith/assoc/assocPath: Please use @kbn/safer-lodash-set/fp instead\n' + + 'lodash.template: Function is unsafe, and not compatible with our content security policy.', }, { name: 'lodash/fp/set', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/fp/set instead', }, { name: 'lodash/fp/setWith', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/fp/setWith instead', }, { name: 'lodash/fp/assoc', - message: 'Please use @kbn/safer-lodash-set instead', + message: 'Please use @kbn/safer-lodash-set/fp/assoc instead', }, { name: 'lodash/fp/assocPath', - message: 'Please use @kbn/safer-lodash-set instead', - }, - { - name: 'lodash', - importNames: ['template'], - message: 'lodash.template is unsafe, and not compatible with our content security policy.', + message: 'Please use @kbn/safer-lodash-set/fp/assocPath instead', }, { name: 'lodash.template', @@ -236,11 +235,6 @@ const RESTRICTED_IMPORTS = [ name: 'lodash/template', message: 'lodash.template is unsafe, and not compatible with our content security policy.', }, - { - name: 'lodash/fp', - importNames: ['template'], - message: 'lodash.template is unsafe, and not compatible with our content security policy.', - }, { name: 'lodash/fp/template', message: 'lodash.template is unsafe, and not compatible with our content security policy.', @@ -744,47 +738,54 @@ module.exports = { { files: ['**/*.{js,mjs,ts,tsx}'], rules: { - 'no-restricted-imports': [ - 2, + 'no-restricted-imports': ['error', ...RESTRICTED_IMPORTS], + 'no-restricted-modules': [ + 'error', { - paths: RESTRICTED_IMPORTS, + name: 'lodash.set', + message: 'Please use @kbn/safer-lodash-set instead', }, - ], - 'no-restricted-modules': [ - 2, { - paths: [ - { - name: 'lodash.set', - message: 'Please use @kbn/safer-lodash-set instead', - }, - { - name: 'lodash.setwith', - message: 'Please use @kbn/safer-lodash-set instead', - }, - { - name: 'lodash.template', - message: - 'lodash.template is unsafe, and not compatible with our content security policy.', - }, - { - name: 'lodash/set', - message: 'Please use @kbn/safer-lodash-set instead', - }, - { - name: 'lodash/setWith', - message: 'Please use @kbn/safer-lodash-set instead', - }, - { - name: 'lodash/template', - message: - 'lodash.template is unsafe, and not compatible with our content security policy.', - }, - ], + name: 'lodash.setwith', + message: 'Please use @kbn/safer-lodash-set instead', + }, + { + name: 'lodash.template', + message: + 'lodash.template is unsafe, and not compatible with our content security policy.', + }, + { + name: 'lodash/set', + message: 'Please use @kbn/safer-lodash-set/set instead', + }, + { + name: 'lodash/setWith', + message: 'Please use @kbn/safer-lodash-set/setWith instead', + }, + { + name: 'lodash/fp/set', + message: 'Please use @kbn/safer-lodash-set/fp/set instead', + }, + { + name: 'lodash/fp/setWith', + message: 'Please use @kbn/safer-lodash-set/fp/setWith instead', + }, + { + name: 'lodash/fp/assoc', + message: 'Please use @kbn/safer-lodash-set/fp/assoc instead', + }, + { + name: 'lodash/fp/assocPath', + message: 'Please use @kbn/safer-lodash-set/fp/assocPath instead', + }, + { + name: 'lodash/template', + message: + 'lodash.template is unsafe, and not compatible with our content security policy.', }, ], 'no-restricted-properties': [ - 2, + 'error', { object: 'lodash', property: 'set', @@ -795,18 +796,6 @@ module.exports = { property: 'set', message: 'Please use @kbn/safer-lodash-set instead', }, - { - object: 'lodash', - property: 'template', - message: - 'lodash.template is unsafe, and not compatible with our content security policy.', - }, - { - object: '_', - property: 'template', - message: - 'lodash.template is unsafe, and not compatible with our content security policy.', - }, { object: 'lodash', property: 'setWith', @@ -837,6 +826,18 @@ module.exports = { property: 'assocPath', message: 'Please use @kbn/safer-lodash-set instead', }, + { + object: 'lodash', + property: 'template', + message: + 'lodash.template is unsafe, and not compatible with our content security policy.', + }, + { + object: '_', + property: 'template', + message: + 'lodash.template is unsafe, and not compatible with our content security policy.', + }, ], }, }, @@ -844,15 +845,11 @@ module.exports = { files: ['**/common/**/*.{js,mjs,ts,tsx}', '**/public/**/*.{js,mjs,ts,tsx}'], rules: { 'no-restricted-imports': [ - 2, + 'error', + ...RESTRICTED_IMPORTS, { - paths: [ - ...RESTRICTED_IMPORTS, - { - name: 'semver', - message: 'Please use "semver/*/{function}" instead', - }, - ], + name: 'semver', + message: 'Please use "semver/*/{function}" instead', }, ], }, diff --git a/packages/kbn-apm-synthtrace-client/src/lib/utils/dedot.ts b/packages/kbn-apm-synthtrace-client/src/lib/utils/dedot.ts index 5d0f57fb5840b..3c0d3974d6759 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/utils/dedot.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/utils/dedot.ts @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; export function dedot(source: Record, target: Record) { // eslint-disable-next-line guard-for-in diff --git a/packages/kbn-apm-synthtrace-client/tsconfig.json b/packages/kbn-apm-synthtrace-client/tsconfig.json index 8286fda7455b0..5e9a9c6cc2bca 100644 --- a/packages/kbn-apm-synthtrace-client/tsconfig.json +++ b/packages/kbn-apm-synthtrace-client/tsconfig.json @@ -14,5 +14,6 @@ ], "kbn_references": [ "@kbn/datemath", + "@kbn/safer-lodash-set", ] } diff --git a/packages/kbn-es-query/src/filters/build_filters/phrase_filter.test.ts b/packages/kbn-es-query/src/filters/build_filters/phrase_filter.test.ts index f2fc685b2e180..aca38ba285b27 100644 --- a/packages/kbn-es-query/src/filters/build_filters/phrase_filter.test.ts +++ b/packages/kbn-es-query/src/filters/build_filters/phrase_filter.test.ts @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { buildInlineScriptForPhraseFilter, buildPhraseFilter, diff --git a/packages/kbn-es-query/tsconfig.json b/packages/kbn-es-query/tsconfig.json index 07000887f13f8..9dda3fcbcc2cf 100644 --- a/packages/kbn-es-query/tsconfig.json +++ b/packages/kbn-es-query/tsconfig.json @@ -15,6 +15,7 @@ "kbn_references": [ "@kbn/utility-types", "@kbn/i18n", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js b/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js index 98d2cfa1153f2..e97d64abc640c 100644 --- a/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js +++ b/packages/kbn-interpreter/src/common/lib/ast/to_expression.test.js @@ -7,7 +7,8 @@ */ import { toExpression } from './to_expression'; -import { cloneDeep, set, unset } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep, unset } from 'lodash'; describe('toExpression', () => { describe('single expression', () => { diff --git a/packages/kbn-interpreter/tsconfig.json b/packages/kbn-interpreter/tsconfig.json index 8af1ae01dce1b..dc10af2e6fba6 100644 --- a/packages/kbn-interpreter/tsconfig.json +++ b/packages/kbn-interpreter/tsconfig.json @@ -13,6 +13,7 @@ "**/*.js" ], "kbn_references": [ + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-safer-lodash-set/README.md b/packages/kbn-safer-lodash-set/README.md index 08df12ff01ec3..823b1acff3b01 100644 --- a/packages/kbn-safer-lodash-set/README.md +++ b/packages/kbn-safer-lodash-set/README.md @@ -7,7 +7,7 @@ Lodash v4.x. ## Example Usage ```js -const { set } = require('@elastic/safer-loadsh-set'); +const { set } = require('@kbn/safer-lodash-set'); const object = { a: [{ b: { c: 3 } }] }; diff --git a/src/plugins/controls/server/control_group/control_group_telemetry.ts b/src/plugins/controls/server/control_group/control_group_telemetry.ts index 83e363e081241..141fb6808b5ee 100644 --- a/src/plugins/controls/server/control_group/control_group_telemetry.ts +++ b/src/plugins/controls/server/control_group/control_group_telemetry.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { PersistableStateService } from '@kbn/kibana-utils-plugin/common'; import { ControlGroupTelemetry, diff --git a/src/plugins/controls/tsconfig.json b/src/plugins/controls/tsconfig.json index 9acd44b5c2f7e..5029897be467b 100644 --- a/src/plugins/controls/tsconfig.json +++ b/src/plugins/controls/tsconfig.json @@ -33,6 +33,7 @@ "@kbn/config-schema", "@kbn/storybook", "@kbn/ui-theme", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/src/plugins/data_views/common/data_views/data_views.test.ts b/src/plugins/data_views/common/data_views/data_views.test.ts index b382827d5d37a..01e2b9b1d95f3 100644 --- a/src/plugins/data_views/common/data_views/data_views.test.ts +++ b/src/plugins/data_views/common/data_views/data_views.test.ts @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -import { defaults, get, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { defaults, get } from 'lodash'; import { DataViewsService, DataView } from '.'; import { fieldFormatsMock } from '@kbn/field-formats-plugin/common/mocks'; diff --git a/src/plugins/data_views/tsconfig.json b/src/plugins/data_views/tsconfig.json index 614b1beda1115..ae13beea68d45 100644 --- a/src/plugins/data_views/tsconfig.json +++ b/src/plugins/data_views/tsconfig.json @@ -26,6 +26,7 @@ "@kbn/core-test-helpers-http-setup-browser", "@kbn/config-schema", "@kbn/utility-types-jest", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/src/plugins/files/server/blob_storage_service/adapters/es/content_stream/content_stream.test.ts b/src/plugins/files/server/blob_storage_service/adapters/es/content_stream/content_stream.test.ts index 48410081da3ff..5c4ba047d107c 100644 --- a/src/plugins/files/server/blob_storage_service/adapters/es/content_stream/content_stream.test.ts +++ b/src/plugins/files/server/blob_storage_service/adapters/es/content_stream/content_stream.test.ts @@ -7,7 +7,7 @@ */ import type { Logger } from '@kbn/core/server'; -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { Readable } from 'stream'; import { encode } from 'cbor-x'; import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; diff --git a/src/plugins/files/tsconfig.json b/src/plugins/files/tsconfig.json index 02b5acc39ff80..8a14fd5ef06bc 100644 --- a/src/plugins/files/tsconfig.json +++ b/src/plugins/files/tsconfig.json @@ -27,6 +27,7 @@ "@kbn/core-saved-objects-api-server", "@kbn/core-logging-server-mocks", "@kbn/ecs", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts b/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts index d3ad7c1ae3006..95a6101d684f5 100644 --- a/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts +++ b/x-pack/plugins/actions/server/lib/create_action_event_log_record_object.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { isEmpty, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { isEmpty } from 'lodash'; import { IEvent, SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/server'; import { RelatedSavedObjects } from './related_saved_objects'; diff --git a/x-pack/plugins/actions/tsconfig.json b/x-pack/plugins/actions/tsconfig.json index e65c7725c8eaf..72ba9c7c92e09 100644 --- a/x-pack/plugins/actions/tsconfig.json +++ b/x-pack/plugins/actions/tsconfig.json @@ -31,7 +31,8 @@ "@kbn/std", "@kbn/logging", "@kbn/logging-mocks", - "@kbn/core-elasticsearch-client-server-mocks" + "@kbn/core-elasticsearch-client-server-mocks", + "@kbn/safer-lodash-set" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/alerting/server/lib/rule_run_metrics_store.ts b/x-pack/plugins/alerting/server/lib/rule_run_metrics_store.ts index 6bd4ec53bc6a6..db83aeb7a63d6 100644 --- a/x-pack/plugins/alerting/server/lib/rule_run_metrics_store.ts +++ b/x-pack/plugins/alerting/server/lib/rule_run_metrics_store.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { ActionsCompletion } from '../types'; import { ActionsConfigMap } from './get_actions_config_map'; import { SearchMetrics } from './types'; diff --git a/x-pack/plugins/alerting/server/rules_client/common/apply_bulk_edit_operation.ts b/x-pack/plugins/alerting/server/rules_client/common/apply_bulk_edit_operation.ts index b5ca53642496e..e20624c77b2c5 100644 --- a/x-pack/plugins/alerting/server/rules_client/common/apply_bulk_edit_operation.ts +++ b/x-pack/plugins/alerting/server/rules_client/common/apply_bulk_edit_operation.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { set, get, isEqual } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { get, isEqual } from 'lodash'; import type { BulkEditOperation, BulkEditFields } from '../types'; // defining an union type that will passed directly to generic function as a workaround for the issue similar to diff --git a/x-pack/plugins/apm/server/routes/fleet/get_package_policy_decorators.ts b/x-pack/plugins/apm/server/routes/fleet/get_package_policy_decorators.ts index 577d83dc765ca..39d02e95b6109 100644 --- a/x-pack/plugins/apm/server/routes/fleet/get_package_policy_decorators.ts +++ b/x-pack/plugins/apm/server/routes/fleet/get_package_policy_decorators.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { cloneDeep, get, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep, get } from 'lodash'; import { NewPackagePolicy } from '@kbn/fleet-plugin/common'; import { AgentConfiguration } from '../../../common/agent_configuration/configuration_types'; import { AGENT_NAME } from '../../../common/es_fields/apm'; diff --git a/x-pack/plugins/apm/tsconfig.json b/x-pack/plugins/apm/tsconfig.json index b1bb6362af1a9..4fc45adafd44d 100644 --- a/x-pack/plugins/apm/tsconfig.json +++ b/x-pack/plugins/apm/tsconfig.json @@ -78,6 +78,7 @@ "@kbn/core-elasticsearch-server", "@kbn/shared-ux-prompt-not-found", "@kbn/core-saved-objects-api-server", + "@kbn/safer-lodash-set", "@kbn/shared-ux-router", ], "exclude": [ diff --git a/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/extended_template.tsx b/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/extended_template.tsx index af74acc622789..2e7007e8d2551 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/extended_template.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/extended_template.tsx @@ -25,7 +25,7 @@ import { EuiText, } from '@elastic/eui'; import { ExpressionAstExpression } from '@kbn/expressions-plugin/common'; -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { defaultExpression } from './default_expression'; import { Fields } from './types'; import { getFieldPath, getFieldValue } from './utils'; diff --git a/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/simple_template.tsx b/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/simple_template.tsx index 53d9b3e2d4146..08e27fbcd0988 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/simple_template.tsx +++ b/x-pack/plugins/canvas/canvas_plugin_src/uis/arguments/partition_labels/simple_template.tsx @@ -9,7 +9,7 @@ import React, { FunctionComponent, useCallback, useEffect } from 'react'; import PropTypes from 'prop-types'; import { EuiSwitch, EuiSwitchEvent } from '@elastic/eui'; import { ExpressionAstExpression } from '@kbn/expressions-plugin/common'; -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { defaultExpression } from './default_expression'; import { getFieldPath, getFieldValue } from './utils'; diff --git a/x-pack/plugins/cases/public/api/utils.ts b/x-pack/plugins/cases/public/api/utils.ts index 87b48a0df9c58..f7ce3bf0817d2 100644 --- a/x-pack/plugins/cases/public/api/utils.ts +++ b/x-pack/plugins/cases/public/api/utils.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { isArray, set, camelCase, isObject, omit, get } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { isArray, camelCase, isObject, omit, get } from 'lodash'; import { isCommentRequestTypeExternalReference, isCommentRequestTypePersistableState, diff --git a/x-pack/plugins/cases/public/common/mock/connectors.ts b/x-pack/plugins/cases/public/common/mock/connectors.ts index a036b5a6b8981..4d733c4e660a8 100644 --- a/x-pack/plugins/cases/public/common/mock/connectors.ts +++ b/x-pack/plugins/cases/public/common/mock/connectors.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import type { ActionConnector, ActionTypeConnector } from '../../../common/api'; import { basicPush } from '../../containers/mock'; import type { CaseConnectors } from '../../containers/types'; diff --git a/x-pack/plugins/cases/public/containers/api.test.tsx b/x-pack/plugins/cases/public/containers/api.test.tsx index 2f0c8645b3317..546fcb921b270 100644 --- a/x-pack/plugins/cases/public/containers/api.test.tsx +++ b/x-pack/plugins/cases/public/containers/api.test.tsx @@ -62,7 +62,8 @@ import { import { DEFAULT_FILTER_OPTIONS, DEFAULT_QUERY_PARAMS } from './use_get_cases'; import { getCasesStatus } from '../api'; import { getCaseConnectorsMockResponse } from '../common/mock/connectors'; -import { cloneDeep, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep } from 'lodash'; const abortCtrl = new AbortController(); const mockKibanaServices = KibanaServices.get as jest.Mock; diff --git a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts index 70cf329675126..a9c329d4e85b9 100644 --- a/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts +++ b/x-pack/plugins/cases/server/saved_object_types/migrations/user_actions/alerts.test.ts @@ -10,7 +10,8 @@ import type { SavedObjectMigrationContext, SavedObjectsMigrationLogger, } from '@kbn/core/server'; -import { cloneDeep, omit, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep, omit } from 'lodash'; import { migrationMocks } from '@kbn/core/server/mocks'; import { removeRuleInformation } from './alerts'; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_details_flyout/crawl_details_preview.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_details_flyout/crawl_details_preview.test.tsx index b941b8d497850..07871fe7dd7ec 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_details_flyout/crawl_details_preview.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/components/crawl_details_flyout/crawl_details_preview.test.tsx @@ -9,7 +9,8 @@ import { setMockValues } from '../../../../../__mocks__/kea_logic'; import React from 'react'; import { shallow, ShallowWrapper } from 'enzyme'; -import { set } from 'lodash/fp'; + +import { set } from '@kbn/safer-lodash-set/fp'; import { AccordionList } from '../../../../../shared/accordion_list/accordion_list'; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/suggested_documents_callout.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/suggested_documents_callout.test.tsx index 4fdce0bcd0299..ef1077e4dc9a3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/suggested_documents_callout.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/suggested_documents_callout.test.tsx @@ -11,7 +11,8 @@ import { setMockValues } from '../../../../__mocks__/kea_logic'; import React from 'react'; import { shallow } from 'enzyme'; -import { set } from 'lodash/fp'; + +import { set } from '@kbn/safer-lodash-set/fp'; import { SuggestionsCallout } from '../components/suggestions_callout'; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations.test.tsx index 3de39f21e1de0..8bc5e33263da0 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations.test.tsx @@ -14,9 +14,8 @@ import React from 'react'; import { shallow } from 'enzyme'; -import { set } from 'lodash/fp'; - import { EuiTab } from '@elastic/eui'; +import { set } from '@kbn/safer-lodash-set/fp'; import { getPageHeaderTabs, getPageTitle } from '../../../../test_helpers'; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_overview.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_overview.test.tsx index b7da6d64b6a8a..ba8ec782a4afd 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_overview.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_overview.test.tsx @@ -12,7 +12,8 @@ import '../../../__mocks__/engine_logic.mock'; import React from 'react'; import { shallow } from 'enzyme'; -import { set } from 'lodash/fp'; + +import { set } from '@kbn/safer-lodash-set/fp'; import { CurationsTable, EmptyState } from '../components'; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_overview/components/suggested_curations_callout.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_overview/components/suggested_curations_callout.test.tsx index 2fb9bb255110d..f539adda4ccf3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_overview/components/suggested_curations_callout.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine_overview/components/suggested_curations_callout.test.tsx @@ -11,7 +11,8 @@ import { setMockValues } from '../../../../__mocks__/kea_logic'; import React from 'react'; import { shallow } from 'enzyme'; -import { set } from 'lodash/fp'; + +import { set } from '@kbn/safer-lodash-set/fp'; import { SuggestionsCallout } from '../../curations/components/suggestions_callout'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawl_details_flyout/crawl_details_preview.test.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawl_details_flyout/crawl_details_preview.test.tsx index 590989db59d02..58a593ebdd037 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawl_details_flyout/crawl_details_preview.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawl_details_flyout/crawl_details_preview.test.tsx @@ -9,7 +9,8 @@ import { setMockValues } from '../../../../../__mocks__/kea_logic'; import React from 'react'; import { shallow, ShallowWrapper } from 'enzyme'; -import { set } from 'lodash/fp'; + +import { set } from '@kbn/safer-lodash-set/fp'; import { AccordionList } from '../../../../../shared/accordion_list/accordion_list'; diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json index 8b9eef8ce1864..3d027fd53e0f7 100644 --- a/x-pack/plugins/enterprise_search/tsconfig.json +++ b/x-pack/plugins/enterprise_search/tsconfig.json @@ -47,6 +47,7 @@ "@kbn/cypress-config", "@kbn/discover-plugin", "@kbn/guided-onboarding", + "@kbn/safer-lodash-set", "@kbn/shared-ux-router", "@kbn/core-http-browser", ] diff --git a/x-pack/plugins/lens/public/utils.ts b/x-pack/plugins/lens/public/utils.ts index 5a50e9068d67b..4592bf5bfddcd 100644 --- a/x-pack/plugins/lens/public/utils.ts +++ b/x-pack/plugins/lens/public/utils.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { set, uniq, cloneDeep } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { uniq, cloneDeep } from 'lodash'; import { i18n } from '@kbn/i18n'; import moment from 'moment-timezone'; import type { Serializable } from '@kbn/utility-types'; diff --git a/x-pack/plugins/lens/tsconfig.json b/x-pack/plugins/lens/tsconfig.json index 3732371c9fd21..b80f702125d3c 100644 --- a/x-pack/plugins/lens/tsconfig.json +++ b/x-pack/plugins/lens/tsconfig.json @@ -63,6 +63,7 @@ "@kbn/core-saved-objects-common", "@kbn/core-ui-settings-browser", "@kbn/core-saved-objects-server", + "@kbn/safer-lodash-set", "@kbn/shared-ux-router", ], "exclude": [ diff --git a/x-pack/plugins/monitoring/server/lib/logstash/get_node_info.test.ts b/x-pack/plugins/monitoring/server/lib/logstash/get_node_info.test.ts index 50410f4ef0ea5..356dbfaa29d41 100644 --- a/x-pack/plugins/monitoring/server/lib/logstash/get_node_info.test.ts +++ b/x-pack/plugins/monitoring/server/lib/logstash/get_node_info.test.ts @@ -6,7 +6,8 @@ */ import moment from 'moment'; -import { set, unset } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { unset } from 'lodash'; import { STANDALONE_CLUSTER_CLUSTER_UUID } from '../../../common/constants'; import { handleResponse, getNodeInfo } from './get_node_info'; import { LegacyRequest } from '../../types'; diff --git a/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx b/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx index cf736d4fe2f57..34090e8e966d2 100644 --- a/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx +++ b/x-pack/plugins/osquery/public/fleet_integration/osquery_managed_policy_create_import_extension.tsx @@ -5,7 +5,8 @@ * 2.0. */ -import { pickBy, get, isEmpty, isString, unset, set, intersection } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { pickBy, get, isEmpty, isString, unset, intersection } from 'lodash'; import satisfies from 'semver/functions/satisfies'; import { EuiFlexGroup, diff --git a/x-pack/plugins/osquery/server/lib/update_global_packs.ts b/x-pack/plugins/osquery/server/lib/update_global_packs.ts index 523e79443fbdb..1f806c06f7977 100644 --- a/x-pack/plugins/osquery/server/lib/update_global_packs.ts +++ b/x-pack/plugins/osquery/server/lib/update_global_packs.ts @@ -6,7 +6,8 @@ */ import type { SavedObjectsClient, SavedObjectsFindResponse } from '@kbn/core/server'; -import { has, map, mapKeys, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { has, map, mapKeys } from 'lodash'; import type { NewPackagePolicy } from '@kbn/fleet-plugin/common'; import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import produce from 'immer'; diff --git a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts index 37d61b908f150..ff4ffe5b28287 100644 --- a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts @@ -6,7 +6,8 @@ */ import moment from 'moment-timezone'; -import { has, set, unset, find, some, mapKeys } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { has, unset, find, some, mapKeys } from 'lodash'; import { schema } from '@kbn/config-schema'; import { produce } from 'immer'; import type { PackagePolicy } from '@kbn/fleet-plugin/common'; diff --git a/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts index c8d053d8d92da..485ecffce3cd3 100644 --- a/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts @@ -6,19 +6,8 @@ */ import moment from 'moment-timezone'; -import { - set, - unset, - has, - difference, - filter, - find, - map, - mapKeys, - uniq, - some, - isEmpty, -} from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { unset, has, difference, filter, find, map, mapKeys, uniq, some, isEmpty } from 'lodash'; import { schema } from '@kbn/config-schema'; import { produce } from 'immer'; import type { PackagePolicy } from '@kbn/fleet-plugin/common'; diff --git a/x-pack/plugins/osquery/server/routes/status/create_status_route.ts b/x-pack/plugins/osquery/server/routes/status/create_status_route.ts index 700ea77f22445..785b9540e173f 100644 --- a/x-pack/plugins/osquery/server/routes/status/create_status_route.ts +++ b/x-pack/plugins/osquery/server/routes/status/create_status_route.ts @@ -7,7 +7,8 @@ import { produce } from 'immer'; import { satisfies } from 'semver'; -import { filter, reduce, mapKeys, each, set, unset, uniq, map, has } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { filter, reduce, mapKeys, each, unset, uniq, map, has } from 'lodash'; import type { PackagePolicyInputStream } from '@kbn/fleet-plugin/common'; import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/osquery/tsconfig.json b/x-pack/plugins/osquery/tsconfig.json index 678f4900134cf..226519bb10711 100644 --- a/x-pack/plugins/osquery/tsconfig.json +++ b/x-pack/plugins/osquery/tsconfig.json @@ -68,6 +68,7 @@ "@kbn/core-elasticsearch-server", "@kbn/core-saved-objects-api-server", "@kbn/logging", + "@kbn/safer-lodash-set", "@kbn/shared-ux-router", ] } 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 aa0d5c85acedf..288d528c722bf 100644 --- a/x-pack/plugins/reporting/server/lib/content_stream.test.ts +++ b/x-pack/plugins/reporting/server/lib/content_stream.test.ts @@ -6,7 +6,7 @@ */ import type { Logger } from '@kbn/core/server'; -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { ContentStream } from './content_stream'; diff --git a/x-pack/plugins/reporting/server/routes/lib/jobs_query.test.ts b/x-pack/plugins/reporting/server/routes/lib/jobs_query.test.ts index 0f72863ee03dd..202fa55049b3d 100644 --- a/x-pack/plugins/reporting/server/routes/lib/jobs_query.test.ts +++ b/x-pack/plugins/reporting/server/routes/lib/jobs_query.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { ElasticsearchClient } from '@kbn/core/server'; import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; import { statuses } from '../../lib'; diff --git a/x-pack/plugins/reporting/tsconfig.json b/x-pack/plugins/reporting/tsconfig.json index 48b2f20a3c1e0..254c115322fd0 100644 --- a/x-pack/plugins/reporting/tsconfig.json +++ b/x-pack/plugins/reporting/tsconfig.json @@ -36,6 +36,7 @@ "@kbn/core-http-server", "@kbn/core-test-helpers-test-utils", "@kbn/expressions-plugin", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/screenshotting/server/config/create_config.ts b/x-pack/plugins/screenshotting/server/config/create_config.ts index 1b7076d05e478..c2ab86b5de76e 100644 --- a/x-pack/plugins/screenshotting/server/config/create_config.ts +++ b/x-pack/plugins/screenshotting/server/config/create_config.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { cloneDeep, set, upperFirst } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep, upperFirst } from 'lodash'; import type { Logger } from '@kbn/core/server'; import { getDefaultChromiumSandboxDisabled } from './default_chromium_sandbox_disabled'; import { ConfigType } from './schema'; diff --git a/x-pack/plugins/screenshotting/tsconfig.json b/x-pack/plugins/screenshotting/tsconfig.json index 71bbdc7de7396..b2e1fd6ed184f 100644 --- a/x-pack/plugins/screenshotting/tsconfig.json +++ b/x-pack/plugins/screenshotting/tsconfig.json @@ -21,6 +21,7 @@ "@kbn/std", "@kbn/i18n", "@kbn/utils", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/security/public/components/use_form.ts b/x-pack/plugins/security/public/components/use_form.ts index 2b42fda5ba561..b943cfd507249 100644 --- a/x-pack/plugins/security/public/components/use_form.ts +++ b/x-pack/plugins/security/public/components/use_form.ts @@ -5,11 +5,13 @@ * 2.0. */ -import { cloneDeep, cloneDeepWith, get, set } from 'lodash'; +import { cloneDeep, cloneDeepWith, get } from 'lodash'; import type { ChangeEventHandler, FocusEventHandler, ReactEventHandler } from 'react'; import { useState } from 'react'; import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { set } from '@kbn/safer-lodash-set'; + export type FormReturnTuple = [FormState, FormProps]; export interface FormProps { diff --git a/x-pack/plugins/security/tsconfig.json b/x-pack/plugins/security/tsconfig.json index 6106c3e34792b..7278e39b18249 100644 --- a/x-pack/plugins/security/tsconfig.json +++ b/x-pack/plugins/security/tsconfig.json @@ -56,6 +56,7 @@ "@kbn/core-custom-branding-common", "@kbn/core-custom-branding-server-mocks", "@kbn/ecs", + "@kbn/safer-lodash-set", "@kbn/shared-ux-router", ], "exclude": [ diff --git a/x-pack/plugins/security_solution/public/common/components/data_table/column_headers/helpers.test.tsx b/x-pack/plugins/security_solution/public/common/components/data_table/column_headers/helpers.test.tsx index 9320a0270f5aa..34f3320513b47 100644 --- a/x-pack/plugins/security_solution/public/common/components/data_table/column_headers/helpers.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/data_table/column_headers/helpers.test.tsx @@ -5,7 +5,8 @@ * 2.0. */ import { mount } from 'enzyme'; -import { omit, set } from 'lodash/fp'; +import { set } from '@kbn/safer-lodash-set/fp'; +import { omit } from 'lodash/fp'; import React from 'react'; import type { BUILT_IN_SCHEMA } from './helpers'; diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.test.tsx index dab1bf3b68285..5ad96cfc322d6 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.test.tsx @@ -7,7 +7,7 @@ import sinon from 'sinon'; import moment from 'moment'; -import set from 'lodash/set'; +import set from '@kbn/safer-lodash-set/set'; import cloneDeep from 'lodash/cloneDeep'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; diff --git a/x-pack/plugins/security_solution/public/explore/network/store/reducer.ts b/x-pack/plugins/security_solution/public/explore/network/store/reducer.ts index b55774ef90197..263f0b990280d 100644 --- a/x-pack/plugins/security_solution/public/explore/network/store/reducer.ts +++ b/x-pack/plugins/security_solution/public/explore/network/store/reducer.ts @@ -6,7 +6,8 @@ */ import { reducerWithInitialState } from 'typescript-fsa-reducers'; -import { get, set } from 'lodash/fp'; +import { set } from '@kbn/safer-lodash-set/fp'; +import { get } from 'lodash/fp'; import { Direction, FlowTarget, diff --git a/x-pack/plugins/security_solution/public/explore/users/store/reducer.ts b/x-pack/plugins/security_solution/public/explore/users/store/reducer.ts index 5bb7615ff198a..9ac2fdce4c20d 100644 --- a/x-pack/plugins/security_solution/public/explore/users/store/reducer.ts +++ b/x-pack/plugins/security_solution/public/explore/users/store/reducer.ts @@ -6,7 +6,7 @@ */ import { reducerWithInitialState } from 'typescript-fsa-reducers'; -import { set } from 'lodash/fp'; +import { set } from '@kbn/safer-lodash-set/fp'; import { DEFAULT_TABLE_ACTIVE_PAGE, DEFAULT_TABLE_LIMIT } from '../../../common/store/constants'; import { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/action_responder.ts b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/action_responder.ts index 93816e06bb7fb..c451198a27208 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/action_responder.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/agent_emulator/services/action_responder.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import type { Client } from '@elastic/elasticsearch'; import type { ToolingLog } from '@kbn/tooling-log'; import type { KbnClient } from '@kbn/test'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/host_risk.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/host_risk.ts index c621c83f49ecd..fb061d06ce1e2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/host_risk.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/host_risk.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { set, cloneDeep } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep } from 'lodash'; import { getHostRiskIndex } from '../../../../../../common/search_strategy/security_solution/risk_score/common'; import { RiskScoreFields } from '../../../../../../common/search_strategy/security_solution/risk_score/all'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/user_risk.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/user_risk.ts index d6499e9977d54..db959a7671546 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/user_risk.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/enrichment_by_type/user_risk.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { set, cloneDeep } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep } from 'lodash'; import { getUserRiskIndex } from '../../../../../../common/search_strategy/security_solution/risk_score/common'; import { RiskScoreFields } from '../../../../../../common/search_strategy/security_solution/risk_score/all'; import { createSingleFieldMatchEnrichment } from '../create_single_field_match_enrichment'; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/utils/transforms.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/utils/transforms.test.ts index 088916ef45598..0e6de54014c3c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/utils/transforms.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/enrichments/utils/transforms.test.ts @@ -9,7 +9,7 @@ import { applyEnrichmentsToEvents, mergeEnrichments } from './transforms'; import { ruleExecutionLogMock } from '../../../rule_monitoring/mocks'; import { createAlert } from '../__mocks__/alerts'; import type { EnrichmentFunction } from '../types'; -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; const createEnrichment = (field: string, value: string): EnrichmentFunction => diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts index 29a4158a77d00..4e3db8c657e04 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/helpers.test.ts @@ -28,7 +28,8 @@ import { } from './helpers'; import type { ESClusterInfo, ESLicense, ExceptionListItem } from './types'; import type { PolicyConfig, PolicyData } from '../../../common/endpoint/types'; -import { cloneDeep, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep } from 'lodash'; import { loggingSystemMock } from '@kbn/core/server/mocks'; describe('test diagnostic telemetry scheduled task timing helper', () => { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/opsgenie/render_template_variables.ts b/x-pack/plugins/stack_connectors/server/connector_types/opsgenie/render_template_variables.ts index eb84d6c2b0d8f..14670fe162ca6 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/opsgenie/render_template_variables.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/opsgenie/render_template_variables.ts @@ -8,7 +8,8 @@ import { renderMustacheObject } from '@kbn/actions-plugin/server/lib/mustache_renderer'; import { ExecutorParams } from '@kbn/actions-plugin/server/sub_action_framework/types'; import { RenderParameterTemplates } from '@kbn/actions-plugin/server/types'; -import { set, cloneDeep, get, isString } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { cloneDeep, get, isString } from 'lodash'; import { RULE_TAGS_TEMPLATE } from '../../../common/opsgenie'; import { OpsgenieSubActions } from '../../../common'; import { CreateAlertSubActionParams } from './types'; diff --git a/x-pack/plugins/stack_connectors/server/connector_types/tines/render.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/tines/render.test.ts index 6abed325bbc45..0c89017088af9 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/tines/render.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/tines/render.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash/fp'; +import { set } from '@kbn/safer-lodash-set/fp'; import { renderParameterTemplates } from './render'; const params = { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/tines/render.ts b/x-pack/plugins/stack_connectors/server/connector_types/tines/render.ts index 2ba3f120e316d..ca3fdf7de5b6c 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/tines/render.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/tines/render.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash/fp'; +import { set } from '@kbn/safer-lodash-set/fp'; import { ExecutorParams } from '@kbn/actions-plugin/server/sub_action_framework/types'; import { RenderParameterTemplates } from '@kbn/actions-plugin/server/types'; import { SUB_ACTION } from '../../../common/tines/constants'; diff --git a/x-pack/plugins/stack_connectors/tsconfig.json b/x-pack/plugins/stack_connectors/tsconfig.json index cb7b2687aea88..f95d55265cebf 100644 --- a/x-pack/plugins/stack_connectors/tsconfig.json +++ b/x-pack/plugins/stack_connectors/tsconfig.json @@ -26,6 +26,7 @@ "@kbn/kibana-react-plugin", "@kbn/test-jest-helpers", "@kbn/securitysolution-io-ts-utils", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_monitor_duration.test.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_monitor_duration.test.ts index 06d5fae6f5663..16dd761180ae0 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_monitor_duration.test.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_monitor_duration.test.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import mockChartsData from './__fixtures__/monitor_charts_mock.json'; import { getMonitorDurationChart } from './get_monitor_duration'; import { getUptimeESMockClient } from './test_helpers'; diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_pings.test.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_pings.test.ts index faf66d4aa8bd8..b035ae778576b 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_pings.test.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/get_pings.test.ts @@ -6,7 +6,7 @@ */ import { getPings } from './get_pings'; -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { DYNAMIC_SETTINGS_DEFAULTS } from '../../../../common/constants'; import { getUptimeESMockClient } from './test_helpers'; diff --git a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/search/find_potential_matches.ts b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/search/find_potential_matches.ts index d73b9863bec6a..2649205d3b473 100644 --- a/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/search/find_potential_matches.ts +++ b/x-pack/plugins/synthetics/server/legacy_uptime/lib/requests/search/find_potential_matches.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; import { getQueryStringFilter } from './get_query_string_filter'; import { QueryContext } from './query_context'; import { diff --git a/x-pack/plugins/synthetics/tsconfig.json b/x-pack/plugins/synthetics/tsconfig.json index 93f1026bf13e5..730a1f381d142 100644 --- a/x-pack/plugins/synthetics/tsconfig.json +++ b/x-pack/plugins/synthetics/tsconfig.json @@ -72,6 +72,7 @@ "@kbn/core-saved-objects-api-server-mocks", "@kbn/core-saved-objects-server", "@kbn/shared-ux-prompt-not-found", + "@kbn/safer-lodash-set", "@kbn/shared-ux-router", ], "exclude": [ diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/value_validators.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/value_validators.ts index e4e27291f972a..e7b799519e1d0 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/value_validators.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/value_validators.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { constant, get, set } from 'lodash'; +import { set } from '@kbn/safer-lodash-set'; +import { constant, get } from 'lodash'; import { UserConfiguredActionConnector, IErrorObject, Rule } from '../../types'; export function throwIfAbsent(message: string) { diff --git a/x-pack/plugins/triggers_actions_ui/tsconfig.json b/x-pack/plugins/triggers_actions_ui/tsconfig.json index 2468cb5b30fd2..96a7c05c91a01 100644 --- a/x-pack/plugins/triggers_actions_ui/tsconfig.json +++ b/x-pack/plugins/triggers_actions_ui/tsconfig.json @@ -46,6 +46,7 @@ "@kbn/core-capabilities-common", "@kbn/shared-ux-router", "@kbn/alerts-ui-shared", + "@kbn/safer-lodash-set", ], "exclude": [ "target/**/*", From 99650fb3ccbd3e468cfd26d7c0aae530680c0290 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 16 Feb 2023 16:48:48 +0100 Subject: [PATCH 085/210] [Observability] Revert unnecessary changes (#151447) --- .github/CODEOWNERS | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f2d11bf493d94..49205649178b0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -775,9 +775,6 @@ packages/kbn-yarn-lock-validator @elastic/kibana-operations /x-pack/plugins/observability/public/pages/slo_details @elastic/actionable-observability /x-pack/test/observability_functional @elastic/actionable-observability -# keep it below actionable observability -x-pack/plugins/observability @elastic/observability-ui - # Infra Monitoring /x-pack/test/functional/apps/infra @elastic/infra-monitoring-ui /x-pack/test/api_integration/apis/infra @elastic/infra-monitoring-ui From 9a6d279d94e712f57133f99cb82ff5f75a0c3885 Mon Sep 17 00:00:00 2001 From: Kevin Qualters <56408403+kqualters-elastic@users.noreply.github.com> Date: Thu, 16 Feb 2023 11:04:20 -0500 Subject: [PATCH 086/210] [Security Solution] Fix flaky test in security integration suite (#151376) ## Summary Fixes a flaky test in security integration suite: https://github.com/elastic/kibana/issues/150814 --- .../services/resolver.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/x-pack/test/security_solution_endpoint_api_int/services/resolver.ts b/x-pack/test/security_solution_endpoint_api_int/services/resolver.ts index 3c744390dd146..918b4879770d4 100644 --- a/x-pack/test/security_solution_endpoint_api_int/services/resolver.ts +++ b/x-pack/test/security_solution_endpoint_api_int/services/resolver.ts @@ -106,10 +106,15 @@ export function ResolverGeneratorProvider({ getService }: FtrProviderContext) { * need to do raw requests here. Delete a data stream is slightly different than that of a regular index which * is why we're using _data_stream here. */ - await client.transport.request({ - method: 'DELETE', - path: `_data_stream/${index}`, - }); + await client.transport.request( + { + method: 'DELETE', + path: `_data_stream/${index}`, + }, + { + ignore: [404], + } + ); } }, }; From b6d2c5e6836af4f247c9bb70c92b810ed6e380c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Istv=C3=A1n=20Zolt=C3=A1n=20Szab=C3=B3?= Date: Thu, 16 Feb 2023 17:05:01 +0100 Subject: [PATCH 087/210] [DOCS] Adds change point detection docs to AIOps Labs (#151337) Co-authored-by: Tom Veasey --- .../ml/images/ml-change-point-detection.png | Bin 0 -> 634750 bytes docs/user/ml/index.asciidoc | 34 +++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 docs/user/ml/images/ml-change-point-detection.png diff --git a/docs/user/ml/images/ml-change-point-detection.png b/docs/user/ml/images/ml-change-point-detection.png new file mode 100644 index 0000000000000000000000000000000000000000..b964f7aa3b214acaad0ac3f899f83abec797e7c0 GIT binary patch literal 634750 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 z%0D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⪼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�JaT_XT6oM};?qB%;fhYAHs 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ᲤhQ%qc1I8gfYv>L6TuR}$nt%AU| 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

C7yVLjF-ytyvwG2hUXY%9I+ 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

PZ5P^sLnfHuqUh|sdB=Uet3R*@X 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%0DTi`u-R3_|2JQDBp-kq^4nFg4?}c}oR4 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 **AIOps Labs** where +you can select the {data-source} or saved search that you want to analyze. + +[role="screenshot"] +image::user/ml/images/ml-change-point-detection.png[Change point detection UI] + +Select a function and a metric field, then pick a date range to start detecting +change points in the defined range. Optionally, you can split the data by a +field. If the cardinality of the split field is greater than 10,000, then only +the first 10,000, sorted by document count, are analyzed. + +If a change point is detected, a chart visualizes where the change point was identified in +the time window analyzed, making the interpretation easier. If you split the analysis by a +field, a separate chart is displayed for every partition with a detected change +point. You can view the type of change point in the chart as well as its value +and the time when the change happened. The corresponding `p-value` indicates how +extreme the change is; lower values mark more significant changes. You can use +the change point type selector to filter the results by specific types of change +points. \ No newline at end of file From ff061ff984d77fe1614e89288f3e11207659809a Mon Sep 17 00:00:00 2001 From: Boris Kirov Date: Thu, 16 Feb 2023 17:08:42 +0100 Subject: [PATCH 088/210] Update tooltip diff flamegraph (#151437) ## Summary Updated the copy in the tooltip based on our discussion in this ticket: https://github.com/elastic/prodfiler/issues/3001 --- .../flame_graphs_view/normalization_menu.tsx | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx b/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx index 72bc72aa64e78..17d4bfefea294 100644 --- a/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx +++ b/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx @@ -148,13 +148,32 @@ export function NormalizationMenu(props: Props) { + + + {i18n.translate( + 'xpack.profiling.flameGraphNormalizationMenu.normalizeByTimeTooltip', + { + defaultMessage: + 'To compare a set of machines over time periods of different lengths (for example: Compare the last hour against the last 24h), choose Normalize by Time. The number of samples on the shorter timeframe will be multiplied to match the longer timeframe (in this example, by 24).', + } + )} + + + + + {i18n.translate( + 'xpack.profiling.flameGraphNormalizationMenu.normalizeByScaleTooltip', + { + defaultMessage: + 'To compare differently-sized sets of machines (e.g. a deployment on 10% of machines against a deployment on 90% of machines), choose Scale Factor and provide an appropriate factor to multiply the right-hand side with.', + } + )} + + + + } position="right" /> From 42bea3f74b65072e77c5c9bccf33bb05b0b9f061 Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Thu, 16 Feb 2023 17:09:14 +0100 Subject: [PATCH 089/210] [ML] Fix ML capabilities check (#151452) --- x-pack/plugins/ml/public/application/app.tsx | 2 + .../capabilities/check_capabilities.ts | 56 ++++++++++++++++++- .../components/ml_page/side_nav.tsx | 4 +- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/ml/public/application/app.tsx b/x-pack/plugins/ml/public/application/app.tsx index ffd3fa9e8d654..b5dafed765ff4 100644 --- a/x-pack/plugins/ml/public/application/app.tsx +++ b/x-pack/plugins/ml/public/application/app.tsx @@ -20,6 +20,7 @@ import { toMountPoint, wrapWithTheme } from '@kbn/kibana-react-plugin/public'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import { StorageContextProvider } from '@kbn/ml-local-storage'; +import { mlCapabilities } from './capabilities/check_capabilities'; import { ML_STORAGE_KEYS } from '../../common/types/storage'; import { ML_APP_LOCATOR, ML_PAGES } from '../../common/constants/locator'; import type { MlSetupDependencies, MlStartDependencies } from '../plugin'; @@ -61,6 +62,7 @@ export function getMlGlobalServices(httpStart: HttpStart, usageCollection?: Usag mlApiServices: mlApiServicesProvider(httpService), mlUsageCollection: mlUsageCollectionProvider(usageCollection), isServerless, + mlCapabilities, }; } diff --git a/x-pack/plugins/ml/public/application/capabilities/check_capabilities.ts b/x-pack/plugins/ml/public/application/capabilities/check_capabilities.ts index c5a69d5da12a0..3bae8b63261fe 100644 --- a/x-pack/plugins/ml/public/application/capabilities/check_capabilities.ts +++ b/x-pack/plugins/ml/public/application/capabilities/check_capabilities.ts @@ -6,7 +6,11 @@ */ import { i18n } from '@kbn/i18n'; - +import { BehaviorSubject } from 'rxjs'; +import { distinctUntilChanged } from 'rxjs/operators'; +import { isEqual } from 'lodash'; +import useObservable from 'react-use/lib/useObservable'; +import { useMlKibana } from '../contexts/kibana'; import { hasLicenseExpired } from '../license'; import { MlCapabilities, getDefaultCapabilities } from '../../../common/types/capabilities'; @@ -15,11 +19,52 @@ import type { MlApiServices } from '../services/ml_api_service'; let _capabilities: MlCapabilities = getDefaultCapabilities(); +export class MlCapabilitiesService { + private _capabilities$ = new BehaviorSubject(getDefaultCapabilities()); + + public capabilities$ = this._capabilities$.pipe(distinctUntilChanged(isEqual)); + + public getCapabilities(): MlCapabilities { + return this._capabilities$.getValue(); + } + + public updateCapabilities(update: MlCapabilities) { + this._capabilities$.next(update); + } +} + +/** + * TODO should be initialized in getMlGlobalServices + * Temp solution to make it work with the current setup. + */ +export const mlCapabilities = new MlCapabilitiesService(); + +/** + * Check the privilege type and the license to see whether a user has permission to access a feature. + * + * @param capability + */ +export function usePermissionCheck(capability: keyof MlCapabilities) { + const { + services: { + mlServices: { mlCapabilities: mlCapabilitiesService }, + }, + } = useMlKibana(); + + const licenseHasExpired = hasLicenseExpired(); + const capabilities = useObservable( + mlCapabilitiesService.capabilities$, + mlCapabilitiesService.getCapabilities() + ); + return capabilities[capability] && !licenseHasExpired; +} + export function checkGetManagementMlJobsResolver({ checkMlCapabilities }: MlApiServices) { return new Promise<{ mlFeatureEnabledInSpace: boolean }>((resolve, reject) => { checkMlCapabilities() .then(({ capabilities, isPlatinumOrTrialLicense, mlFeatureEnabledInSpace }) => { _capabilities = capabilities; + mlCapabilities.updateCapabilities(capabilities); // Loop through all capabilities to ensure they are all set to true. const isManageML = Object.values(_capabilities).every((p) => p === true); @@ -42,6 +87,7 @@ export function checkGetJobsCapabilitiesResolver( getCapabilities() .then(async ({ capabilities, isPlatinumOrTrialLicense }) => { _capabilities = capabilities; + mlCapabilities.updateCapabilities(capabilities); // the minimum privilege for using ML with a platinum or trial license is being able to get the transforms list. // all other functionality is controlled by the return capabilities object. // if the license is basic (isPlatinumOrTrialLicense === false) then do not redirect, @@ -68,6 +114,7 @@ export function checkCreateJobsCapabilitiesResolver( getCapabilities() .then(async ({ capabilities, isPlatinumOrTrialLicense }) => { _capabilities = capabilities; + mlCapabilities.updateCapabilities(capabilities); // if the license is basic (isPlatinumOrTrialLicense === false) then do not redirect, // allow the promise to resolve as the separate license check will redirect then user to // a basic feature @@ -94,6 +141,7 @@ export function checkFindFileStructurePrivilegeResolver( getCapabilities() .then(async ({ capabilities }) => { _capabilities = capabilities; + mlCapabilities.updateCapabilities(capabilities); // the minimum privilege for using ML with a basic license is being able to use the datavisualizer. // all other functionality is controlled by the return _capabilities object if (_capabilities.canFindFileStructure) { @@ -110,8 +158,10 @@ export function checkFindFileStructurePrivilegeResolver( }); } -// check the privilege type and the license to see whether a user has permission to access a feature. -// takes the name of the privilege variable as specified in get_privileges.js +/** + * @deprecated use {@link usePermissionCheck} instead. + * @param capability + */ export function checkPermission(capability: keyof MlCapabilities) { const licenseHasExpired = hasLicenseExpired(); return _capabilities[capability] === true && licenseHasExpired !== true; diff --git a/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx b/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx index f3270068740d0..d14e0db3518e1 100644 --- a/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_page/side_nav.tsx @@ -16,7 +16,7 @@ import { useMlLocator, useNavigateToPath } from '../../contexts/kibana'; import { isFullLicense } from '../../license'; import type { MlRoute } from '../../routing'; import { ML_PAGES } from '../../../../common/constants/locator'; -import { checkPermission } from '../../capabilities/check_capabilities'; +import { usePermissionCheck } from '../../capabilities/check_capabilities'; export interface Tab { id: string; @@ -37,7 +37,7 @@ export function useSideNavItems(activeRoute: MlRoute | undefined) { const navigateToPath = useNavigateToPath(); const mlFeaturesDisabled = !isFullLicense(); - const canViewMlNodes = checkPermission('canViewMlNodes'); + const canViewMlNodes = usePermissionCheck('canViewMlNodes'); const [globalState] = useUrlState('_g'); From 1bba627926d944456da2a5189242162eb2a7ec59 Mon Sep 17 00:00:00 2001 From: Dmitriy Burlutskiy Date: Thu, 16 Feb 2023 17:11:01 +0100 Subject: [PATCH 090/210] Render the correct form when edit extraction rules (#151304) Adjust Kea's reducers to render correct HTML forms --- .../extraction_rules/extraction_rules_logic.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules_logic.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules_logic.tsx index f44d83cb7c99d..8c56f4c4d5f19 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules_logic.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/extraction_rules_logic.tsx @@ -250,6 +250,7 @@ export const ExtractionRulesLogic = kea< cancelEditExtractionRule: () => null, editExtractionRule: (_, { extractionRule }) => extractionRule, updateSuccess: () => null, + updateExtractionRuleSuccess: () => null, }, ], extractionRuleToEditIsNew: [ @@ -257,6 +258,8 @@ export const ExtractionRulesLogic = kea< { addSuccess: () => false, editNewExtractionRule: () => true, + editExtractionRule: () => false, + updateExtractionRuleSuccess: () => false, }, ], fieldRuleFlyoutVisible: [ From 2d00d75799b2bb6b248349a0f4b2152fda6ed0e5 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Thu, 16 Feb 2023 17:24:28 +0100 Subject: [PATCH 091/210] [Fleet] Hardcode log levels in agent drodpdown (#151451) Fixes https://github.com/elastic/kibana/issues/151177 ## Summary In the log levels list we were using the `autocomplete` service to get the available logs, but sometimes the list wouldn't appear. In https://github.com/elastic/kibana/pull/151030 I refactored that code to use the latest version of the API, but it's a better solution to just hard code this list since the possible levels are very few. Screenshot 2023-02-16 at 15 35 53 With this change the log levels should always be visible as in the picture. --- .../components/agent_logs/constants.tsx | 2 - .../agent_logs/filter_log_level.test.tsx | 55 -------------- .../agent_logs/filter_log_level.tsx | 73 ++----------------- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 6 files changed, 7 insertions(+), 126 deletions(-) delete mode 100644 x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.test.tsx diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx index 0225cec66a3cd..9f5cf41ecbcde 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/constants.tsx @@ -54,6 +54,4 @@ export const AGENT_LOG_LEVELS = { DEBUG: 'debug', }; -export const ORDERED_FILTER_LOG_LEVELS = ['error', 'warning', 'warn', 'notice', 'info', 'debug']; - export const DEFAULT_LOG_LEVEL = AGENT_LOG_LEVELS.INFO; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.test.tsx deleted file mode 100644 index 721be29a5e2bd..0000000000000 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.test.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React from 'react'; -import { render, act, fireEvent } from '@testing-library/react'; - -import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; - -import { LogLevelFilter } from './filter_log_level'; - -const renderComponent = (props: React.ComponentProps) => { - return render( - - - - ); -}; - -jest.mock('../../../../../hooks', () => ({ - ...jest.requireActual('../../../../../hooks'), - useStartServices: jest.fn().mockReturnValue({ - data: { - dataViews: { - getFieldsForWildcard: jest.fn().mockResolvedValue([]), - create: jest.fn().mockResolvedValue([]), - }, - }, - unifiedSearch: { - autocomplete: { - getValueSuggestions: jest.fn().mockResolvedValue(['error', 'warn', 'info', 'debug']), - }, - }, - }), -})); - -describe('LogLevelFilter', () => { - const { getByRole, getByText } = renderComponent({ - selectedLevels: [], - onToggleLevel: () => {}, - }); - - it('Renders all statuses', () => { - act(() => { - fireEvent.click(getByRole('button')); - }); - - expect(getByText('error')).toBeInTheDocument(); - expect(getByText('warn')).toBeInTheDocument(); - expect(getByText('info')).toBeInTheDocument(); - expect(getByText('debug')).toBeInTheDocument(); - }); -}); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx index 1fca50180b682..6b1f1060beb09 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_details_page/components/agent_logs/filter_log_level.tsx @@ -5,82 +5,24 @@ * 2.0. */ -import React, { memo, useState, useEffect, useCallback } from 'react'; -import { EuiPopover, EuiFilterButton, EuiFilterSelectItem, EuiIcon, EuiSpacer } from '@elastic/eui'; +import React, { memo, useState, useCallback } from 'react'; +import { EuiPopover, EuiFilterButton, EuiFilterSelectItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { DataViewField, FieldSpec } from '@kbn/data-views-plugin/public'; -import { useStartServices } from '../../../../../hooks'; +import { AGENT_LOG_LEVELS } from './constants'; -import { ORDERED_FILTER_LOG_LEVELS, AGENT_LOG_INDEX_PATTERN, LOG_LEVEL_FIELD } from './constants'; - -function sortLogLevels(levels: string[]): string[] { - return [ - ...new Set([ - // order by severity for known level - ...ORDERED_FILTER_LOG_LEVELS.filter((level) => levels.includes(level)), - // Add unknown log level - ...levels.sort(), - ]), - ]; -} +const LEVEL_VALUES = Object.values(AGENT_LOG_LEVELS); export const LogLevelFilter: React.FunctionComponent<{ selectedLevels: string[]; onToggleLevel: (level: string) => void; }> = memo(({ selectedLevels, onToggleLevel }) => { - const { unifiedSearch, data } = useStartServices(); const [isOpen, setIsOpen] = useState(false); - const [isLoading, setIsLoading] = useState(false); - const [levelValues, setLevelValues] = useState([]); const togglePopover = useCallback(() => setIsOpen((prevIsOpen) => !prevIsOpen), []); const closePopover = useCallback(() => setIsOpen(false), []); - useEffect(() => { - const fetchValues = async () => { - setIsLoading(true); - try { - const fields: FieldSpec[] = await data.dataViews.getFieldsForWildcard({ - pattern: AGENT_LOG_INDEX_PATTERN, - }); - const fieldsMap = fields.reduce((acc: Record, curr: FieldSpec) => { - acc[curr.name] = curr; - return acc; - }, {}); - const newDataView = await data.dataViews.create({ - title: AGENT_LOG_INDEX_PATTERN, - fields: fieldsMap, - }); - - const values: string[] = await unifiedSearch.autocomplete.getValueSuggestions({ - indexPattern: newDataView, - field: LOG_LEVEL_FIELD as DataViewField, - query: '', - }); - setLevelValues(sortLogLevels(values)); - } catch (e) { - setLevelValues([]); - } - setIsLoading(false); - }; - fetchValues(); - }, [data.dataViews, unifiedSearch.autocomplete]); - - const noLogsFound = ( -

- ); - const filterSelect = levelValues.map((level) => ( + const filterSelect = LEVEL_VALUES.map((level) => ( 0} numActiveFilters={selectedLevels.length} > @@ -112,7 +53,7 @@ export const LogLevelFilter: React.FunctionComponent<{ closePopover={closePopover} panelPaddingSize="none" > - {levelValues.length === 0 ? noLogsFound : filterSelect} + {filterSelect} ); }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 6844a048033de..554eb0c4071b4 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -13620,7 +13620,6 @@ "xpack.fleet.agentLogs.datasetSelectText": "Ensemble de données", "xpack.fleet.agentLogs.downloadLink": "télécharger", "xpack.fleet.agentLogs.logDisabledCallOutTitle": "La collecte de logs est désactivée", - "xpack.fleet.agentLogs.logLevelEmpty": "Aucun log trouvé", "xpack.fleet.agentLogs.logLevelSelectText": "Niveau du log", "xpack.fleet.agentLogs.openInLogsUiLinkText": "Ouvrir dans Logs", "xpack.fleet.agentLogs.searchPlaceholderText": "Rechercher dans les logs…", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index da25100e1e288..360023ce62df0 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -13607,7 +13607,6 @@ "xpack.fleet.agentLogs.datasetSelectText": "データセット", "xpack.fleet.agentLogs.downloadLink": "ダウンロード", "xpack.fleet.agentLogs.logDisabledCallOutTitle": "ログ収集は無効です", - "xpack.fleet.agentLogs.logLevelEmpty": "ログが見つかりません", "xpack.fleet.agentLogs.logLevelSelectText": "ログレベル", "xpack.fleet.agentLogs.openInLogsUiLinkText": "ログで開く", "xpack.fleet.agentLogs.searchPlaceholderText": "ログを検索…", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 6a0cb1c2ad138..a9fba2ef87953 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -13625,7 +13625,6 @@ "xpack.fleet.agentLogs.datasetSelectText": "数据集", "xpack.fleet.agentLogs.downloadLink": "下载", "xpack.fleet.agentLogs.logDisabledCallOutTitle": "日志收集已禁用", - "xpack.fleet.agentLogs.logLevelEmpty": "未找到任何日志", "xpack.fleet.agentLogs.logLevelSelectText": "日志级别", "xpack.fleet.agentLogs.openInLogsUiLinkText": "在日志中打开", "xpack.fleet.agentLogs.searchPlaceholderText": "搜索日志……", From 13702aa89990fe7c79b3965f5b2fc5ed31b3cfc3 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Thu, 16 Feb 2023 10:28:15 -0600 Subject: [PATCH 092/210] [Fleet] remove private_key from encrypted attributes (#151458) --- x-pack/plugins/fleet/server/saved_objects/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index 16480b0031628..2b1732142686b 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -410,6 +410,6 @@ export function registerEncryptedSavedObjects( // Encrypted saved objects encryptedSavedObjects.registerType({ type: MESSAGE_SIGNING_KEYS_SAVED_OBJECT_TYPE, - attributesToEncrypt: new Set(['private_key', 'passphrase']), + attributesToEncrypt: new Set(['passphrase']), }); } From e0379a75f270c0a63e094aff670d1c37c772ef98 Mon Sep 17 00:00:00 2001 From: Lola Date: Thu, 16 Feb 2023 11:34:37 -0500 Subject: [PATCH 093/210] [Cloud Posture] Add filter action buttons to cis section column (#151345) ## Summary Quick wins [Issue](https://github.com/elastic/security-team/issues/6026) This PR adds filter actions buttons to cis section columns https://user-images.githubusercontent.com/17135495/219100581-10f7a722-b760-4112-82e1-63fd1858dde2.mov --- .../pages/findings/latest_findings/latest_findings_table.tsx | 2 +- .../resource_findings/resource_findings_table.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.tsx index 96ee0f5319d67..4cd13b2893fd4 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.tsx @@ -70,7 +70,7 @@ const FindingsTableComponent = ({ createColumnWithFilters(baseFindingsColumns['resource.sub_type'], { onAddFilter }), baseFindingsColumns['rule.benchmark.rule_number'], createColumnWithFilters(baseFindingsColumns['rule.name'], { onAddFilter }), - baseFindingsColumns['rule.section'], + createColumnWithFilters(baseFindingsColumns['rule.section'], { onAddFilter }), baseFindingsColumns['@timestamp'], ], [onAddFilter] diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_table.tsx index 50a9c19c6b6ab..f6434f6137922 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings_by_resource/resource_findings/resource_findings_table.tsx @@ -61,7 +61,7 @@ const ResourceFindingsTableComponent = ({ createColumnWithFilters(baseFindingsColumns['result.evaluation'], { onAddFilter }), baseFindingsColumns['rule.benchmark.rule_number'], createColumnWithFilters(baseFindingsColumns['rule.name'], { onAddFilter }), - baseFindingsColumns['rule.section'], + createColumnWithFilters(baseFindingsColumns['rule.section'], { onAddFilter }), baseFindingsColumns['@timestamp'], ], [onAddFilter] From 644b1157bf36eebc3f82a1abefbf31d6c1112441 Mon Sep 17 00:00:00 2001 From: Lola Date: Thu, 16 Feb 2023 11:35:04 -0500 Subject: [PATCH 094/210] [Cloud Posture] add tooltips to filter action buttons (#151352) ## Summary Quick wins [Issue](https://github.com/elastic/security-team/issues/6026) The filter Actions button now has tooltips to inform users of what the icon button's functional purpose is. Screen Shot 2023-02-15 at 12 31 10 PM Screen Shot 2023-02-15 at 12 31 03 PM --- .../pages/findings/layout/findings_layout.tsx | 50 +++++++++++++------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx index 4887c4f28e790..5a37f67333f60 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx @@ -247,24 +247,44 @@ const FilterableCell: React.FC<{ display: flex; `} > - - + > + + + + + +

); From 833456e1b8c148919058ecfb281d16adf036ac0d Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Fri, 17 Feb 2023 03:12:15 +1030 Subject: [PATCH 095/210] [main] Sync bundled packages with Package Storage (#151449) Automated by https://internal-ci.elastic.co/job/package_storage/job/sync-bundled-packages-job/job/main/1854/ Co-authored-by: apmmachine --- fleet_packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fleet_packages.json b/fleet_packages.json index 0f148d6899bbc..b16243028289f 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -41,6 +41,6 @@ }, { "name": "security_detection_engine", - "version": "8.4.2" + "version": "8.7.1" } ] \ No newline at end of file From aff771c28704a37b3607c60b9e945e779de12808 Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 16 Feb 2023 12:52:57 -0500 Subject: [PATCH 096/210] feat(slo): introduce slo feature (#150554) --- .../src/alerts_as_data_rbac.ts | 1 + x-pack/plugins/observability/common/index.ts | 2 + .../public/config/alert_feature_ids.ts | 1 + .../public/hooks/slo/use_capabilities.ts | 19 ++++++ .../pages/slos/components/slo_list_item.tsx | 5 ++ .../public/pages/slos/index.test.tsx | 4 ++ .../observability/public/pages/slos/index.tsx | 4 +- x-pack/plugins/observability/public/plugin.ts | 3 +- .../public/update_global_navigation.test.tsx | 38 +++++++++++- .../public/update_global_navigation.tsx | 22 +++++-- .../observability/server/common/constants.ts | 3 +- .../lib/rules/slo_burn_rate/register.ts | 2 +- x-pack/plugins/observability/server/plugin.ts | 61 +++++++++++++++++-- .../observability/server/routes/slo/route.ts | 16 ++--- 14 files changed, 155 insertions(+), 26 deletions(-) create mode 100644 x-pack/plugins/observability/public/hooks/slo/use_capabilities.ts diff --git a/packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts b/packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts index c0ab8322eb363..06fe06c63b4b9 100644 --- a/packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts +++ b/packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts @@ -20,6 +20,7 @@ export const AlertConsumers = { LOGS: 'logs', INFRASTRUCTURE: 'infrastructure', OBSERVABILITY: 'observability', + SLO: 'slo', SIEM: 'siem', UPTIME: 'uptime', } as const; diff --git a/x-pack/plugins/observability/common/index.ts b/x-pack/plugins/observability/common/index.ts index c82d4fbe6faed..60bb04b3c733d 100644 --- a/x-pack/plugins/observability/common/index.ts +++ b/x-pack/plugins/observability/common/index.ts @@ -38,6 +38,8 @@ export { getProbabilityFromProgressiveLoadingQuality, } from './progressive_loading'; +export const sloFeatureId = 'slo'; + export const casesFeatureId = 'observabilityCases'; // The ID of the observability app. Should more appropriately be called diff --git a/x-pack/plugins/observability/public/config/alert_feature_ids.ts b/x-pack/plugins/observability/public/config/alert_feature_ids.ts index f0900c8aa408e..4e9c1ee26d07c 100644 --- a/x-pack/plugins/observability/public/config/alert_feature_ids.ts +++ b/x-pack/plugins/observability/public/config/alert_feature_ids.ts @@ -13,4 +13,5 @@ export const observabilityAlertFeatureIds: ValidFeatureId[] = [ AlertConsumers.INFRASTRUCTURE, AlertConsumers.LOGS, AlertConsumers.UPTIME, + AlertConsumers.SLO, ]; diff --git a/x-pack/plugins/observability/public/hooks/slo/use_capabilities.ts b/x-pack/plugins/observability/public/hooks/slo/use_capabilities.ts new file mode 100644 index 0000000000000..b2bc20d11fcbd --- /dev/null +++ b/x-pack/plugins/observability/public/hooks/slo/use_capabilities.ts @@ -0,0 +1,19 @@ +/* + * Copyright 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 { sloFeatureId } from '../../../common'; +import { useKibana } from '../../utils/kibana_react'; + +export function useCapabilities() { + const { + application: { capabilities }, + } = useKibana().services; + + return { + hasReadCapabilities: !!capabilities[sloFeatureId].read ?? false, + hasWriteCapabilities: !!capabilities[sloFeatureId].write ?? false, + }; +} diff --git a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx index 03d5b5326e3a6..2cfa04e37755d 100644 --- a/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx +++ b/x-pack/plugins/observability/public/pages/slos/components/slo_list_item.tsx @@ -19,6 +19,7 @@ import { import { i18n } from '@kbn/i18n'; import { HistoricalSummaryResponse, SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { useCapabilities } from '../../../hooks/slo/use_capabilities'; import { useKibana } from '../../../utils/kibana_react'; import { useCreateOrUpdateSlo } from '../../../hooks/slo/use_create_slo'; import { SloSummary } from './slo_summary'; @@ -53,6 +54,7 @@ export function SloListItem({ application: { navigateToUrl }, http: { basePath }, } = useKibana().services; + const { hasWriteCapabilities } = useCapabilities(); const { createSlo, loading: isCloning, success: isCloned } = useCreateOrUpdateSlo(); @@ -158,6 +160,7 @@ export function SloListItem({ @@ -167,6 +170,7 @@ export function SloListItem({ , diff --git a/x-pack/plugins/observability/public/pages/slos/index.test.tsx b/x-pack/plugins/observability/public/pages/slos/index.test.tsx index 0f98521f409ea..9ff4567d40b67 100644 --- a/x-pack/plugins/observability/public/pages/slos/index.test.tsx +++ b/x-pack/plugins/observability/public/pages/slos/index.test.tsx @@ -23,6 +23,7 @@ import { emptySloList, sloList } from '../../data/slo/slo'; import type { ConfigSchema } from '../../plugin'; import type { Subset } from '../../typings'; import { historicalSummaryData } from '../../data/slo/historical_summary_data'; +import { useCapabilities } from '../../hooks/slo/use_capabilities'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -36,6 +37,7 @@ jest.mock('../../hooks/slo/use_fetch_slo_list'); jest.mock('../../hooks/slo/use_create_slo'); jest.mock('../../hooks/slo/use_delete_slo'); jest.mock('../../hooks/slo/use_fetch_historical_summary'); +jest.mock('../../hooks/slo/use_capabilities'); const useKibanaMock = useKibana as jest.Mock; const useLicenseMock = useLicense as jest.Mock; @@ -43,6 +45,7 @@ const useFetchSloListMock = useFetchSloList as jest.Mock; const useCreateOrUpdateSloMock = useCreateOrUpdateSlo as jest.Mock; const useDeleteSloMock = useDeleteSlo as jest.Mock; const useFetchHistoricalSummaryMock = useFetchHistoricalSummary as jest.Mock; +const useCapabilitiesMock = useCapabilities as jest.Mock; const mockCreateSlo = jest.fn(); useCreateOrUpdateSloMock.mockReturnValue({ createSlo: mockCreateSlo }); @@ -84,6 +87,7 @@ describe('SLOs Page', () => { beforeEach(() => { jest.clearAllMocks(); mockKibana(); + useCapabilitiesMock.mockReturnValue({ hasWriteCapabilities: true, hasReadCapabilities: true }); }); describe('when the feature flag is not enabled', () => { diff --git a/x-pack/plugins/observability/public/pages/slos/index.tsx b/x-pack/plugins/observability/public/pages/slos/index.tsx index 3212e27b6655e..273cb403b255b 100644 --- a/x-pack/plugins/observability/public/pages/slos/index.tsx +++ b/x-pack/plugins/observability/public/pages/slos/index.tsx @@ -20,6 +20,7 @@ import PageNotFound from '../404'; import { paths } from '../../config'; import { isSloFeatureEnabled } from './helpers/is_slo_feature_enabled'; import type { ObservabilityAppServices } from '../../application/types'; +import { useCapabilities } from '../../hooks/slo/use_capabilities'; export function SlosPage() { const { @@ -27,7 +28,7 @@ export function SlosPage() { http: { basePath }, } = useKibana().services; const { ObservabilityPageTemplate, config } = usePluginContext(); - + const { hasWriteCapabilities } = useCapabilities(); const { hasAtLeast } = useLicense(); const { @@ -68,6 +69,7 @@ export function SlosPage() { }), rightSideItems: [ link.navLinkStatus === AppNavLinkStatus.visible) - .filter((link) => (link.id === 'slos' ? config.unsafe.slo.enabled : link)) + .filter((link) => (link.id === 'slos' ? config.unsafe.slo.enabled : link)) // might not be useful anymore .map((link) => ({ app: observabilityAppId, label: link.title, diff --git a/x-pack/plugins/observability/public/update_global_navigation.test.tsx b/x-pack/plugins/observability/public/update_global_navigation.test.tsx index 344afcb239ef2..fa83388760957 100644 --- a/x-pack/plugins/observability/public/update_global_navigation.test.tsx +++ b/x-pack/plugins/observability/public/update_global_navigation.test.tsx @@ -7,7 +7,7 @@ import { Subject } from 'rxjs'; import { App, AppDeepLink, ApplicationStart, AppNavLinkStatus, AppUpdater } from '@kbn/core/public'; -import { casesFeatureId } from '../common'; +import { casesFeatureId, sloFeatureId } from '../common'; import { updateGlobalNavigation } from './update_global_navigation'; // Used in updater callback @@ -163,11 +163,45 @@ describe('updateGlobalNavigation', () => { }); }); + it("hides the slo link when the capabilities don't include it", () => { + const capabilities = { + navLinks: { apm: true, logs: false, metrics: false, uptime: false }, + } as unknown as ApplicationStart['capabilities']; + + const sloRoute = { + id: 'slos', + title: 'SLOs', + order: 8002, + path: '/slos', + navLinkStatus: AppNavLinkStatus.hidden, + }; + + const deepLinks = [sloRoute]; + + const callback = jest.fn(); + const updater$ = { + next: (cb: AppUpdater) => callback(cb(app)), + } as unknown as Subject; + + updateGlobalNavigation({ capabilities, deepLinks, updater$ }); + + expect(callback).toHaveBeenCalledWith({ + deepLinks: [ + { + ...sloRoute, + navLinkStatus: AppNavLinkStatus.hidden, + }, + ], + navLinkStatus: AppNavLinkStatus.visible, + }); + }); + describe('when slos are enabled', () => { it('shows the slos deep link', () => { const capabilities = { [casesFeatureId]: { read_cases: true }, - navLinks: { apm: true, logs: false, metrics: false, uptime: false }, + [sloFeatureId]: { read: true }, + navLinks: { apm: false, logs: false, metrics: false, uptime: false }, } as unknown as ApplicationStart['capabilities']; const sloRoute = { diff --git a/x-pack/plugins/observability/public/update_global_navigation.tsx b/x-pack/plugins/observability/public/update_global_navigation.tsx index 5a1bc87bbc753..26e3f191ac569 100644 --- a/x-pack/plugins/observability/public/update_global_navigation.tsx +++ b/x-pack/plugins/observability/public/update_global_navigation.tsx @@ -8,7 +8,7 @@ import { Subject } from 'rxjs'; import { AppNavLinkStatus, AppUpdater, ApplicationStart, AppDeepLink } from '@kbn/core/public'; import { CasesDeepLinkId } from '@kbn/cases-plugin/public'; -import { casesFeatureId } from '../common'; +import { casesFeatureId, sloFeatureId } from '../common'; export function updateGlobalNavigation({ capabilities, @@ -20,7 +20,12 @@ export function updateGlobalNavigation({ updater$: Subject; }) { const { apm, logs, metrics, uptime } = capabilities.navLinks; - const someVisible = Object.values({ apm, logs, metrics, uptime }).some((visible) => visible); + const someVisible = Object.values({ + apm, + logs, + metrics, + uptime, + }).some((visible) => visible); const updatedDeepLinks = deepLinks.map((link) => { switch (link.id) { @@ -37,15 +42,17 @@ export function updateGlobalNavigation({ ...link, navLinkStatus: someVisible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, }; - case 'slos': + case 'rules': return { ...link, navLinkStatus: someVisible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, }; - case 'rules': + case 'slos': return { ...link, - navLinkStatus: someVisible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, + navLinkStatus: !!capabilities[sloFeatureId]?.read + ? AppNavLinkStatus.visible + : AppNavLinkStatus.hidden, }; default: return link; @@ -54,6 +61,9 @@ export function updateGlobalNavigation({ updater$.next(() => ({ deepLinks: updatedDeepLinks, - navLinkStatus: someVisible ? AppNavLinkStatus.visible : AppNavLinkStatus.hidden, + navLinkStatus: + someVisible || !!capabilities[sloFeatureId]?.read + ? AppNavLinkStatus.visible + : AppNavLinkStatus.hidden, })); } diff --git a/x-pack/plugins/observability/server/common/constants.ts b/x-pack/plugins/observability/server/common/constants.ts index 9ee876d1948a4..deaf49e3a42f1 100644 --- a/x-pack/plugins/observability/server/common/constants.ts +++ b/x-pack/plugins/observability/server/common/constants.ts @@ -5,5 +5,4 @@ * 2.0. */ -export const OBSERVABILITY_FEATURE_ID = 'observability'; -export const RULE_REGISTRATION_CONTEXT = 'observability.slo'; +export const SLO_RULE_REGISTRATION_CONTEXT = 'observability.slo'; diff --git a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts index b85f70413e3cb..6a2351435e9aa 100644 --- a/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts +++ b/x-pack/plugins/observability/server/lib/rules/slo_burn_rate/register.ts @@ -37,7 +37,7 @@ export function sloBurnRateRuleType(createLifecycleRuleExecutor: CreateLifecycle }, defaultActionGroupId: FIRED_ACTION.id, actionGroups: [FIRED_ACTION], - producer: 'observability', + producer: 'slo', minimumLicenseRequired: 'basic' as LicenseType, isExportable: true, executor: createLifecycleRuleExecutor(getRuleExecutor()), diff --git a/x-pack/plugins/observability/server/plugin.ts b/x-pack/plugins/observability/server/plugin.ts index 0b8d3083126a4..dda71f7a4a60d 100644 --- a/x-pack/plugins/observability/server/plugin.ts +++ b/x-pack/plugins/observability/server/plugin.ts @@ -37,10 +37,11 @@ import { import { uiSettings } from './ui_settings'; import { registerRoutes } from './routes/register_routes'; import { getGlobalObservabilityServerRouteRepository } from './routes/get_global_observability_server_route_repository'; -import { casesFeatureId, observabilityFeatureId } from '../common'; -import { slo } from './saved_objects'; -import { OBSERVABILITY_FEATURE_ID, RULE_REGISTRATION_CONTEXT } from './common/constants'; +import { casesFeatureId, observabilityFeatureId, sloFeatureId } from '../common'; +import { slo, SO_SLO_TYPE } from './saved_objects'; +import { SLO_RULE_REGISTRATION_CONTEXT } from './common/constants'; import { registerRuleTypes } from './lib/rules/register_rule_types'; +import { SLO_BURN_RATE_RULE_ID } from '../common/constants'; import { registerSloUsageCollector } from './lib/collectors/register'; export type ObservabilityPluginSetup = ReturnType; @@ -161,11 +162,61 @@ export class ObservabilityPlugin implements Plugin { const { ruleDataService } = plugins.ruleRegistry; if (config.unsafe.slo.enabled) { + plugins.features.registerKibanaFeature({ + id: sloFeatureId, + name: i18n.translate('xpack.observability.featureRegistry.linkSloTitle', { + defaultMessage: 'SLOs', + }), + order: 1200, + category: DEFAULT_APP_CATEGORIES.observability, + app: [sloFeatureId, 'kibana'], + catalogue: [sloFeatureId, 'observability'], + alerting: [SLO_BURN_RATE_RULE_ID], + privileges: { + all: { + app: [sloFeatureId, 'kibana'], + catalogue: [sloFeatureId, 'observability'], + api: ['slo_write', 'slo_read', 'rac'], + savedObject: { + all: [SO_SLO_TYPE], + read: [], + }, + alerting: { + rule: { + all: [SLO_BURN_RATE_RULE_ID], + }, + alert: { + all: [SLO_BURN_RATE_RULE_ID], + }, + }, + ui: ['read', 'write'], + }, + read: { + app: [sloFeatureId, 'kibana'], + catalogue: [sloFeatureId, 'observability'], + api: ['slo_read', 'rac'], + savedObject: { + all: [], + read: [SO_SLO_TYPE], + }, + alerting: { + rule: { + read: [SLO_BURN_RATE_RULE_ID], + }, + alert: { + read: [SLO_BURN_RATE_RULE_ID], + }, + }, + ui: ['read'], + }, + }, + }); + core.savedObjects.registerType(slo); const ruleDataClient = ruleDataService.initializeIndex({ - feature: OBSERVABILITY_FEATURE_ID, - registrationContext: RULE_REGISTRATION_CONTEXT, + feature: sloFeatureId, + registrationContext: SLO_RULE_REGISTRATION_CONTEXT, dataset: Dataset.alerts, componentTemplateRefs: [ECS_COMPONENT_TEMPLATE_NAME], componentTemplates: [ diff --git a/x-pack/plugins/observability/server/routes/slo/route.ts b/x-pack/plugins/observability/server/routes/slo/route.ts index dc3a51250f6a7..8e876b8101522 100644 --- a/x-pack/plugins/observability/server/routes/slo/route.ts +++ b/x-pack/plugins/observability/server/routes/slo/route.ts @@ -52,7 +52,7 @@ const isLicenseAtLeastPlatinum = async (context: ObservabilityRequestHandlerCont const createSLORoute = createObservabilityServerRoute({ endpoint: 'POST /api/observability/slos', options: { - tags: [], + tags: ['access:slo_write'], }, params: createSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -77,7 +77,7 @@ const createSLORoute = createObservabilityServerRoute({ const updateSLORoute = createObservabilityServerRoute({ endpoint: 'PUT /api/observability/slos/{id}', options: { - tags: [], + tags: ['access:slo_write'], }, params: updateSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -101,7 +101,7 @@ const updateSLORoute = createObservabilityServerRoute({ const deleteSLORoute = createObservabilityServerRoute({ endpoint: 'DELETE /api/observability/slos/{id}', options: { - tags: [], + tags: ['access:slo_write'], }, params: deleteSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -124,7 +124,7 @@ const deleteSLORoute = createObservabilityServerRoute({ const getSLORoute = createObservabilityServerRoute({ endpoint: 'GET /api/observability/slos/{id}', options: { - tags: [], + tags: ['access:slo_read'], }, params: getSLOParamsSchema, handler: async ({ context, params }) => { @@ -147,7 +147,7 @@ const getSLORoute = createObservabilityServerRoute({ const enableSLORoute = createObservabilityServerRoute({ endpoint: 'POST /api/observability/slos/{id}/enable', options: { - tags: [], + tags: ['access:slo_write'], }, params: manageSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -171,7 +171,7 @@ const enableSLORoute = createObservabilityServerRoute({ const disableSLORoute = createObservabilityServerRoute({ endpoint: 'POST /api/observability/slos/{id}/disable', options: { - tags: [], + tags: ['access:slo_write'], }, params: manageSLOParamsSchema, handler: async ({ context, params, logger }) => { @@ -195,7 +195,7 @@ const disableSLORoute = createObservabilityServerRoute({ const findSLORoute = createObservabilityServerRoute({ endpoint: 'GET /api/observability/slos', options: { - tags: [], + tags: ['access:slo_read'], }, params: findSLOParamsSchema, handler: async ({ context, params }) => { @@ -218,7 +218,7 @@ const findSLORoute = createObservabilityServerRoute({ const fetchHistoricalSummary = createObservabilityServerRoute({ endpoint: 'POST /internal/observability/slos/_historical_summary', options: { - tags: [], + tags: ['access:slo_read'], }, params: fetchHistoricalSummaryParamsSchema, handler: async ({ context, params }) => { From e7ebb0cf40d51106aabdcea7a63381df63c5ca3b Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 16 Feb 2023 19:00:13 +0100 Subject: [PATCH 097/210] [docs] Document new maxSessions config option (#151268) --- docs/settings/security-settings.asciidoc | 6 ++++++ docs/user/security/session-management.asciidoc | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/docs/settings/security-settings.asciidoc b/docs/settings/security-settings.asciidoc index 941cfca92e603..98d7b13a1122b 100644 --- a/docs/settings/security-settings.asciidoc +++ b/docs/settings/security-settings.asciidoc @@ -210,6 +210,12 @@ Sets the interval at which {kib} tries to remove expired and invalid sessions fr + TIP: Use a string of `[ms\|s\|m\|h\|d\|w\|M\|Y]` (e.g. '20m', '24h', '7d', '1w'). +xpack.security.session.сoncurrentSessions.maxSessions:: +Set the maximum number of sessions each user is allowed to have active at any given time. +By default, no limit is applied. +If set, the value of this option should be an integer between `1` and `1000`. +When the limit is exceeded, the oldest session is automatically invalidated. + [[security-encrypted-saved-objects-settings]] ==== Encrypted saved objects settings diff --git a/docs/user/security/session-management.asciidoc b/docs/user/security/session-management.asciidoc index 45e3d479858ba..01b5693d1b0b3 100644 --- a/docs/user/security/session-management.asciidoc +++ b/docs/user/security/session-management.asciidoc @@ -49,3 +49,18 @@ You can configure the interval at which {kib} tries to remove expired and invali xpack.security.session.cleanupInterval: "1d" -------------------------------------------------------------------------------- -- + +[[session-max-sessions]] +==== Maximum number of concurrent sessions +By default, there is no limit to the maximum number of concurrent sessions each user can have in {kib}. +To add a limit, use the `xpack.security.session.сoncurrentSessions.maxSessions` configuration option. +If set, the value of this option should be an integer between `1` and `1000`. +When the limit is exceeded, the oldest session is automatically invalidated. + +-- +[source,yaml] +-------------------------------------------------------------------------------- +xpack.security.session.сoncurrentSessions: + maxSessions: 3 +-------------------------------------------------------------------------------- +-- From 807625c108a6f9f67875cd891023e8e8a4926ee7 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 16 Feb 2023 11:33:51 -0700 Subject: [PATCH 098/210] Create Extensions of DiscoverAppLocator for DiscoverServerPlugin (#150631) ## Summary Adds `DiscoverServerPluginLocatorService`, a set of utilities that allows consumers to extract search info from `DiscoverAppLocatorParams`. Needed for https://github.com/elastic/kibana/issues/148775 ## Refactoring changes * Moved some code from `src/plugins/discover/public/utils/sorting` to `common`, which was needed in the server-side context. * Moved the definition of the `SavedSearch` interface from `src/plugins/saved_search/public` to `common` ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- src/plugins/discover/README.md | 10 +- .../utils/sorting/get_default_sort.test.ts | 0 .../utils/sorting/get_default_sort.ts | 0 .../common/utils/sorting/get_sort.test.ts | 74 ++++++++ .../discover/common/utils/sorting/get_sort.ts | 73 +++++++ .../get_sort_for_search_source.test.ts | 0 .../sorting/get_sort_for_search_source.ts | 0 .../discover/common/utils/sorting/index.ts | 11 ++ src/plugins/discover/public/index.ts | 3 - .../public/utils/sorting/get_sort.test.ts | 60 +----- .../discover/public/utils/sorting/get_sort.ts | 67 +------ .../discover/public/utils/sorting/index.ts | 10 +- src/plugins/discover/server/index.ts | 21 +++ .../locator/columns_from_locator.test.ts | 141 ++++++++++++++ .../server/locator/columns_from_locator.ts | 101 ++++++++++ src/plugins/discover/server/locator/index.ts | 33 ++++ src/plugins/discover/server/locator/mocks.ts | 41 ++++ .../locator/searchsource_from_locator.test.ts | 178 ++++++++++++++++++ .../locator/searchsource_from_locator.ts | 159 ++++++++++++++++ .../discover/server/locator/service.ts | 33 ++++ .../server/locator/title_from_locator.test.ts | 110 +++++++++++ .../server/locator/title_from_locator.ts | 56 ++++++ src/plugins/discover/server/mocks.ts | 16 ++ src/plugins/discover/server/plugin.ts | 18 +- src/plugins/saved_search/common/index.ts | 13 ++ .../common/saved_searches_utils.ts | 36 ++++ src/plugins/saved_search/common/types.ts | 76 ++++++++ src/plugins/saved_search/public/index.ts | 9 +- .../saved_searches/get_saved_searches.ts | 4 +- .../public/services/saved_searches/index.ts | 2 +- .../saved_searches/save_saved_searches.ts | 4 +- .../saved_searches_utils.test.ts | 3 +- .../saved_searches/saved_searches_utils.ts | 24 +-- .../public/services/saved_searches/types.ts | 71 +------ src/plugins/saved_search/server/index.ts | 2 + .../saved_searches/get_saved_searches.ts | 43 +++++ .../server/services/saved_searches/index.ts | 9 + 37 files changed, 1270 insertions(+), 241 deletions(-) rename src/plugins/discover/{public => common}/utils/sorting/get_default_sort.test.ts (100%) rename src/plugins/discover/{public => common}/utils/sorting/get_default_sort.ts (100%) create mode 100644 src/plugins/discover/common/utils/sorting/get_sort.test.ts create mode 100644 src/plugins/discover/common/utils/sorting/get_sort.ts rename src/plugins/discover/{public => common}/utils/sorting/get_sort_for_search_source.test.ts (100%) rename src/plugins/discover/{public => common}/utils/sorting/get_sort_for_search_source.ts (100%) create mode 100644 src/plugins/discover/common/utils/sorting/index.ts create mode 100644 src/plugins/discover/server/locator/columns_from_locator.test.ts create mode 100644 src/plugins/discover/server/locator/columns_from_locator.ts create mode 100644 src/plugins/discover/server/locator/index.ts create mode 100644 src/plugins/discover/server/locator/mocks.ts create mode 100644 src/plugins/discover/server/locator/searchsource_from_locator.test.ts create mode 100644 src/plugins/discover/server/locator/searchsource_from_locator.ts create mode 100644 src/plugins/discover/server/locator/service.ts create mode 100644 src/plugins/discover/server/locator/title_from_locator.test.ts create mode 100644 src/plugins/discover/server/locator/title_from_locator.ts create mode 100644 src/plugins/discover/server/mocks.ts create mode 100644 src/plugins/saved_search/common/saved_searches_utils.ts create mode 100644 src/plugins/saved_search/common/types.ts create mode 100644 src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts create mode 100644 src/plugins/saved_search/server/services/saved_searches/index.ts diff --git a/src/plugins/discover/README.md b/src/plugins/discover/README.md index f7dcc54880ead..6240cd63f3ea3 100644 --- a/src/plugins/discover/README.md +++ b/src/plugins/discover/README.md @@ -25,9 +25,15 @@ One folder for every "route", each folder contains files and folders related onl Contains all the server-only code. +* **[/sample_data](./server/sample_data)** (Registrations with the Sample Data Registry for Discover saved objects) +* **[/capabilities_provider](./server/capabilities_provider.ts)** (CapabilitiesProvider definition of capabilities for Core) +* **[/ui_settings](./server/ui_settings.ts)** (Settings and the default values for UiSettingsServiceSetup ) +* **[/locator](./server/locator)** (Extensions of DiscoverAppLocator for the DiscoverServerPlugin API) + ### [src/plugins/discover/common](./common)) Contains all code shared by client and server. - - +* **[/constants](./common/constants.ts)** (General contants) +* **[/field_types](./common/field_types.ts)** (Field types constants) +* **[/locator](./common/locator)** (Registration with the URL service for BWC deep-linking to Discover views.) diff --git a/src/plugins/discover/public/utils/sorting/get_default_sort.test.ts b/src/plugins/discover/common/utils/sorting/get_default_sort.test.ts similarity index 100% rename from src/plugins/discover/public/utils/sorting/get_default_sort.test.ts rename to src/plugins/discover/common/utils/sorting/get_default_sort.test.ts diff --git a/src/plugins/discover/public/utils/sorting/get_default_sort.ts b/src/plugins/discover/common/utils/sorting/get_default_sort.ts similarity index 100% rename from src/plugins/discover/public/utils/sorting/get_default_sort.ts rename to src/plugins/discover/common/utils/sorting/get_default_sort.ts diff --git a/src/plugins/discover/common/utils/sorting/get_sort.test.ts b/src/plugins/discover/common/utils/sorting/get_sort.test.ts new file mode 100644 index 0000000000000..bed10b3829de0 --- /dev/null +++ b/src/plugins/discover/common/utils/sorting/get_sort.test.ts @@ -0,0 +1,74 @@ +/* + * Copyright 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 { getSort, getSortArray } from './get_sort'; +import { + stubDataView, + stubDataViewWithoutTimeField, +} from '@kbn/data-views-plugin/common/data_view.stub'; + +describe('docTable', function () { + describe('getSort function', function () { + test('should be a function', function () { + expect(typeof getSort === 'function').toBeTruthy(); + }); + + test('should return an array of objects', function () { + expect(getSort([['bytes', 'desc']], stubDataView)).toEqual([{ bytes: 'desc' }]); + expect(getSort([['bytes', 'desc']], stubDataViewWithoutTimeField)).toEqual([ + { bytes: 'desc' }, + ]); + }); + + test('should passthrough arrays of objects', () => { + expect(getSort([{ bytes: 'desc' }], stubDataView)).toEqual([{ bytes: 'desc' }]); + }); + + test('should return an empty array when passed an unsortable field', function () { + expect(getSort([['non-sortable', 'asc']], stubDataView)).toEqual([]); + expect(getSort([['lol_nope', 'asc']], stubDataView)).toEqual([]); + + expect(getSort([['non-sortable', 'asc']], stubDataViewWithoutTimeField)).toEqual([]); + }); + + test('should return an empty array ', function () { + expect(getSort([], stubDataView)).toEqual([]); + expect(getSort([['foo', 'bar']], stubDataView)).toEqual([]); + expect(getSort([{ foo: 'bar' }], stubDataView)).toEqual([]); + }); + + test('should convert a legacy sort to an array of objects', function () { + expect(getSort(['foo', 'desc'], stubDataView)).toEqual([{ foo: 'desc' }]); + expect(getSort(['foo', 'asc'], stubDataView)).toEqual([{ foo: 'asc' }]); + }); + }); + describe('getSortArray function', function () { + test('should have an array method', function () { + expect(getSortArray).toBeInstanceOf(Function); + }); + + test('should return an array of arrays for sortable fields', function () { + expect(getSortArray([['bytes', 'desc']], stubDataView)).toEqual([['bytes', 'desc']]); + }); + + test('should return an array of arrays from an array of elasticsearch sort objects', function () { + expect(getSortArray([{ bytes: 'desc' }], stubDataView)).toEqual([['bytes', 'desc']]); + }); + + test('should sort by an empty array when an unsortable field is given', function () { + expect(getSortArray([{ 'non-sortable': 'asc' }], stubDataView)).toEqual([]); + expect(getSortArray([{ lol_nope: 'asc' }], stubDataView)).toEqual([]); + expect(getSortArray([{ 'non-sortable': 'asc' }], stubDataViewWithoutTimeField)).toEqual([]); + }); + + test('should return an empty array when passed an empty sort array', () => { + expect(getSortArray([], stubDataView)).toEqual([]); + expect(getSortArray([], stubDataViewWithoutTimeField)).toEqual([]); + }); + }); +}); diff --git a/src/plugins/discover/common/utils/sorting/get_sort.ts b/src/plugins/discover/common/utils/sorting/get_sort.ts new file mode 100644 index 0000000000000..aece689ae543f --- /dev/null +++ b/src/plugins/discover/common/utils/sorting/get_sort.ts @@ -0,0 +1,73 @@ +/* + * Copyright 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 { DataView } from '@kbn/data-views-plugin/common'; +import type { SortOrder } from '@kbn/saved-search-plugin/public'; +import { isPlainObject } from 'lodash'; + +export type SortPairObj = Record; +export type SortPair = SortOrder | SortPairObj; +export type SortInput = SortPair | SortPair[]; + +export function isSortable(fieldName: string, dataView: DataView): boolean { + const field = dataView.getFieldByName(fieldName); + return !!(field && field.sortable); +} + +function createSortObject(sortPair: SortInput, dataView: DataView): SortPairObj | undefined { + if ( + Array.isArray(sortPair) && + sortPair.length === 2 && + isSortable(String(sortPair[0]), dataView) + ) { + const [field, direction] = sortPair as SortOrder; + return { [field]: direction }; + } else if (isPlainObject(sortPair) && isSortable(Object.keys(sortPair)[0], dataView)) { + return sortPair as SortPairObj; + } +} + +export function isLegacySort(sort: SortPair[] | SortPair): sort is SortPair { + return ( + sort.length === 2 && typeof sort[0] === 'string' && (sort[1] === 'desc' || sort[1] === 'asc') + ); +} + +/** + * Take a sorting array and make it into an object + * @param {array} sort two dimensional array [[fieldToSort, directionToSort]] + * or an array of objects [{fieldToSort: directionToSort}] + * @param {object} dataView used for determining default sort + * @returns Array<{object}> an array of sort objects + */ +export function getSort(sort: SortPair[] | SortPair, dataView: DataView): SortPairObj[] { + if (Array.isArray(sort)) { + if (isLegacySort(sort)) { + // To stay compatible with legacy sort, which just supported a single sort field + return [{ [sort[0]]: sort[1] }]; + } + return sort + .map((sortPair: SortPair) => createSortObject(sortPair, dataView)) + .filter((sortPairObj) => typeof sortPairObj === 'object') as SortPairObj[]; + } + return []; +} + +/** + * compared to getSort it doesn't return an array of objects, it returns an array of arrays + * [[fieldToSort: directionToSort]] + */ +export function getSortArray(sort: SortInput, dataView: DataView): SortOrder[] { + return getSort(sort, dataView).reduce((acc: SortOrder[], sortPair) => { + const entries = Object.entries(sortPair); + if (entries && entries[0]) { + acc.push(entries[0]); + } + return acc; + }, []); +} diff --git a/src/plugins/discover/public/utils/sorting/get_sort_for_search_source.test.ts b/src/plugins/discover/common/utils/sorting/get_sort_for_search_source.test.ts similarity index 100% rename from src/plugins/discover/public/utils/sorting/get_sort_for_search_source.test.ts rename to src/plugins/discover/common/utils/sorting/get_sort_for_search_source.test.ts diff --git a/src/plugins/discover/public/utils/sorting/get_sort_for_search_source.ts b/src/plugins/discover/common/utils/sorting/get_sort_for_search_source.ts similarity index 100% rename from src/plugins/discover/public/utils/sorting/get_sort_for_search_source.ts rename to src/plugins/discover/common/utils/sorting/get_sort_for_search_source.ts diff --git a/src/plugins/discover/common/utils/sorting/index.ts b/src/plugins/discover/common/utils/sorting/index.ts new file mode 100644 index 0000000000000..b392da9167a62 --- /dev/null +++ b/src/plugins/discover/common/utils/sorting/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 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 { getDefaultSort } from './get_default_sort'; +export { getSort, getSortArray } from './get_sort'; +export type { SortInput, SortPair } from './get_sort'; +export { getSortForSearchSource } from './get_sort_for_search_source'; diff --git a/src/plugins/discover/public/index.ts b/src/plugins/discover/public/index.ts index bafa6b603d6e4..6b3dc0999410e 100644 --- a/src/plugins/discover/public/index.ts +++ b/src/plugins/discover/public/index.ts @@ -26,7 +26,4 @@ export { getSavedSearchUrl, getSavedSearchUrlConflictMessage, throwErrorOnSavedSearchUrlConflict, - VIEW_MODE, - type DiscoverGridSettings, - type DiscoverGridSettingsColumn, } from '@kbn/saved-search-plugin/public'; diff --git a/src/plugins/discover/public/utils/sorting/get_sort.test.ts b/src/plugins/discover/public/utils/sorting/get_sort.test.ts index 0656a2e36c4ca..23e56511f2ef0 100644 --- a/src/plugins/discover/public/utils/sorting/get_sort.test.ts +++ b/src/plugins/discover/public/utils/sorting/get_sort.test.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { getSort, getSortArray, getSortForEmbeddable } from './get_sort'; +import { getSortForEmbeddable } from './get_sort'; import { stubDataView, stubDataViewWithoutTimeField, @@ -14,64 +14,6 @@ import { import { uiSettingsMock } from '../../__mocks__/ui_settings'; describe('docTable', function () { - describe('getSort function', function () { - test('should be a function', function () { - expect(typeof getSort === 'function').toBeTruthy(); - }); - - test('should return an array of objects', function () { - expect(getSort([['bytes', 'desc']], stubDataView)).toEqual([{ bytes: 'desc' }]); - expect(getSort([['bytes', 'desc']], stubDataViewWithoutTimeField)).toEqual([ - { bytes: 'desc' }, - ]); - }); - - test('should passthrough arrays of objects', () => { - expect(getSort([{ bytes: 'desc' }], stubDataView)).toEqual([{ bytes: 'desc' }]); - }); - - test('should return an empty array when passed an unsortable field', function () { - expect(getSort([['non-sortable', 'asc']], stubDataView)).toEqual([]); - expect(getSort([['lol_nope', 'asc']], stubDataView)).toEqual([]); - - expect(getSort([['non-sortable', 'asc']], stubDataViewWithoutTimeField)).toEqual([]); - }); - - test('should return an empty array ', function () { - expect(getSort([], stubDataView)).toEqual([]); - expect(getSort([['foo', 'bar']], stubDataView)).toEqual([]); - expect(getSort([{ foo: 'bar' }], stubDataView)).toEqual([]); - }); - - test('should convert a legacy sort to an array of objects', function () { - expect(getSort(['foo', 'desc'], stubDataView)).toEqual([{ foo: 'desc' }]); - expect(getSort(['foo', 'asc'], stubDataView)).toEqual([{ foo: 'asc' }]); - }); - }); - describe('getSortArray function', function () { - test('should have an array method', function () { - expect(getSortArray).toBeInstanceOf(Function); - }); - - test('should return an array of arrays for sortable fields', function () { - expect(getSortArray([['bytes', 'desc']], stubDataView)).toEqual([['bytes', 'desc']]); - }); - - test('should return an array of arrays from an array of elasticsearch sort objects', function () { - expect(getSortArray([{ bytes: 'desc' }], stubDataView)).toEqual([['bytes', 'desc']]); - }); - - test('should sort by an empty array when an unsortable field is given', function () { - expect(getSortArray([{ 'non-sortable': 'asc' }], stubDataView)).toEqual([]); - expect(getSortArray([{ lol_nope: 'asc' }], stubDataView)).toEqual([]); - expect(getSortArray([{ 'non-sortable': 'asc' }], stubDataViewWithoutTimeField)).toEqual([]); - }); - - test('should return an empty array when passed an empty sort array', () => { - expect(getSortArray([], stubDataView)).toEqual([]); - expect(getSortArray([], stubDataViewWithoutTimeField)).toEqual([]); - }); - }); describe('getSortForEmbeddable function', function () { test('should return an array of arrays for sortable fields', function () { expect(getSortForEmbeddable([['bytes', 'desc']], stubDataView)).toEqual([['bytes', 'desc']]); diff --git a/src/plugins/discover/public/utils/sorting/get_sort.ts b/src/plugins/discover/public/utils/sorting/get_sort.ts index 59d414d8e1eea..39fcaeb64febe 100644 --- a/src/plugins/discover/public/utils/sorting/get_sort.ts +++ b/src/plugins/discover/public/utils/sorting/get_sort.ts @@ -6,74 +6,11 @@ * Side Public License, v 1. */ -import { isPlainObject } from 'lodash'; -import { DataView } from '@kbn/data-views-plugin/public'; +import { DataView } from '@kbn/data-views-plugin/common'; import { IUiSettingsClient } from '@kbn/core/public'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '../../../common'; -import { getDefaultSort } from './get_default_sort'; - -export type SortPairObj = Record; -export type SortPair = SortOrder | SortPairObj; -export type SortInput = SortPair | SortPair[]; - -export function isSortable(fieldName: string, dataView: DataView): boolean { - const field = dataView.getFieldByName(fieldName); - return !!(field && field.sortable); -} - -function createSortObject(sortPair: SortInput, dataView: DataView): SortPairObj | undefined { - if ( - Array.isArray(sortPair) && - sortPair.length === 2 && - isSortable(String(sortPair[0]), dataView) - ) { - const [field, direction] = sortPair as SortOrder; - return { [field]: direction }; - } else if (isPlainObject(sortPair) && isSortable(Object.keys(sortPair)[0], dataView)) { - return sortPair as SortPairObj; - } -} - -export function isLegacySort(sort: SortPair[] | SortPair): sort is SortPair { - return ( - sort.length === 2 && typeof sort[0] === 'string' && (sort[1] === 'desc' || sort[1] === 'asc') - ); -} - -/** - * Take a sorting array and make it into an object - * @param {array} sort two dimensional array [[fieldToSort, directionToSort]] - * or an array of objects [{fieldToSort: directionToSort}] - * @param {object} dataView used for determining default sort - * @returns Array<{object}> an array of sort objects - */ -export function getSort(sort: SortPair[] | SortPair, dataView: DataView): SortPairObj[] { - if (Array.isArray(sort)) { - if (isLegacySort(sort)) { - // To stay compatible with legacy sort, which just supported a single sort field - return [{ [sort[0]]: sort[1] }]; - } - return sort - .map((sortPair: SortPair) => createSortObject(sortPair, dataView)) - .filter((sortPairObj) => typeof sortPairObj === 'object') as SortPairObj[]; - } - return []; -} - -/** - * compared to getSort it doesn't return an array of objects, it returns an array of arrays - * [[fieldToSort: directionToSort]] - */ -export function getSortArray(sort: SortInput, dataView: DataView): SortOrder[] { - return getSort(sort, dataView).reduce((acc: SortOrder[], sortPair) => { - const entries = Object.entries(sortPair); - if (entries && entries[0]) { - acc.push(entries[0]); - } - return acc; - }, []); -} +import { getDefaultSort, getSortArray, SortInput } from '../../../common/utils/sorting'; /** * sorting for embeddable, like getSortArray,but returning a default in the case the given sort or dataView is not valid diff --git a/src/plugins/discover/public/utils/sorting/index.ts b/src/plugins/discover/public/utils/sorting/index.ts index 1d7f3ce6d671a..6e9c5c0a08b92 100644 --- a/src/plugins/discover/public/utils/sorting/index.ts +++ b/src/plugins/discover/public/utils/sorting/index.ts @@ -5,7 +5,9 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -export { getSort, getSortArray, getSortForEmbeddable } from './get_sort'; -export { getSortForSearchSource } from './get_sort_for_search_source'; -export { getDefaultSort } from './get_default_sort'; -export type { SortPair } from './get_sort'; + +export { getDefaultSort } from '../../../common/utils/sorting/get_default_sort'; +export { getSort, getSortArray } from '../../../common/utils/sorting/get_sort'; +export type { SortPair } from '../../../common/utils/sorting/get_sort'; +export { getSortForSearchSource } from '../../../common/utils/sorting/get_sort_for_search_source'; +export { getSortForEmbeddable } from './get_sort'; diff --git a/src/plugins/discover/server/index.ts b/src/plugins/discover/server/index.ts index 85dd3ce422cff..f899060f0304c 100644 --- a/src/plugins/discover/server/index.ts +++ b/src/plugins/discover/server/index.ts @@ -6,6 +6,27 @@ * Side Public License, v 1. */ +import { KibanaRequest } from '@kbn/core/server'; +import { DataPluginStart } from '@kbn/data-plugin/server/plugin'; +import { ColumnsFromLocatorFn, SearchSourceFromLocatorFn, TitleFromLocatorFn } from './locator'; import { DiscoverServerPlugin } from './plugin'; +export interface DiscoverServerPluginStartDeps { + data: DataPluginStart; +} + +export interface LocatorServiceScopedClient { + columnsFromLocator: ColumnsFromLocatorFn; + searchSourceFromLocator: SearchSourceFromLocatorFn; + titleFromLocator: TitleFromLocatorFn; +} + +export interface DiscoverServerPluginLocatorService { + asScopedClient: (req: KibanaRequest) => Promise; +} + +export interface DiscoverServerPluginStart { + locator: DiscoverServerPluginLocatorService; +} + export const plugin = () => new DiscoverServerPlugin(); diff --git a/src/plugins/discover/server/locator/columns_from_locator.test.ts b/src/plugins/discover/server/locator/columns_from_locator.test.ts new file mode 100644 index 0000000000000..d866cb585f169 --- /dev/null +++ b/src/plugins/discover/server/locator/columns_from_locator.test.ts @@ -0,0 +1,141 @@ +/* + * Copyright 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 { IUiSettingsClient, SavedObject, SavedObjectsClientContract } from '@kbn/core/server'; +import { coreMock, httpServerMock } from '@kbn/core/server/mocks'; +import { ISearchStartSearchSource, SearchSource } from '@kbn/data-plugin/common'; +import { createSearchSourceMock } from '@kbn/data-plugin/common/search/search_source/mocks'; +import { dataPluginMock } from '@kbn/data-plugin/server/mocks'; +import { DataView } from '@kbn/data-views-plugin/common'; +import { createStubDataView } from '@kbn/data-views-plugin/common/stubs'; +import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; +import { LocatorServicesDeps as Services } from '.'; +import { DiscoverAppLocatorParams, DOC_HIDE_TIME_COLUMN_SETTING } from '../../common'; +import { columnsFromLocatorFactory } from './columns_from_locator'; + +const mockSavedSearchId = 'abc-test-123'; +// object returned by savedObjectsClient.get in testing +const defaultSavedSearch: SavedObject = { + type: 'search', + id: mockSavedSearchId, + references: [ + { id: '90943e30-9a47-11e8-b64d-95841ca0b247', name: 'testIndexRefName', type: 'index-pattern' }, + ], + attributes: { + title: '[Logs] Visits', + description: '', + columns: ['response', 'url', 'clientip', 'machine.os', 'tags'], + sort: [['test', '134']] as unknown as [], + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"testIndexRefName"}', + }, + } as unknown as SavedSearchAttributes, +}; + +const coreStart = coreMock.createStart(); +let uiSettingsClient: IUiSettingsClient; +let soClient: SavedObjectsClientContract; +let searchSourceStart: ISearchStartSearchSource; +let mockServices: Services; +let mockSavedSearch: SavedObject; +let mockDataView: DataView; + +// mock search source belonging to the saved search +let mockSearchSource: SearchSource; + +// mock params containing the discover app locator +let mockPayload: Array<{ params: DiscoverAppLocatorParams }>; + +beforeAll(async () => { + const dataStartMock = dataPluginMock.createStartContract(); + const request = httpServerMock.createKibanaRequest(); + soClient = coreStart.savedObjects.getScopedClient(request); + uiSettingsClient = coreMock.createStart().uiSettings.asScopedToClient(soClient); + searchSourceStart = await dataStartMock.search.searchSource.asScoped(request); + + mockServices = { + searchSourceStart, + savedObjects: soClient, + uiSettings: uiSettingsClient, + }; + + const soClientGet = soClient.get; + soClient.get = jest.fn().mockImplementation((type, id) => { + if (id === mockSavedSearchId) return mockSavedSearch; + return soClientGet(type, id); + }); +}); + +beforeEach(() => { + mockPayload = [{ params: { savedSearchId: mockSavedSearchId } }]; + mockSavedSearch = { ...defaultSavedSearch, attributes: { ...defaultSavedSearch.attributes } }; + + mockDataView = createStubDataView({ + spec: { + id: '90943e30-9a47-11e8-b64d-95841ca0b247', + name: 'testIndexRefName', + timeFieldName: 'timestamp', + }, + }); + + mockSearchSource = createSearchSourceMock(); + mockSearchSource.setField('index', mockDataView); + searchSourceStart.create = jest.fn().mockResolvedValue(mockSearchSource); + + const uiSettingsGet = uiSettingsClient.get; + uiSettingsClient.get = jest.fn().mockImplementation((key: string) => { + if (key === DOC_HIDE_TIME_COLUMN_SETTING) { + return false; // this is the default for the real setting + } + return uiSettingsGet(key); + }); +}); + +test('with search source using columns with default time field', async () => { + const provider = columnsFromLocatorFactory(mockServices); + const columns = await provider(mockPayload[0].params); + expect(columns).toEqual(['timestamp', 'response', 'url', 'clientip', 'machine.os', 'tags']); +}); + +test('with search source using columns without time field in the DataView', async () => { + mockDataView = createStubDataView({ + spec: { + id: '90943e30-9a47-11e8-b64d-95841ca0b247', + name: 'testIndexRefName', + timeFieldName: undefined, + }, + }); + mockSearchSource.setField('index', mockDataView); + + const provider = columnsFromLocatorFactory(mockServices); + const columns = await provider(mockPayload[0].params); + expect(columns).toEqual(['response', 'url', 'clientip', 'machine.os', 'tags']); +}); + +test('with search source using columns when DOC_HIDE_TIME_COLUMN_SETTING is true', async () => { + const uiSettingsGet = uiSettingsClient.get; + uiSettingsClient.get = jest.fn().mockImplementation((key: string) => { + if (key === DOC_HIDE_TIME_COLUMN_SETTING) { + return true; + } + return uiSettingsGet(key); + }); + + const provider = columnsFromLocatorFactory(mockServices); + const columns = await provider(mockPayload[0].params); + expect(columns).toEqual(['response', 'url', 'clientip', 'machine.os', 'tags']); +}); + +test('with saved search containing ["_source"]', async () => { + mockSavedSearch.attributes.columns = ['_source']; + + const provider = columnsFromLocatorFactory(mockServices); + const columns = await provider(mockPayload[0].params); + expect(columns).not.toBeDefined(); // must erase the field since it can not be used for search query +}); diff --git a/src/plugins/discover/server/locator/columns_from_locator.ts b/src/plugins/discover/server/locator/columns_from_locator.ts new file mode 100644 index 0000000000000..6514616805235 --- /dev/null +++ b/src/plugins/discover/server/locator/columns_from_locator.ts @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { DataView } from '@kbn/data-views-plugin/common'; +import { SavedSearch } from '@kbn/saved-search-plugin/common'; +import { getSavedSearch } from '@kbn/saved-search-plugin/server'; +import { LocatorServicesDeps } from '.'; +import { + DiscoverAppLocatorParams, + DOC_HIDE_TIME_COLUMN_SETTING, + SEARCH_FIELDS_FROM_SOURCE, +} from '../../common'; + +function isStringArray(arr: unknown | string[]): arr is string[] { + return Array.isArray(arr) && arr.every((p) => typeof p === 'string'); +} + +/** + * @internal + */ +export const getColumns = async ( + services: LocatorServicesDeps, + index: DataView, + savedSearch: SavedSearch +) => { + const [hideTimeColumn, useFieldsFromSource] = await Promise.all([ + services.uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING), + services.uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), + ]); + + // Add/adjust columns from the saved search attributes and UI Settings + let columns: string[] | undefined; + let columnsNext: string[] | undefined; + let timeFieldName: string | undefined; + // ignore '_source' column: it may be the only column when the user wishes to export all fields + const columnsTemp = savedSearch.columns?.filter((col) => col !== '_source'); + + if (typeof columnsTemp !== 'undefined' && columnsTemp.length > 0 && isStringArray(columnsTemp)) { + columns = columnsTemp; + + // conditionally add the time field column: + if (index?.timeFieldName && !hideTimeColumn) { + timeFieldName = index.timeFieldName; + } + if (timeFieldName && !columnsTemp.includes(timeFieldName)) { + columns = [timeFieldName, ...columns]; + } + + /* + * For querying performance, the searchSource object must have fields set. + * Otherwise, the requests will ask for all fields, even if only a few are really needed. + * Discover does not set fields, since having all fields is needed for the UI. + */ + if (!useFieldsFromSource && columns.length) { + columnsNext = columns; + } + } + + return { + timeFieldName, + columns: columnsNext, + }; +}; + +/** + * @internal + */ +export function columnsFromLocatorFactory(services: LocatorServicesDeps) { + /** + * Allows consumers to retrieve a set of selected fields from a search in DiscoverAppLocatorParams + * + * @public + */ + const columnsFromLocator = async ( + params: DiscoverAppLocatorParams + ): Promise => { + if (!params.savedSearchId) { + throw new Error(`Saved Search ID is required in DiscoverAppLocatorParams`); + } + + const savedSearch = await getSavedSearch(params.savedSearchId, services); + + const index = savedSearch.searchSource.getField('index'); + + if (!index) { + throw new Error(`Search Source is missing the "index" field`); + } + + const { columns } = await getColumns(services, index, savedSearch); + + return columns; + }; + return columnsFromLocator; +} + +export type ColumnsFromLocatorFn = ReturnType; diff --git a/src/plugins/discover/server/locator/index.ts b/src/plugins/discover/server/locator/index.ts new file mode 100644 index 0000000000000..c1bbe2ded04af --- /dev/null +++ b/src/plugins/discover/server/locator/index.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 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, IUiSettingsClient, SavedObjectsClientContract } from '@kbn/core/server'; +import { ISearchStartSearchSource } from '@kbn/data-plugin/common'; +import { DiscoverServerPluginLocatorService, DiscoverServerPluginStartDeps } from '..'; +import { getScopedClient } from './service'; + +export type { ColumnsFromLocatorFn } from './columns_from_locator'; +export type { SearchSourceFromLocatorFn } from './searchsource_from_locator'; +export type { TitleFromLocatorFn } from './title_from_locator'; + +/** + * @internal + */ +export interface LocatorServicesDeps { + searchSourceStart: ISearchStartSearchSource; + savedObjects: SavedObjectsClientContract; + uiSettings: IUiSettingsClient; +} + +/** + * @internal + */ +export const initializeLocatorServices = ( + core: CoreStart, + deps: DiscoverServerPluginStartDeps +): DiscoverServerPluginLocatorService => getScopedClient(core, deps); diff --git a/src/plugins/discover/server/locator/mocks.ts b/src/plugins/discover/server/locator/mocks.ts new file mode 100644 index 0000000000000..686b161e5df66 --- /dev/null +++ b/src/plugins/discover/server/locator/mocks.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 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 { KibanaRequest } from '@kbn/core/server'; +import { SearchSource } from '@kbn/data-plugin/common'; +import { createSearchSourceMock } from '@kbn/data-plugin/common/search/search_source/mocks'; +import { DiscoverServerPluginLocatorService, LocatorServiceScopedClient } from '..'; +import { DiscoverAppLocatorParams } from '../../common'; + +export const createLocatorServiceMock = (): DiscoverServerPluginLocatorService => { + const mockFields = ['@timestamp', 'mock-message']; + + const columnsFromLocatorMock = jest + .fn, [DiscoverAppLocatorParams]>() + .mockResolvedValue(mockFields); + + const searchSourceFromLocatorMock = jest + .fn, [DiscoverAppLocatorParams]>() + .mockResolvedValue(createSearchSourceMock({ fields: mockFields })); + + const titleFromLocatorMock = jest + .fn, [DiscoverAppLocatorParams]>() + .mockResolvedValue('mock search title'); + + return { + asScopedClient: jest + .fn, [req: KibanaRequest]>() + .mockImplementation(() => { + return Promise.resolve({ + columnsFromLocator: columnsFromLocatorMock, + searchSourceFromLocator: searchSourceFromLocatorMock, + titleFromLocator: titleFromLocatorMock, + } as LocatorServiceScopedClient); + }), + }; +}; diff --git a/src/plugins/discover/server/locator/searchsource_from_locator.test.ts b/src/plugins/discover/server/locator/searchsource_from_locator.test.ts new file mode 100644 index 0000000000000..e2315cf2e4872 --- /dev/null +++ b/src/plugins/discover/server/locator/searchsource_from_locator.test.ts @@ -0,0 +1,178 @@ +/* + * Copyright 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 { IUiSettingsClient, SavedObject, SavedObjectsClientContract } from '@kbn/core/server'; +import { coreMock, httpServerMock } from '@kbn/core/server/mocks'; +import { ISearchStartSearchSource, SearchSource } from '@kbn/data-plugin/common'; +import { createSearchSourceMock } from '@kbn/data-plugin/common/search/search_source/mocks'; +import { dataPluginMock } from '@kbn/data-plugin/server/mocks'; +import { DataView } from '@kbn/data-views-plugin/common'; +import { createStubDataView } from '@kbn/data-views-plugin/common/stubs'; +import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; +import { LocatorServicesDeps as Services } from '.'; +import { DiscoverAppLocatorParams, DOC_HIDE_TIME_COLUMN_SETTING } from '../../common'; +import { searchSourceFromLocatorFactory } from './searchsource_from_locator'; + +const mockSavedSearchId = 'abc-test-123'; +// object returned by savedObjectsClient.get in testing +const defaultSavedSearch: SavedObject = { + type: 'search', + id: mockSavedSearchId, + references: [ + { id: '90943e30-9a47-11e8-b64d-95841ca0b247', name: 'testIndexRefName', type: 'index-pattern' }, + ], + attributes: { + title: '[Logs] Visits', + description: '', + columns: ['response', 'url', 'clientip', 'machine.os', 'tags'], + sort: [['test', '134']] as unknown as [], + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"testIndexRefName"}', + }, + } as unknown as SavedSearchAttributes, +}; + +const coreStart = coreMock.createStart(); +let uiSettingsClient: IUiSettingsClient; +let soClient: SavedObjectsClientContract; +let searchSourceStart: ISearchStartSearchSource; +let mockServices: Services; +let mockSavedSearch: SavedObject; +let mockDataView: DataView; + +// mock search source belonging to the saved search +let mockSearchSource: SearchSource; + +// mock params containing the discover app locator +let mockPayload: Array<{ params: DiscoverAppLocatorParams }>; + +beforeAll(async () => { + const dataStartMock = dataPluginMock.createStartContract(); + const request = httpServerMock.createKibanaRequest(); + soClient = coreStart.savedObjects.getScopedClient(request); + uiSettingsClient = coreMock.createStart().uiSettings.asScopedToClient(soClient); + searchSourceStart = await dataStartMock.search.searchSource.asScoped(request); + + mockServices = { + searchSourceStart, + savedObjects: soClient, + uiSettings: uiSettingsClient, + }; + + const soClientGet = soClient.get; + soClient.get = jest.fn().mockImplementation((type, id) => { + if (id === mockSavedSearchId) return mockSavedSearch; + return soClientGet(type, id); + }); +}); + +beforeEach(() => { + mockPayload = [{ params: { savedSearchId: mockSavedSearchId } }]; + mockSavedSearch = { ...defaultSavedSearch, attributes: { ...defaultSavedSearch.attributes } }; + + mockDataView = createStubDataView({ + spec: { + id: '90943e30-9a47-11e8-b64d-95841ca0b247', + name: 'testIndexRefName', + timeFieldName: 'timestamp', + }, + }); + + mockSearchSource = createSearchSourceMock(); + mockSearchSource.setField('index', mockDataView); + searchSourceStart.create = jest.fn().mockResolvedValue(mockSearchSource); + + const uiSettingsGet = uiSettingsClient.get; + uiSettingsClient.get = jest.fn().mockImplementation((key: string) => { + if (key === DOC_HIDE_TIME_COLUMN_SETTING) { + return false; // this is the default for the real setting + } + return uiSettingsGet(key); + }); +}); + +test('with saved search containing a filter', async () => { + const testFilter = { + meta: { index: 'logstash-*' }, + query: { term: { host: 'elastic.co' } }, + }; + mockSearchSource.setField('filter', testFilter); + + const provider = searchSourceFromLocatorFactory(mockServices); + const searchSource = await provider(mockPayload[0].params); + expect(searchSource.getSerializedFields().filter).toEqual([testFilter]); +}); + +test('with locator params containing a filter', async () => { + const testFilter = { + meta: { index: 'logstash-*' }, + query: { term: { host: 'elastic.co' } }, + }; + mockPayload = [{ params: { savedSearchId: mockSavedSearchId, filters: [testFilter] } }]; + + const provider = searchSourceFromLocatorFactory(mockServices); + const searchSource = await provider(mockPayload[0].params); + expect(searchSource.getSerializedFields().filter).toEqual([testFilter]); +}); + +test('with saved search and locator params both containing a filter', async () => { + // search source belonging to the saved search + mockSearchSource.setField('filter', { + meta: { index: 'logstash-*' }, + query: { term: { host: 'elastic.co' } }, + }); + + // locator params + mockPayload = [ + { + params: { + savedSearchId: mockSavedSearchId, + filters: [ + { + meta: { index: 'logstash-*' }, + query: { term: { os: 'Palm Pilot' } }, + }, + ], + }, + }, + ]; + + const provider = searchSourceFromLocatorFactory(mockServices); + const searchSource = await provider(mockPayload[0].params); + expect(searchSource.getSerializedFields().filter).toEqual([ + { meta: { index: 'logstash-*' }, query: { term: { host: 'elastic.co' } } }, + { meta: { index: 'logstash-*' }, query: { term: { os: 'Palm Pilot' } } }, + ]); +}); + +test('with locator params containing a timeRange', async () => { + const testTimeRange = { from: 'now-15m', to: 'now', mode: 'absolute' as const }; + mockPayload = [{ params: { savedSearchId: mockSavedSearchId, timeRange: testTimeRange } }]; + + const provider = searchSourceFromLocatorFactory(mockServices); + const searchSource = await provider(mockPayload[0].params); + expect(searchSource.getSerializedFields().filter).toEqual([ + { + meta: { + index: '90943e30-9a47-11e8-b64d-95841ca0b247', + }, + query: { + range: { timestamp: { format: 'strict_date_optional_time', gte: 'now-15m', lte: 'now' } }, + }, + }, + ]); +}); + +test('with saved search containing ["_source"]', async () => { + mockSavedSearch.attributes.columns = ['_source']; + + const provider = searchSourceFromLocatorFactory(mockServices); + const searchSource = await provider(mockPayload[0].params); + expect(searchSource.getSerializedFields().fields).toEqual(['*']); +}); diff --git a/src/plugins/discover/server/locator/searchsource_from_locator.ts b/src/plugins/discover/server/locator/searchsource_from_locator.ts new file mode 100644 index 0000000000000..455efc968b534 --- /dev/null +++ b/src/plugins/discover/server/locator/searchsource_from_locator.ts @@ -0,0 +1,159 @@ +/* + * Copyright 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 { SearchSource, TimeRange } from '@kbn/data-plugin/common'; +import { DataView } from '@kbn/data-views-plugin/common'; +import { AggregateQuery, Filter, Query } from '@kbn/es-query'; +import { SavedSearch } from '@kbn/saved-search-plugin/common'; +import { getSavedSearch } from '@kbn/saved-search-plugin/server'; +import { LocatorServicesDeps } from '.'; +import { DiscoverAppLocatorParams } from '../../common'; +import { getSortForSearchSource } from '../../common/utils/sorting'; +import { getColumns } from './columns_from_locator'; + +// Shortcut for return type of searchSource.getField('filter'); +type FilterResponse = undefined | Filter | Filter[] | (() => Filter | Filter[] | undefined); + +// flattens filter objects coming from different sources +function normalizeFilter(savedSearchFilterTmp?: FilterResponse) { + let savedSearchFilter: Filter[] | undefined; + if (savedSearchFilterTmp && Array.isArray(savedSearchFilterTmp)) { + // can not include functions: could be recursive + savedSearchFilter = [...savedSearchFilterTmp.filter((f) => typeof f !== 'function')]; + } else if (savedSearchFilterTmp && typeof savedSearchFilterTmp !== 'function') { + savedSearchFilter = [savedSearchFilterTmp]; + } + return savedSearchFilter; +} + +/* + * Combine the time range filter from the job request body with any filters that have been saved into the saved search object + * NOTE: if the filters that were saved into the search are NOT an array, it may be a function, and can not be supported. + */ +const getFilters = ( + timeFieldName: string | undefined, + index: DataView, + savedSearch: SavedSearch, + searchSource: SearchSource, + params: DiscoverAppLocatorParams +) => { + const filters: Filter[] = []; + + // Set a time range filter from (1) DiscoverAppLocatorParams or (2) SavedSearch + if (timeFieldName) { + const timeRange = params.timeRange + ? params.timeRange + : savedSearch.timeRange + ? (savedSearch.timeRange as TimeRange) + : null; + + if (timeRange) { + filters.push({ + meta: { index: index.id }, + query: { + range: { + [timeFieldName]: { + format: 'strict_date_optional_time', + gte: timeRange.from, + lte: timeRange.to, + }, + }, + }, + }); + } + } + + const savedSearchFilter = normalizeFilter(searchSource.getField('filter')); + if (savedSearchFilter) { + filters.push(...savedSearchFilter); + } + const paramsFilter = normalizeFilter(params.filters); + if (paramsFilter) { + filters.push(...paramsFilter); + } + + return filters; +}; + +/* + * Pick the query from the job request body vs any query that has been saved into the saved search object. + */ +const getQuery = (searchSource: SearchSource, params: DiscoverAppLocatorParams) => { + let query: Query | AggregateQuery | undefined; + const paramsQuery = params.query; + const savedSearchQuery = searchSource.getField('query'); + if (paramsQuery) { + query = paramsQuery; + } else if (savedSearchQuery) { + // NOTE: cannot combine 2 queries (using AND): query can not be an array in SearchSourceFields + query = savedSearchQuery; + } + + return query; +}; + +/** + * @internal + */ +export function searchSourceFromLocatorFactory(services: LocatorServicesDeps) { + /** + * Allows consumers to transform DiscoverAppLocatorParams into a SearchSource object for querying. + * + * @public + */ + const searchSourceFromLocator = async ( + params: DiscoverAppLocatorParams + ): Promise => { + if (!params.savedSearchId) { + throw new Error(`Saved Search ID is required in DiscoverAppLocatorParams`); + } + + const savedSearch = await getSavedSearch(params.savedSearchId, services); + + const searchSource = savedSearch.searchSource.createCopy(); + const index = searchSource.getField('index'); + + if (!index) { + throw new Error(`Search Source is missing the "index" field`); + } + + const { columns, timeFieldName } = await getColumns(services, index, savedSearch); + + // Inject columns + if (columns) { + searchSource.setField('fields', columns); + } else { + searchSource.setField('fields', ['*']); + } + + // Inject updated filters + const filters = getFilters(timeFieldName, index, savedSearch, searchSource, params); + if (filters.length > 0) { + searchSource.removeField('filter'); + searchSource.setField('filter', filters); + } + + // Inject query + const query = getQuery(searchSource, params); + if (query) { + searchSource.removeField('query'); + searchSource.setField('query', query); + } + + // Inject sort + if (savedSearch.sort) { + const sort = getSortForSearchSource(savedSearch.sort as Array<[string, string]>, index); + searchSource.setField('sort', sort); + } + + return searchSource; + }; + return searchSourceFromLocator; +} + +export type SearchSourceFromLocatorFn = ReturnType; diff --git a/src/plugins/discover/server/locator/service.ts b/src/plugins/discover/server/locator/service.ts new file mode 100644 index 0000000000000..90e8b5a850a0b --- /dev/null +++ b/src/plugins/discover/server/locator/service.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 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, KibanaRequest } from '@kbn/core/server'; +import { DiscoverServerPluginLocatorService, DiscoverServerPluginStartDeps } from '..'; +import { columnsFromLocatorFactory } from './columns_from_locator'; +import { searchSourceFromLocatorFactory } from './searchsource_from_locator'; +import { titleFromLocatorFactory } from './title_from_locator'; + +export const getScopedClient = ( + core: CoreStart, + deps: DiscoverServerPluginStartDeps +): DiscoverServerPluginLocatorService => { + return { + asScopedClient: async (req: KibanaRequest) => { + const searchSourceStart = await deps.data.search.searchSource.asScoped(req); + const savedObjects = core.savedObjects.getScopedClient(req); + const uiSettings = core.uiSettings.asScopedToClient(savedObjects); + const services = { searchSourceStart, savedObjects, uiSettings }; + + return { + columnsFromLocator: columnsFromLocatorFactory(services), + searchSourceFromLocator: searchSourceFromLocatorFactory(services), + titleFromLocator: titleFromLocatorFactory(services), + }; + }, + }; +}; diff --git a/src/plugins/discover/server/locator/title_from_locator.test.ts b/src/plugins/discover/server/locator/title_from_locator.test.ts new file mode 100644 index 0000000000000..7328a577238e7 --- /dev/null +++ b/src/plugins/discover/server/locator/title_from_locator.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 { IUiSettingsClient, SavedObject, SavedObjectsClientContract } from '@kbn/core/server'; +import { coreMock, httpServerMock } from '@kbn/core/server/mocks'; +import { ISearchStartSearchSource } from '@kbn/data-plugin/common'; +import { dataPluginMock } from '@kbn/data-plugin/server/mocks'; +import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; +import { LocatorServicesDeps as Services } from '.'; +import { DiscoverAppLocatorParams, DOC_HIDE_TIME_COLUMN_SETTING } from '../../common'; +import { titleFromLocatorFactory } from './title_from_locator'; + +const mockSavedSearchId = 'abc-test-123'; +const defaultSavedSearch: SavedObject = { + type: 'search', + id: mockSavedSearchId, + references: [ + { id: '90943e30-9a47-11e8-b64d-95841ca0b247', name: 'testIndexRefName', type: 'index-pattern' }, + ], + attributes: { + title: '[Logs] Visits', + description: '', + columns: ['response', 'url', 'clientip', 'machine.os', 'tags'], + sort: [['test', '134']] as unknown as [], + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"query":{"query":"","language":"kuery"},"filter":[],"indexRefName":"testIndexRefName"}', + }, + } as unknown as SavedSearchAttributes, +}; + +const coreStart = coreMock.createStart(); +let uiSettingsClient: IUiSettingsClient; +let soClient: SavedObjectsClientContract; +let searchSourceStart: ISearchStartSearchSource; +let mockServices: Services; +let mockSavedSearch: SavedObject; + +// mock params containing the discover app locator +let mockPayload: Array<{ params: DiscoverAppLocatorParams }>; + +beforeAll(async () => { + const dataStartMock = dataPluginMock.createStartContract(); + const request = httpServerMock.createKibanaRequest(); + soClient = coreStart.savedObjects.getScopedClient(request); + uiSettingsClient = coreMock.createStart().uiSettings.asScopedToClient(soClient); + searchSourceStart = await dataStartMock.search.searchSource.asScoped(request); + + mockServices = { + searchSourceStart, + savedObjects: soClient, + uiSettings: uiSettingsClient, + }; + + const soClientGet = soClient.get; + soClient.get = jest.fn().mockImplementation((type, id) => { + if (id === mockSavedSearchId) return mockSavedSearch; + return soClientGet(type, id); + }); +}); + +beforeEach(() => { + mockPayload = [{ params: { savedSearchId: mockSavedSearchId } }]; + mockSavedSearch = { ...defaultSavedSearch, attributes: { ...defaultSavedSearch.attributes } }; + const uiSettingsGet = uiSettingsClient.get; + uiSettingsClient.get = jest.fn().mockImplementation((key: string) => { + if (key === DOC_HIDE_TIME_COLUMN_SETTING) { + return false; // this is the default for the real setting + } + return uiSettingsGet(key); + }); +}); + +test(`retrieves title from DiscoverAppLocatorParams`, async () => { + const testTitle = 'Test Title from DiscoverAppLocatorParams'; + mockPayload = [{ params: { title: testTitle } }]; + + const provider = titleFromLocatorFactory(mockServices); + const title = await provider(mockPayload[0].params); + expect(title).toBe(testTitle); +}); + +test(`retrieves title from saved search contents`, async () => { + const testTitle = 'Test Title from Saved Search Contents'; + mockSavedSearch = { + ...defaultSavedSearch, + attributes: { ...defaultSavedSearch.attributes, title: testTitle }, + }; + + const provider = titleFromLocatorFactory(mockServices); + const title = await provider(mockPayload[0].params); + expect(title).toBe(testTitle); +}); + +test(`throws error if DiscoverAppLocatorParams do not contain a saved search ID`, async () => { + const testFn = async () => { + mockPayload = [{ params: { dataViewId: 'not-yet-supported' } }]; + const provider = titleFromLocatorFactory(mockServices); + return await provider(mockPayload[0].params); + }; + + expect(testFn).rejects.toEqual( + new Error('DiscoverAppLocatorParams must contain a saved search reference') + ); +}); diff --git a/src/plugins/discover/server/locator/title_from_locator.ts b/src/plugins/discover/server/locator/title_from_locator.ts new file mode 100644 index 0000000000000..4b2d91269146c --- /dev/null +++ b/src/plugins/discover/server/locator/title_from_locator.ts @@ -0,0 +1,56 @@ +/* + * Copyright 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 { i18n } from '@kbn/i18n'; +import { SavedObject } from '@kbn/core/server'; +import { LocatorServicesDeps } from '.'; +import { DiscoverAppLocatorParams } from '../../common'; + +/** + * @internal + */ +export const titleFromLocatorFactory = (services: LocatorServicesDeps) => { + /** + * Allows consumers to derive a title of a search in Disocver from DiscoverAppLocatorParams. + * For now, this assumes the DiscoverAppLocatorParams contain a reference to a saved search. In the future, + * the params may only contain a reference to a DataView + * + * @public + */ + const titleFromLocator = async (params: DiscoverAppLocatorParams): Promise => { + const { savedSearchId, title: paramsTitle } = params as { + savedSearchId?: string; + title?: string; + }; + + if (paramsTitle) { + return paramsTitle; + } + + if (!savedSearchId) { + throw new Error(`DiscoverAppLocatorParams must contain a saved search reference`); + } + + const { savedObjects } = services; + const searchObject: SavedObject<{ title?: string }> = await savedObjects.get( + 'search', + savedSearchId // assumes params contains saved search reference + ); + + return ( + searchObject.attributes.title ?? + i18n.translate('discover.serverLocatorExtension.titleFromLocatorUnknown', { + defaultMessage: 'Unknown search', + }) + ); + }; + + return titleFromLocator; +}; + +export type TitleFromLocatorFn = ReturnType; diff --git a/src/plugins/discover/server/mocks.ts b/src/plugins/discover/server/mocks.ts new file mode 100644 index 0000000000000..34c8dc02ff3cd --- /dev/null +++ b/src/plugins/discover/server/mocks.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 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 { DiscoverServerPluginStart } from '.'; +import { createLocatorServiceMock } from './locator/mocks'; + +export const discoverPluginMock = { + createStartContract: (): DiscoverServerPluginStart => ({ + locator: createLocatorServiceMock(), + }), +}; diff --git a/src/plugins/discover/server/plugin.ts b/src/plugins/discover/server/plugin.ts index a2ee1d79b6a17..666ab85ad2105 100644 --- a/src/plugins/discover/server/plugin.ts +++ b/src/plugins/discover/server/plugin.ts @@ -6,17 +6,21 @@ * Side Public License, v 1. */ -import { CoreSetup, CoreStart, Plugin } from '@kbn/core/server'; +import type { CoreSetup, CoreStart, Plugin } from '@kbn/core/server'; import type { PluginSetup as DataPluginSetup } from '@kbn/data-plugin/server'; import type { HomeServerPluginSetup } from '@kbn/home-plugin/server'; -import { SharePluginSetup } from '@kbn/share-plugin/server'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/common'; -import { getUiSettings } from './ui_settings'; +import type { SharePluginSetup } from '@kbn/share-plugin/server'; +import type { DiscoverServerPluginStart, DiscoverServerPluginStartDeps } from '.'; +import { DiscoverAppLocatorDefinition } from '../common/locator'; import { capabilitiesProvider } from './capabilities_provider'; +import { initializeLocatorServices } from './locator'; import { registerSampleData } from './sample_data'; -import { DiscoverAppLocatorDefinition } from '../common/locator'; +import { getUiSettings } from './ui_settings'; -export class DiscoverServerPlugin implements Plugin { +export class DiscoverServerPlugin + implements Plugin +{ public setup( core: CoreSetup, plugins: { @@ -41,8 +45,8 @@ export class DiscoverServerPlugin implements Plugin { return {}; } - public start(core: CoreStart) { - return {}; + public start(core: CoreStart, deps: DiscoverServerPluginStartDeps) { + return { locator: initializeLocatorServices(core, deps) }; } public stop() {} diff --git a/src/plugins/saved_search/common/index.ts b/src/plugins/saved_search/common/index.ts index 014fdb31ed438..8eac1650434d8 100644 --- a/src/plugins/saved_search/common/index.ts +++ b/src/plugins/saved_search/common/index.ts @@ -7,3 +7,16 @@ */ export { getSavedSearchUrl, getSavedSearchFullPathUrl } from './saved_searches_url'; +export { fromSavedSearchAttributes } from './saved_searches_utils'; + +export type { + DiscoverGridSettings, + DiscoverGridSettingsColumn, + SavedSearch, + SavedSearchAttributes, +} from './types'; + +export enum VIEW_MODE { + DOCUMENT_LEVEL = 'documents', + AGGREGATED_LEVEL = 'aggregated', +} diff --git a/src/plugins/saved_search/common/saved_searches_utils.ts b/src/plugins/saved_search/common/saved_searches_utils.ts new file mode 100644 index 0000000000000..41934b86a36d5 --- /dev/null +++ b/src/plugins/saved_search/common/saved_searches_utils.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 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 { SavedSearch, SavedSearchAttributes } from '.'; + +export const fromSavedSearchAttributes = ( + id: string, + attributes: SavedSearchAttributes, + tags: string[] | undefined, + searchSource: SavedSearch['searchSource'] +): SavedSearch => ({ + id, + searchSource, + title: attributes.title, + sort: attributes.sort, + columns: attributes.columns, + description: attributes.description, + tags, + grid: attributes.grid, + hideChart: attributes.hideChart, + viewMode: attributes.viewMode, + hideAggregatedPreview: attributes.hideAggregatedPreview, + rowHeight: attributes.rowHeight, + isTextBasedQuery: attributes.isTextBasedQuery, + usesAdHocDataView: attributes.usesAdHocDataView, + timeRestore: attributes.timeRestore, + timeRange: attributes.timeRange, + refreshInterval: attributes.refreshInterval, + rowsPerPage: attributes.rowsPerPage, + breakdownField: attributes.breakdownField, +}); diff --git a/src/plugins/saved_search/common/types.ts b/src/plugins/saved_search/common/types.ts new file mode 100644 index 0000000000000..630323413fcb3 --- /dev/null +++ b/src/plugins/saved_search/common/types.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 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 { ISearchSource, RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; +import { VIEW_MODE } from '.'; + +export interface DiscoverGridSettings { + columns?: Record; +} + +export interface DiscoverGridSettingsColumn { + width?: number; +} + +/** @internal **/ +export interface SavedSearchAttributes { + title: string; + sort: Array<[string, string]>; + columns: string[]; + description: string; + grid: { + columns?: Record; + }; + hideChart: boolean; + isTextBasedQuery: boolean; + usesAdHocDataView?: boolean; + kibanaSavedObjectMeta: { + searchSourceJSON: string; + }; + viewMode?: VIEW_MODE; + hideAggregatedPreview?: boolean; + rowHeight?: number; + + timeRestore?: boolean; + timeRange?: TimeRange; + refreshInterval?: RefreshInterval; + + rowsPerPage?: number; + breakdownField?: string; +} + +/** @internal **/ +export type SortOrder = [string, string]; + +/** @public **/ +export interface SavedSearch { + searchSource: ISearchSource; + id?: string; + title?: string; + sort?: SortOrder[]; + columns?: string[]; + description?: string; + tags?: string[] | undefined; + grid?: { + columns?: Record; + }; + hideChart?: boolean; + viewMode?: VIEW_MODE; + hideAggregatedPreview?: boolean; + rowHeight?: number; + isTextBasedQuery?: boolean; + usesAdHocDataView?: boolean; + + // for restoring time range with a saved search + timeRestore?: boolean; + timeRange?: TimeRange; + refreshInterval?: RefreshInterval; + + rowsPerPage?: number; + breakdownField?: string; +} diff --git a/src/plugins/saved_search/public/index.ts b/src/plugins/saved_search/public/index.ts index 047d663b16caa..506e90825209a 100644 --- a/src/plugins/saved_search/public/index.ts +++ b/src/plugins/saved_search/public/index.ts @@ -6,7 +6,8 @@ * Side Public License, v 1. */ -export type { SavedSearch, SaveSavedSearchOptions, SortOrder } from './services/saved_searches'; +export type { SortOrder } from '../common/types'; +export type { SavedSearch, SaveSavedSearchOptions } from './services/saved_searches'; export { getSavedSearch, getSavedSearchFullPathUrl, @@ -15,11 +16,7 @@ export { throwErrorOnSavedSearchUrlConflict, saveSavedSearch, } from './services/saved_searches'; -export type { - DiscoverGridSettings, - DiscoverGridSettingsColumn, -} from './services/saved_searches/types'; -export { VIEW_MODE } from './services/saved_searches/types'; +export { VIEW_MODE } from '../common'; export function plugin() { return { diff --git a/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts b/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts index 59f2104adbcad..0cae15e729209 100644 --- a/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts +++ b/src/plugins/saved_search/public/services/saved_searches/get_saved_searches.ts @@ -12,8 +12,8 @@ import { injectSearchSourceReferences, parseSearchSourceJSON } from '@kbn/data-p import { SavedObjectNotFound } from '@kbn/kibana-utils-plugin/public'; import type { SpacesApi } from '@kbn/spaces-plugin/public'; import type { SavedObjectsTaggingApi } from '@kbn/saved-objects-tagging-oss-plugin/public'; -import type { SavedSearchAttributes, SavedSearch } from './types'; - +import type { SavedSearchAttributes } from '../../../common'; +import type { SavedSearch } from './types'; import { SAVED_SEARCH_TYPE } from './constants'; import { fromSavedSearchAttributes } from './saved_searches_utils'; diff --git a/src/plugins/saved_search/public/services/saved_searches/index.ts b/src/plugins/saved_search/public/services/saved_searches/index.ts index fbdcfbf5793c6..3aa4120e19e78 100644 --- a/src/plugins/saved_search/public/services/saved_searches/index.ts +++ b/src/plugins/saved_search/public/services/saved_searches/index.ts @@ -16,4 +16,4 @@ export { export type { SaveSavedSearchOptions } from './save_saved_searches'; export { saveSavedSearch } from './save_saved_searches'; export { SAVED_SEARCH_TYPE } from './constants'; -export type { SavedSearch, SortOrder } from './types'; +export type { SavedSearch } from './types'; diff --git a/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts b/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts index 029d738096859..a7d11ab69166e 100644 --- a/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts +++ b/src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts @@ -7,8 +7,8 @@ */ import type { SavedObjectsClientContract, SavedObjectsStart } from '@kbn/core/public'; import type { SavedObjectsTaggingApi } from '@kbn/saved-objects-tagging-oss-plugin/public'; -import type { SavedSearch, SavedSearchAttributes } from './types'; - +import type { SavedSearchAttributes } from '../../../common'; +import type { SavedSearch } from './types'; import { SAVED_SEARCH_TYPE } from './constants'; import { toSavedSearchAttributes } from './saved_searches_utils'; diff --git a/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.test.ts b/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.test.ts index feabac408c116..511385276ab11 100644 --- a/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.test.ts +++ b/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.test.ts @@ -14,7 +14,8 @@ import { import { createSearchSourceMock } from '@kbn/data-plugin/public/mocks'; -import type { SavedSearchAttributes, SavedSearch } from './types'; +import type { SavedSearchAttributes } from '../../../common'; +import type { SavedSearch } from './types'; describe('saved_searches_utils', () => { describe('fromSavedSearchAttributes', () => { diff --git a/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.ts b/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.ts index 83286f455d8c4..3a05572935281 100644 --- a/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.ts +++ b/src/plugins/saved_search/public/services/saved_searches/saved_searches_utils.ts @@ -6,7 +6,9 @@ * Side Public License, v 1. */ import { i18n } from '@kbn/i18n'; -import type { SavedSearchAttributes, SavedSearch } from './types'; +import type { SavedSearchAttributes } from '../../../common'; +import { fromSavedSearchAttributes as fromSavedSearchAttributesCommon } from '../../../common'; +import type { SavedSearch } from './types'; export { getSavedSearchUrl, getSavedSearchFullPathUrl } from '../../../common'; @@ -31,26 +33,8 @@ export const fromSavedSearchAttributes = ( searchSource: SavedSearch['searchSource'], sharingSavedObjectProps: SavedSearch['sharingSavedObjectProps'] ): SavedSearch => ({ - id, - searchSource, + ...fromSavedSearchAttributesCommon(id, attributes, tags, searchSource), sharingSavedObjectProps, - title: attributes.title, - sort: attributes.sort, - columns: attributes.columns, - description: attributes.description, - tags, - grid: attributes.grid, - hideChart: attributes.hideChart, - viewMode: attributes.viewMode, - hideAggregatedPreview: attributes.hideAggregatedPreview, - rowHeight: attributes.rowHeight, - isTextBasedQuery: attributes.isTextBasedQuery, - usesAdHocDataView: attributes.usesAdHocDataView, - timeRestore: attributes.timeRestore, - timeRange: attributes.timeRange, - refreshInterval: attributes.refreshInterval, - rowsPerPage: attributes.rowsPerPage, - breakdownField: attributes.breakdownField, }); export const toSavedSearchAttributes = ( diff --git a/src/plugins/saved_search/public/services/saved_searches/types.ts b/src/plugins/saved_search/public/services/saved_searches/types.ts index f4e5ebecd559f..2850b479cb114 100644 --- a/src/plugins/saved_search/public/services/saved_searches/types.ts +++ b/src/plugins/saved_search/public/services/saved_searches/types.ts @@ -7,81 +7,14 @@ */ import type { ResolvedSimpleSavedObject } from '@kbn/core/public'; -import type { ISearchSource, RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; - -export enum VIEW_MODE { - DOCUMENT_LEVEL = 'documents', - AGGREGATED_LEVEL = 'aggregated', -} - -export interface DiscoverGridSettings { - columns?: Record; -} - -export interface DiscoverGridSettingsColumn { - width?: number; -} - -/** @internal **/ -export interface SavedSearchAttributes { - title: string; - sort: Array<[string, string]>; - columns: string[]; - description: string; - grid: { - columns?: Record; - }; - hideChart: boolean; - isTextBasedQuery: boolean; - usesAdHocDataView?: boolean; - kibanaSavedObjectMeta: { - searchSourceJSON: string; - }; - viewMode?: VIEW_MODE; - hideAggregatedPreview?: boolean; - rowHeight?: number; - - timeRestore?: boolean; - timeRange?: TimeRange; - refreshInterval?: RefreshInterval; - - rowsPerPage?: number; - breakdownField?: string; -} - -/** @internal **/ -export type SortOrder = [string, string]; +import { SavedSearch as SavedSearchCommon } from '../../../common'; /** @public **/ -export interface SavedSearch { - searchSource: ISearchSource; - id?: string; - title?: string; - sort?: SortOrder[]; - columns?: string[]; - description?: string; - tags?: string[] | undefined; - grid?: { - columns?: Record; - }; - hideChart?: boolean; +export interface SavedSearch extends SavedSearchCommon { sharingSavedObjectProps?: { outcome?: ResolvedSimpleSavedObject['outcome']; aliasTargetId?: ResolvedSimpleSavedObject['alias_target_id']; aliasPurpose?: ResolvedSimpleSavedObject['alias_purpose']; errorJSON?: string; }; - viewMode?: VIEW_MODE; - hideAggregatedPreview?: boolean; - rowHeight?: number; - isTextBasedQuery?: boolean; - usesAdHocDataView?: boolean; - - // for restoring time range with a saved search - timeRestore?: boolean; - timeRange?: TimeRange; - refreshInterval?: RefreshInterval; - - rowsPerPage?: number; - breakdownField?: string; } diff --git a/src/plugins/saved_search/server/index.ts b/src/plugins/saved_search/server/index.ts index 4ec3dc6fea491..b125cf3d1fe52 100644 --- a/src/plugins/saved_search/server/index.ts +++ b/src/plugins/saved_search/server/index.ts @@ -8,4 +8,6 @@ import { SavedSearchServerPlugin } from './plugin'; +export { getSavedSearch } from './services/saved_searches'; + export const plugin = () => new SavedSearchServerPlugin(); diff --git a/src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts b/src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts new file mode 100644 index 0000000000000..6a097481b67b3 --- /dev/null +++ b/src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts @@ -0,0 +1,43 @@ +/* + * Copyright 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 { SavedObject, SavedObjectsClientContract } from '@kbn/core/server'; +import { + injectReferences, + ISearchStartSearchSource, + parseSearchSourceJSON, +} from '@kbn/data-plugin/common'; +import { fromSavedSearchAttributes, SavedSearchAttributes } from '../../../common'; + +interface GetSavedSearchDependencies { + savedObjects: SavedObjectsClientContract; + searchSourceStart: ISearchStartSearchSource; +} + +export const getSavedSearch = async (savedSearchId: string, deps: GetSavedSearchDependencies) => { + const savedSearch: SavedObject = await deps.savedObjects.get( + 'search', + savedSearchId + ); + + const parsedSearchSourceJSON = parseSearchSourceJSON( + savedSearch.attributes.kibanaSavedObjectMeta?.searchSourceJSON ?? '{}' + ); + + const searchSourceValues = injectReferences( + parsedSearchSourceJSON as Parameters[0], + savedSearch.references + ); + + return fromSavedSearchAttributes( + savedSearchId, + savedSearch.attributes, + undefined, + await deps.searchSourceStart.create(searchSourceValues) + ); +}; diff --git a/src/plugins/saved_search/server/services/saved_searches/index.ts b/src/plugins/saved_search/server/services/saved_searches/index.ts new file mode 100644 index 0000000000000..16aa47551fbe6 --- /dev/null +++ b/src/plugins/saved_search/server/services/saved_searches/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright 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 { getSavedSearch } from './get_saved_searches'; From 2406ada16a65b94812f8ca735c5f014a289357cc Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Thu, 16 Feb 2023 20:03:27 +0100 Subject: [PATCH 099/210] Increase flatten performance of SearchSource (#150658) --- .../search/search_source/search_source.ts | 54 ++++++++----------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/src/plugins/data/common/search/search_source/search_source.ts b/src/plugins/data/common/search/search_source/search_source.ts index be7bef0339f3f..0ba2c77c8c016 100644 --- a/src/plugins/data/common/search/search_source/search_source.ts +++ b/src/plugins/data/common/search/search_source/search_source.ts @@ -59,17 +59,7 @@ */ import { setWith } from '@kbn/safer-lodash-set'; -import { - difference, - isEqual, - isFunction, - isObject, - keyBy, - pick, - uniqueId, - uniqWith, - concat, -} from 'lodash'; +import { difference, isEqual, isFunction, isObject, keyBy, pick, uniqueId, concat } from 'lodash'; import { catchError, finalize, @@ -889,28 +879,28 @@ export class SearchSource { // inject the format from the computed fields if one isn't given const docvaluesIndex = keyBy(filteredDocvalueFields, 'field'); const bodyFields = this.getFieldsWithoutSourceFilters(index, body.fields); - body.fields = uniqWith( - bodyFields.concat(filteredDocvalueFields), - (fld1: SearchFieldValue, fld2: SearchFieldValue) => { - const field1Name = this.getFieldName(fld1); - const field2Name = this.getFieldName(fld2); - return field1Name === field2Name; + + const uniqueFieldNames = new Set(); + const uniqueFields = []; + for (const field of bodyFields.concat(filteredDocvalueFields)) { + const fieldName = this.getFieldName(field); + if (metaFields.includes(fieldName) || uniqueFieldNames.has(fieldName)) { + continue; } - ) - .filter((fld: SearchFieldValue) => { - return !metaFields.includes(this.getFieldName(fld)); - }) - .map((fld: SearchFieldValue) => { - const fieldName = this.getFieldName(fld); - if (Object.keys(docvaluesIndex).includes(fieldName)) { - // either provide the field object from computed docvalues, - // or merge the user-provided field with the one in docvalues - return typeof fld === 'string' - ? docvaluesIndex[fld] - : this.getFieldFromDocValueFieldsOrIndexPattern(docvaluesIndex, fld, index); - } - return fld; - }); + uniqueFieldNames.add(fieldName); + if (Object.keys(docvaluesIndex).includes(fieldName)) { + // either provide the field object from computed docvalues, + // or merge the user-provided field with the one in docvalues + uniqueFields.push( + typeof field === 'string' + ? docvaluesIndex[field] + : this.getFieldFromDocValueFieldsOrIndexPattern(docvaluesIndex, field, index) + ); + } else { + uniqueFields.push(field); + } + } + body.fields = uniqueFields; } } else { body.fields = filteredDocvalueFields; From ccd78c9f0e6898544a824682c47465a64e3632a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Thu, 16 Feb 2023 14:09:48 -0500 Subject: [PATCH 100/210] Single view in app function for rule actions variables and UI page (#148671) Resolves: https://github.com/elastic/kibana/issues/145132. In this PR, I'm adding a new function to the server-side rule type definition called `viewInAppRelativeUrl`. This function returns a relative path to view the rule in the proper application that will provide more context. This relative path is used to build the `rule.url` mustache variable for the actions (overriding the rule details page link when defined) as well as a fallback for the UI's `View in App` button if no navigation is registered on the front-end. Follow up issues: - https://github.com/elastic/kibana/issues/149608 - https://github.com/elastic/kibana/issues/151355 ## ML to verify 1. Create an anomaly detection rule from the ML application 2. Go to stack management rule details page 3. Click "View in App" 4. Ensure it brings you to the ML app properly. 5. Repeat step 1 to 4 in a space that isn't the default Note: ML won't take advantage of the new functionality yet, but we plan to help in a follow up https://github.com/elastic/kibana/issues/149608 so that ML anomaly detection rules can provide a view in app URL within the rule action messages. ## ResponseOps to verify 1. Set `server.publicBaseUrl` to the proper value in your kibana.yml 6. Modify the [index threshold rule type](https://github.com/elastic/kibana/blob/main/x-pack/plugins/stack_alerts/server/rule_types/index_threshold/rule_type.ts#L108-L136) to have a `getViewInAppRelativeUrl` function returning `/app/management/insightsAndAlerting/triggersActionsConnectors/connectors`. 7. Create an index threshold rule that always fires. Make sure to add a a server log action that contains the `{{rule.url}}` variable. 8. Pull the printed URL from the server logs and make sure it works and brings you to the connectors page. 9. Navigate to the rule details page, click the "View in App" button and ensure it also brings you to the connectors page. 10. Create a Kibana space. 11. Go into that created space and repeat step 3 to 5. Ensure the URL and View in App keep you in the same space. --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../public/alert_types/astros.tsx | 2 +- .../public/alert_types/index.ts | 2 +- .../server/alert_types/astros.ts | 3 ++ x-pack/plugins/alerting/README.md | 2 +- x-pack/plugins/alerting/common/index.ts | 1 - x-pack/plugins/alerting/common/rule.ts | 1 + .../alerting/common/rule_navigation.ts | 15 ------- .../alert_navigation_registry.test.ts | 10 ++--- .../public/alert_navigation_registry/types.ts | 3 +- .../public/lib/common_transformations.ts | 2 + x-pack/plugins/alerting/public/plugin.test.ts | 35 ++++++++++++++++ x-pack/plugins/alerting/public/plugin.ts | 19 ++++++--- .../alerting/server/routes/get_rule.ts | 2 + .../common/calculate_is_snoozed_until.ts | 17 -------- .../server/rules_client/common/index.ts | 1 - .../rules_client/lib/get_alert_from_raw.ts | 42 +++++++++++++------ .../task_runner/execution_handler.test.ts | 33 +++++++++++++++ .../server/task_runner/execution_handler.ts | 10 +++-- x-pack/plugins/alerting/server/types.ts | 8 ++++ .../ml/public/alerting/register_ml_alerts.ts | 2 +- .../public/rule_types/es_query/index.ts | 2 +- .../application/lib/action_variables.test.ts | 4 +- .../application/lib/action_variables.ts | 2 +- .../rule_details/components/view_in_app.tsx | 25 ++++------- .../plugins/alerts/public/plugin.ts | 2 +- 25 files changed, 156 insertions(+), 89 deletions(-) delete mode 100644 x-pack/plugins/alerting/common/rule_navigation.ts create mode 100644 x-pack/plugins/alerting/public/plugin.test.ts delete mode 100644 x-pack/plugins/alerting/server/rules_client/common/calculate_is_snoozed_until.ts diff --git a/x-pack/examples/alerting_example/public/alert_types/astros.tsx b/x-pack/examples/alerting_example/public/alert_types/astros.tsx index eee4e92b623f7..6155959024053 100644 --- a/x-pack/examples/alerting_example/public/alert_types/astros.tsx +++ b/x-pack/examples/alerting_example/public/alert_types/astros.tsx @@ -28,7 +28,7 @@ export function registerNavigation(alerting: AlertingSetup) { alerting.registerNavigation( ALERTING_EXAMPLE_APP_ID, 'example.people-in-space', - (rule: SanitizedRule) => `/astros/${rule.id}` + (rule: SanitizedRule) => `/app/${ALERTING_EXAMPLE_APP_ID}/astros/${rule.id}` ); } diff --git a/x-pack/examples/alerting_example/public/alert_types/index.ts b/x-pack/examples/alerting_example/public/alert_types/index.ts index 4cb30b9f4df02..44712b69fb34b 100644 --- a/x-pack/examples/alerting_example/public/alert_types/index.ts +++ b/x-pack/examples/alerting_example/public/alert_types/index.ts @@ -14,7 +14,7 @@ export function registerNavigation(alerting: AlertingSetup) { // register default navigation alerting.registerDefaultNavigation( ALERTING_EXAMPLE_APP_ID, - (rule: SanitizedRule) => `/rule/${rule.id}` + (rule: SanitizedRule) => `/app/${ALERTING_EXAMPLE_APP_ID}/rule/${rule.id}` ); registerPeopleInSpaceNavigation(alerting); diff --git a/x-pack/examples/alerting_example/server/alert_types/astros.ts b/x-pack/examples/alerting_example/server/alert_types/astros.ts index 64accdc550298..c73ec8ecbc8bf 100644 --- a/x-pack/examples/alerting_example/server/alert_types/astros.ts +++ b/x-pack/examples/alerting_example/server/alert_types/astros.ts @@ -81,4 +81,7 @@ export const alertType: RuleType< }; }, producer: ALERTING_EXAMPLE_APP_ID, + getViewInAppRelativeUrl({ rule }) { + return `/app/${ALERTING_EXAMPLE_APP_ID}/astros/${rule.id}`; + }, }; diff --git a/x-pack/plugins/alerting/README.md b/x-pack/plugins/alerting/README.md index 858e79e30c7ae..f547c05e52e09 100644 --- a/x-pack/plugins/alerting/README.md +++ b/x-pack/plugins/alerting/README.md @@ -695,7 +695,7 @@ alerting.registerNavigation( This tells the Alerting Framework that, given a rule of the RuleType whose ID is `my-application-id.my-unique-rule-type`, if that rule's `consumer` value (which is set when the rule is created by your plugin) is your application (whose id is `my-application-id`), then it will navigate to your application using the path `/my-unique-rule/${the id of the rule}`. -The navigation is handled using the `navigateToApp` API, meaning that the path will be automatically picked up by your `react-router-dom` **Route** component, so all you have top do is configure a Route that handles the path `/my-unique-rule/:id`. +The navigation is handled using the `navigateToUrl` API, meaning that the path will be automatically picked up by your `react-router-dom` **Route** component, so all you have top do is configure a Route that handles the path `/my-unique-rule/:id`. You can look at the `alerting-example` plugin to see an example of using this API, which is enabled using the `--run-examples` flag when you run `yarn start`. diff --git a/x-pack/plugins/alerting/common/index.ts b/x-pack/plugins/alerting/common/index.ts index 9a977213d4446..fafadcdb99ee4 100644 --- a/x-pack/plugins/alerting/common/index.ts +++ b/x-pack/plugins/alerting/common/index.ts @@ -14,7 +14,6 @@ export * from './rule'; export * from './rules_settings'; export * from './rule_type'; export * from './rule_task_instance'; -export * from './rule_navigation'; export * from './alert_instance'; export * from './alert_summary'; export * from './builtin_action_groups'; diff --git a/x-pack/plugins/alerting/common/rule.ts b/x-pack/plugins/alerting/common/rule.ts index f548441713420..833d514df1f86 100644 --- a/x-pack/plugins/alerting/common/rule.ts +++ b/x-pack/plugins/alerting/common/rule.ts @@ -147,6 +147,7 @@ export interface Rule { lastRun?: RuleLastRun | null; nextRun?: Date | null; running?: boolean | null; + viewInAppRelativeUrl?: string; } export type SanitizedRule = Omit, 'apiKey'>; diff --git a/x-pack/plugins/alerting/common/rule_navigation.ts b/x-pack/plugins/alerting/common/rule_navigation.ts deleted file mode 100644 index abc109a31c432..0000000000000 --- a/x-pack/plugins/alerting/common/rule_navigation.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { JsonObject } from '@kbn/utility-types'; -export interface RuleUrlNavigation { - path: string; -} -export interface RuleStateNavigation { - state: JsonObject; -} -export type RuleNavigation = RuleUrlNavigation | RuleStateNavigation; diff --git a/x-pack/plugins/alerting/public/alert_navigation_registry/alert_navigation_registry.test.ts b/x-pack/plugins/alerting/public/alert_navigation_registry/alert_navigation_registry.test.ts index bedb17270a477..c7bb9a4feb8ba 100644 --- a/x-pack/plugins/alerting/public/alert_navigation_registry/alert_navigation_registry.test.ts +++ b/x-pack/plugins/alerting/public/alert_navigation_registry/alert_navigation_registry.test.ts @@ -31,7 +31,7 @@ const mockRuleType = (id: string): RuleType => ({ describe('AlertNavigationRegistry', () => { function handler(rule: SanitizedRule) { - return {}; + return ''; } describe('has()', () => { @@ -151,7 +151,7 @@ describe('AlertNavigationRegistry', () => { const registry = new AlertNavigationRegistry(); function indexThresholdHandler(rule: SanitizedRule) { - return {}; + return ''; } const indexThresholdRuleType = mockRuleType('indexThreshold'); @@ -163,7 +163,7 @@ describe('AlertNavigationRegistry', () => { const registry = new AlertNavigationRegistry(); function defaultHandler(rule: SanitizedRule) { - return {}; + return ''; } registry.registerDefault('siem', defaultHandler); @@ -173,10 +173,10 @@ describe('AlertNavigationRegistry', () => { test('returns default handlers by consumer when there are other rule type handler', () => { const registry = new AlertNavigationRegistry(); - registry.register('siem', mockRuleType('indexThreshold').id, () => ({})); + registry.register('siem', mockRuleType('indexThreshold').id, () => ''); function defaultHandler(rule: SanitizedRule) { - return {}; + return ''; } registry.registerDefault('siem', defaultHandler); diff --git a/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts b/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts index 3c7b7aa3c8c06..405f040d5b3ae 100644 --- a/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts +++ b/x-pack/plugins/alerting/public/alert_navigation_registry/types.ts @@ -5,7 +5,6 @@ * 2.0. */ -import { JsonObject } from '@kbn/utility-types'; import { SanitizedRule } from '../../common'; /** @@ -17,4 +16,4 @@ import { SanitizedRule } from '../../common'; * originally registered to {@link PluginSetupContract.registerNavigation}. * */ -export type AlertNavigationHandler = (rule: SanitizedRule) => JsonObject | string; +export type AlertNavigationHandler = (rule: SanitizedRule) => string; diff --git a/x-pack/plugins/alerting/public/lib/common_transformations.ts b/x-pack/plugins/alerting/public/lib/common_transformations.ts index 6a89b1ce9958b..b123962bb4ea7 100644 --- a/x-pack/plugins/alerting/public/lib/common_transformations.ts +++ b/x-pack/plugins/alerting/public/lib/common_transformations.ts @@ -118,6 +118,7 @@ export function transformRule(input: ApiRule): Rule { next_run: nextRun, last_run: lastRun, monitoring: monitoring, + view_in_app_relative_url: viewInAppRelativeUrl, ...rest } = input; @@ -135,6 +136,7 @@ export function transformRule(input: ApiRule): Rule { executionStatus: transformExecutionStatus(executionStatusAPI), actions: actionsAPI ? actionsAPI.map((action) => transformAction(action)) : [], scheduledTaskId, + ...(viewInAppRelativeUrl ? { viewInAppRelativeUrl } : {}), ...(nextRun ? { nextRun: new Date(nextRun) } : {}), ...(monitoring ? { monitoring: transformMonitoring(monitoring) } : {}), ...(lastRun ? { lastRun: transformLastRun(lastRun) } : {}), diff --git a/x-pack/plugins/alerting/public/plugin.test.ts b/x-pack/plugins/alerting/public/plugin.test.ts new file mode 100644 index 0000000000000..fce03fa48ce0e --- /dev/null +++ b/x-pack/plugins/alerting/public/plugin.test.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 { AlertingPublicPlugin } from './plugin'; +import { coreMock } from '@kbn/core/public/mocks'; + +jest.mock('./alert_api', () => ({ + loadRule: jest.fn(), + loadRuleType: jest.fn(), +})); + +describe('Alerting Public Plugin', () => { + describe('start()', () => { + it(`should fallback to the viewInAppRelativeUrl part of the rule object if navigation isn't registered`, async () => { + const { loadRule, loadRuleType } = jest.requireMock('./alert_api'); + loadRule.mockResolvedValue({ + alertTypeId: 'foo', + consumer: 'abc', + viewInAppRelativeUrl: '/my/custom/path', + }); + loadRuleType.mockResolvedValue({}); + + const plugin = new AlertingPublicPlugin(); + plugin.setup(); + const pluginStart = plugin.start(coreMock.createStart()); + + const navigationPath = await pluginStart.getNavigation('123'); + expect(navigationPath).toEqual('/my/custom/path'); + }); + }); +}); diff --git a/x-pack/plugins/alerting/public/plugin.ts b/x-pack/plugins/alerting/public/plugin.ts index 57ab4172b4689..2e29a40b7dba0 100644 --- a/x-pack/plugins/alerting/public/plugin.ts +++ b/x-pack/plugins/alerting/public/plugin.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { CoreSetup, Plugin, CoreStart } from '@kbn/core/public'; +import { Plugin, CoreStart } from '@kbn/core/public'; import { AlertNavigationRegistry, AlertNavigationHandler } from './alert_navigation_registry'; import { loadRule, loadRuleType } from './alert_api'; -import { Rule, RuleNavigation } from '../common'; +import { Rule } from '../common'; export interface PluginSetupContract { /** @@ -26,6 +26,8 @@ export interface PluginSetupContract { * @param handler The navigation handler should return either a relative URL, or a state object. This information can be used, * in conjunction with the consumer id, to navigate the user to a custom URL to view a rule's details. * @throws an error if the given applicationId and ruleType combination has already been registered. + * + * @deprecated use "getViewInAppRelativeUrl" on the server side rule type instead. */ registerNavigation: ( applicationId: string, @@ -42,16 +44,18 @@ export interface PluginSetupContract { * @param applicationId The application id that the user should be navigated to, to view a particular rule in a custom way. * @param handler The navigation handler should return either a relative URL, or a state object. This information can be used, * in conjunction with the consumer id, to navigate the user to a custom URL to view a rule's details. + * + * @deprecated use "getViewInAppRelativeUrl" on the server side rule type instead. */ registerDefaultNavigation: (applicationId: string, handler: AlertNavigationHandler) => void; } export interface PluginStartContract { - getNavigation: (ruleId: Rule['id']) => Promise; + getNavigation: (ruleId: Rule['id']) => Promise; } export class AlertingPublicPlugin implements Plugin { private alertNavigationRegistry?: AlertNavigationRegistry; - public setup(core: CoreSetup) { + public setup() { this.alertNavigationRegistry = new AlertNavigationRegistry(); const registerNavigation = async ( @@ -89,8 +93,11 @@ export class AlertingPublicPlugin implements Plugin> = ({ isSnoozedUntil, lastRun, nextRun, + viewInAppRelativeUrl, ...rest }) => ({ ...rest, @@ -74,6 +75,7 @@ const rewriteBodyRes: RewriteResponseCase> = ({ })), ...(lastRun ? { last_run: rewriteRuleLastRun(lastRun) } : {}), ...(nextRun ? { next_run: nextRun } : {}), + ...(viewInAppRelativeUrl ? { view_in_app_relative_url: viewInAppRelativeUrl } : {}), }); interface BuildGetRulesRouteParams { diff --git a/x-pack/plugins/alerting/server/rules_client/common/calculate_is_snoozed_until.ts b/x-pack/plugins/alerting/server/rules_client/common/calculate_is_snoozed_until.ts deleted file mode 100644 index d77a013ae3f6b..0000000000000 --- a/x-pack/plugins/alerting/server/rules_client/common/calculate_is_snoozed_until.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; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { RuleSnooze } from '../../types'; -import { getRuleSnoozeEndTime } from '../../lib'; - -export function calculateIsSnoozedUntil(rule: { - muteAll: boolean; - snoozeSchedule?: RuleSnooze; -}): string | null { - const isSnoozedUntil = getRuleSnoozeEndTime(rule); - return isSnoozedUntil ? isSnoozedUntil.toISOString() : null; -} diff --git a/x-pack/plugins/alerting/server/rules_client/common/index.ts b/x-pack/plugins/alerting/server/rules_client/common/index.ts index 6019eb0f4307e..ab380a6ca178b 100644 --- a/x-pack/plugins/alerting/server/rules_client/common/index.ts +++ b/x-pack/plugins/alerting/server/rules_client/common/index.ts @@ -14,7 +14,6 @@ export { buildKueryNodeFilter } from './build_kuery_node_filter'; export { generateAPIKeyName } from './generate_api_key_name'; export * from './mapped_params_utils'; export { apiKeyAsAlertAttributes } from './api_key_as_alert_attributes'; -export { calculateIsSnoozedUntil } from './calculate_is_snoozed_until'; export * from './inject_references'; export { parseDate } from './parse_date'; export { includeFieldsRequiredForAuthentication } from './include_fields_required_for_authentication'; diff --git a/x-pack/plugins/alerting/server/rules_client/lib/get_alert_from_raw.ts b/x-pack/plugins/alerting/server/rules_client/lib/get_alert_from_raw.ts index 41330fe9b7eb6..59ed14ecf2735 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/get_alert_from_raw.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/get_alert_from_raw.ts @@ -16,14 +16,14 @@ import { RuleWithLegacyId, PartialRuleWithLegacyId, } from '../../types'; -import { ruleExecutionStatusFromRaw, convertMonitoringFromRawAndVerify } from '../../lib'; +import { + ruleExecutionStatusFromRaw, + convertMonitoringFromRawAndVerify, + getRuleSnoozeEndTime, +} from '../../lib'; import { UntypedNormalizedRuleType } from '../../rule_type_registry'; import { getActiveScheduledSnoozes } from '../../lib/is_rule_snoozed'; -import { - calculateIsSnoozedUntil, - injectReferencesIntoActions, - injectReferencesIntoParams, -} from '../common'; +import { injectReferencesIntoActions, injectReferencesIntoParams } from '../common'; import { RulesClientContext } from '../types'; export interface GetAlertFromRawParams { @@ -98,20 +98,20 @@ export function getPartialRuleFromRaw( ...s, rRule: { ...s.rRule, - dtstart: new Date(s.rRule.dtstart), - ...(s.rRule.until ? { until: new Date(s.rRule.until) } : {}), + dtstart: new Date(s.rRule.dtstart).toISOString(), + ...(s.rRule.until ? { until: new Date(s.rRule.until).toISOString() } : {}), }, })); const includeSnoozeSchedule = snoozeSchedule !== undefined && !isEmpty(snoozeSchedule) && !excludeFromPublicApi; const isSnoozedUntil = includeSnoozeSchedule - ? calculateIsSnoozedUntil({ + ? getRuleSnoozeEndTime({ muteAll: partialRawRule.muteAll ?? false, snoozeSchedule, }) : null; const includeMonitoring = monitoring && !excludeFromPublicApi; - const rule = { + const rule: PartialRule = { id, notifyWhen, ...omit(partialRawRule, excludeFromPublicApi ? [...context.fieldsToExcludeFromPublicApi] : ''), @@ -152,7 +152,23 @@ export function getPartialRuleFromRaw( : {}), }; - return includeLegacyId - ? ({ ...rule, legacyId } as PartialRuleWithLegacyId) - : (rule as PartialRule); + // Need the `rule` object to build a URL + if (!excludeFromPublicApi) { + const viewInAppRelativeUrl = + ruleType.getViewInAppRelativeUrl && + ruleType.getViewInAppRelativeUrl({ rule: rule as Rule }); + if (viewInAppRelativeUrl) { + rule.viewInAppRelativeUrl = viewInAppRelativeUrl; + } + } + + if (includeLegacyId) { + const result: PartialRuleWithLegacyId = { + ...rule, + legacyId, + }; + return result; + } + + return rule; } diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts index b41db1147f3b7..cc1741fe722fd 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.test.ts @@ -1472,5 +1472,38 @@ describe('Execution Handler', () => { ] `); }); + + it('sets the rule.url to the value from getViewInAppRelativeUrl when the rule type has it defined', async () => { + const execParams = { + ...defaultExecutionParams, + rule: ruleWithUrl, + taskRunnerContext: { + ...defaultExecutionParams.taskRunnerContext, + kibanaBaseUrl: 'http://localhost:12345', + }, + ruleType: { + ...ruleType, + getViewInAppRelativeUrl() { + return '/app/management/some/other/place'; + }, + }, + }; + + const executionHandler = new ExecutionHandler(generateExecutionParams(execParams)); + await executionHandler.run(generateAlert({ id: 1 })); + + expect(injectActionParamsMock.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "actionParams": Object { + "val": "rule url: http://localhost:12345/s/test1/app/management/some/other/place", + }, + "actionTypeId": "test", + "ruleId": "1", + "spaceId": "test1", + }, + ] + `); + }); }); }); diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts index d0784805c5942..9975c8f9e6923 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts @@ -270,8 +270,8 @@ export class ExecutionHandler< kibanaBaseUrl: this.taskRunnerContext.kibanaBaseUrl, alertParams: this.rule.params, actionParams: action.params, - ruleUrl: this.buildRuleUrl(spaceId), flapping: executableAlert.getFlapping(), + ruleUrl: this.buildRuleUrl(spaceId), }), }), }; @@ -409,11 +409,13 @@ export class ExecutionHandler< return; } + const relativePath = this.ruleType.getViewInAppRelativeUrl + ? this.ruleType.getViewInAppRelativeUrl({ rule: this.rule }) + : `${triggersActionsRoute}${getRuleDetailsRoute(this.rule.id)}`; + try { const ruleUrl = new URL( - `${ - spaceId !== 'default' ? `/s/${spaceId}` : '' - }${triggersActionsRoute}${getRuleDetailsRoute(this.rule.id)}`, + `${spaceId !== 'default' ? `/s/${spaceId}` : ''}${relativePath}`, this.taskRunnerContext.kibanaBaseUrl ); diff --git a/x-pack/plugins/alerting/server/types.ts b/x-pack/plugins/alerting/server/types.ts index 09493e4357a15..1ecff391be4af 100644 --- a/x-pack/plugins/alerting/server/types.ts +++ b/x-pack/plugins/alerting/server/types.ts @@ -48,6 +48,7 @@ import { RuleSnooze, IntervalSchedule, RuleLastRun, + SanitizedRule, } from '../common'; import { PublicAlertFactory } from './alert/create_alert_factory'; import { FieldMap } from '../common/alert_schema/field_maps/types'; @@ -161,6 +162,12 @@ export interface SummarizedAlerts { }; } export type GetSummarizedAlertsFn = (opts: GetSummarizedAlertsFnOpts) => Promise; +export interface GetViewInAppRelativeUrlFnOpts { + rule: Omit, 'viewInAppRelativeUrl'>; +} +export type GetViewInAppRelativeUrlFn = ( + opts: GetViewInAppRelativeUrlFnOpts +) => string; export interface IRuleTypeAlerts { context: string; namespace?: string; @@ -218,6 +225,7 @@ export interface RuleType< * automatically make recovery determination. Defaults to true. */ autoRecoverAlerts?: boolean; + getViewInAppRelativeUrl?: GetViewInAppRelativeUrlFn; } export type UntypedRuleType = RuleType< RuleTypeParams, diff --git a/x-pack/plugins/ml/public/alerting/register_ml_alerts.ts b/x-pack/plugins/ml/public/alerting/register_ml_alerts.ts index 75aea773f662b..86446dfb1012e 100644 --- a/x-pack/plugins/ml/public/alerting/register_ml_alerts.ts +++ b/x-pack/plugins/ml/public/alerting/register_ml_alerts.ts @@ -149,6 +149,6 @@ export function registerNavigation(alerting: AlertingSetup) { ]), ]; - return formatExplorerUrl('', { jobIds }); + return formatExplorerUrl('/app/ml', { jobIds }); }); } diff --git a/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts b/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts index 87be947c22f90..b3358ffad5bc1 100644 --- a/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts +++ b/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts @@ -48,7 +48,7 @@ function registerNavigation(alerting: AlertingSetup) { PLUGIN_ID, ES_QUERY_ALERT_TYPE, (alert: SanitizedRule>) => { - return `#/viewAlert/${alert.id}`; + return `/app/discover#/viewAlert/${alert.id}`; } ); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts index ac94547851155..7a58c9677ca5d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts @@ -45,7 +45,7 @@ const expectedTransformResult = [ { description: 'The type of rule.', name: 'rule.type' }, { description: - 'The URL to the Stack Management rule page that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', + 'The URL to the rule that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', name: 'rule.url', usesPublicBaseUrl: true, }, @@ -171,7 +171,7 @@ const expectedSummaryTransformResult = [ }, { description: - 'The URL to the Stack Management rule page that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', + 'The URL to the rule that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', name: 'rule.url', usesPublicBaseUrl: true, }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts index 76b6aba407771..212c85cfe1aa7 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts @@ -114,7 +114,7 @@ const AlertProvidedActionVariableDescriptions = { name: AlertProvidedActionVariables.ruleUrl, description: i18n.translate('xpack.triggersActionsUI.actionVariables.ruleUrlLabel', { defaultMessage: - 'The URL to the Stack Management rule page that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', + 'The URL to the rule that generated the alert. This will be an empty string if the server.publicBaseUrl is not configured.', }), usesPublicBaseUrl: true, }, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/view_in_app.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/view_in_app.tsx index 3f4375aad9ac6..f364a9d984da5 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/view_in_app.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_details/components/view_in_app.tsx @@ -12,11 +12,6 @@ import { CoreStart } from '@kbn/core/public'; import { fromNullable, fold } from 'fp-ts/lib/Option'; import { pipe } from 'fp-ts/lib/pipeable'; -import { - RuleNavigation, - RuleStateNavigation, - RuleUrlNavigation, -} from '@kbn/alerting-plugin/common'; import { Rule } from '../../../../types'; import { useKibana } from '../../../../common/lib/kibana'; @@ -26,11 +21,12 @@ export interface ViewInAppProps { const NO_NAVIGATION = false; -type RuleNavigationLoadingState = RuleNavigation | false | null; +type RuleNavigationLoadingState = string | false | null; export const ViewInApp: React.FunctionComponent = ({ rule }) => { const { - application: { navigateToApp }, + application: { navigateToUrl }, + http: { basePath }, alerting: maybeAlerting, } = useKibana().services; @@ -62,7 +58,7 @@ export const ViewInApp: React.FunctionComponent = ({ rule }) => isLoading={ruleNavigation === null} disabled={!hasNavigation(ruleNavigation)} iconType="popout" - {...getNavigationHandler(ruleNavigation, rule, navigateToApp)} + {...getNavigationHandler(ruleNavigation, rule, navigateToUrl, basePath)} > = ({ rule }) => ); }; -function hasNavigation( - ruleNavigation: RuleNavigationLoadingState -): ruleNavigation is RuleStateNavigation | RuleUrlNavigation { - return ruleNavigation - ? ruleNavigation.hasOwnProperty('state') || ruleNavigation.hasOwnProperty('path') - : NO_NAVIGATION; +function hasNavigation(ruleNavigation: RuleNavigationLoadingState): ruleNavigation is string { + return typeof ruleNavigation === 'string'; } function getNavigationHandler( ruleNavigation: RuleNavigationLoadingState, rule: Rule, - navigateToApp: CoreStart['application']['navigateToApp'] + navigateToUrl: CoreStart['application']['navigateToUrl'], + basePath: CoreStart['http']['basePath'] ): object { return hasNavigation(ruleNavigation) ? { onClick: () => { - navigateToApp(rule.consumer, ruleNavigation); + navigateToUrl(basePath.prepend(ruleNavigation)); }, } : {}; diff --git a/x-pack/test/functional_with_es_ssl/plugins/alerts/public/plugin.ts b/x-pack/test/functional_with_es_ssl/plugins/alerts/public/plugin.ts index 43fcb32a0ed20..511bc98f6e3a5 100644 --- a/x-pack/test/functional_with_es_ssl/plugins/alerts/public/plugin.ts +++ b/x-pack/test/functional_with_es_ssl/plugins/alerts/public/plugin.ts @@ -24,7 +24,7 @@ export class AlertingFixturePlugin implements Plugin `/rule/${alert.id}` + (alert: SanitizedRule) => `/app/alerting_fixture/rule/${alert.id}` ); triggersActionsUi.ruleTypeRegistry.register({ From 31797f5ee754cfd3280c247fe6acef82bd30c0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Thu, 16 Feb 2023 15:16:50 -0500 Subject: [PATCH 101/210] [APM] Fix side navigation breaks in APM on 404 page (#151497) https://user-images.githubusercontent.com/55978943/219460483-f7cf498e-f6f1-472c-bd86-cdd832b47a97.mov Adds a `key` property with the current location, so when the URL is changed it invalidates the ErrorBoundary component. --- .../apm/public/components/routing/apm_error_boundary.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/apm/public/components/routing/apm_error_boundary.tsx b/x-pack/plugins/apm/public/components/routing/apm_error_boundary.tsx index 2292b9aa25692..26b641a25896d 100644 --- a/x-pack/plugins/apm/public/components/routing/apm_error_boundary.tsx +++ b/x-pack/plugins/apm/public/components/routing/apm_error_boundary.tsx @@ -9,9 +9,15 @@ import { EuiErrorBoundary } from '@elastic/eui'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import React from 'react'; import { NotFoundPrompt } from '@kbn/shared-ux-prompt-not-found'; +import { useLocation } from 'react-router-dom'; import { ApmPluginStartDeps } from '../../plugin'; -export class ApmErrorBoundary extends React.Component< +export function ApmErrorBoundary({ children }: { children?: React.ReactNode }) { + const location = useLocation(); + return {children}; +} + +class ErrorBoundary extends React.Component< { children?: React.ReactNode }, { error?: Error }, {} From bd89b11576f75139f47669d369deceb9b94302c6 Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:35:43 -0600 Subject: [PATCH 102/210] [ML] Add functional tests for Field stats flyout in Anomaly detection job creation wizards (#151336) --- .../categorization_job.ts | 22 ++++++++++- .../multi_metric_job.ts | 37 +++++++++++++++++-- .../anomaly_detection_jobs/population_job.ts | 24 +++++++++++- .../single_metric_job.ts | 23 ++++++++++-- .../{data_frame_analytics => common}/types.ts | 0 .../classification_creation.ts | 2 +- .../classification_creation_saved_search.ts | 2 +- .../outlier_detection_creation.ts | 2 +- .../regression_creation.ts | 2 +- .../ml/data_frame_analytics_creation.ts | 10 ++--- .../services/ml/field_stats_flyout.ts | 2 +- x-pack/test/functional/services/ml/index.ts | 25 ++++++++++--- .../services/ml/job_wizard_categorization.ts | 21 ++++++++++- .../services/ml/job_wizard_common.ts | 36 ++++++++++++++++-- .../services/ml/job_wizard_multi_metric.ts | 21 ++++++++++- .../services/ml/job_wizard_population.ts | 21 ++++++++++- 16 files changed, 215 insertions(+), 35 deletions(-) rename x-pack/test/functional/apps/ml/{data_frame_analytics => common}/types.ts (100%) diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts index 2ee9d226596d8..2bf433a7d77c3 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/categorization_job.ts @@ -6,7 +6,8 @@ */ import { CATEGORY_EXAMPLES_VALIDATION_STATUS } from '@kbn/ml-plugin/common/constants/categorization_job'; -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -74,6 +75,13 @@ export default function ({ getService }: FtrProviderContext) { const calendarId = `wizard-test-calendar_${Date.now()}`; + const fieldStatsEntries = [ + { + fieldName: 'field1', + type: 'keyword' as FieldStatsType, + }, + ]; + describe('categorization', function () { this.tags(['ml']); before(async () => { @@ -129,8 +137,18 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardCategorization.assertCategorizationDetectorTypeSelectionExists(); await ml.jobWizardCategorization.selectCategorizationDetectorType(detectorTypeIdentifier); - await ml.testExecution.logTestStep(`job creation selects the categorization field`); + await ml.testExecution.logTestStep( + 'job creation opens field stats flyout from categorization field input' + ); await ml.jobWizardCategorization.assertCategorizationFieldInputExists(); + for (const { fieldName, type: fieldType } of fieldStatsEntries) { + await ml.jobWizardCategorization.assertFieldStatFlyoutContentFromCategorizationFieldInputTrigger( + fieldName, + fieldType + ); + } + + await ml.testExecution.logTestStep(`job creation selects the categorization field`); await ml.jobWizardCategorization.selectCategorizationField(categorizationFieldIdentifier); await ml.jobWizardCategorization.assertCategorizationExamplesCallout( CATEGORY_EXAMPLES_VALIDATION_STATUS.VALID diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts index dcb47b205bb1b..9bbfdef22ce55 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/multi_metric_job.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -71,6 +72,14 @@ export default function ({ getService }: FtrProviderContext) { const calendarId = `wizard-test-calendar_${Date.now()}`; + const fieldStatsEntries = [ + { + fieldName: '@version.keyword', + type: 'keyword' as FieldStatsType, + expectedValues: ['1'], + }, + ]; + describe('multi metric', function () { this.tags(['ml']); before(async () => { @@ -129,9 +138,20 @@ export default function ({ getService }: FtrProviderContext) { } await ml.testExecution.logTestStep( - 'job creation inputs the split field and displays split cards' + 'job creation opens field stats flyout from split field input' ); await ml.jobWizardMultiMetric.assertSplitFieldInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardMultiMetric.assertFieldStatFlyoutContentFromSplitFieldInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep( + 'job creation inputs the split field and displays split cards' + ); await ml.jobWizardMultiMetric.selectSplitField(splitField); await ml.jobWizardMultiMetric.assertDetectorSplitExists(splitField); @@ -140,8 +160,19 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardCommon.assertInfluencerSelection([splitField]); - await ml.testExecution.logTestStep('job creation displays the influencer field'); + await ml.testExecution.logTestStep( + 'job creation opens field stats flyout from influencer field input' + ); await ml.jobWizardCommon.assertInfluencerInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardCommon.assertFieldStatFlyoutContentFromInfluencerInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep('job creation displays the influencer field'); await ml.jobWizardCommon.assertInfluencerSelection([splitField]); await ml.testExecution.logTestStep('job creation inputs the bucket span'); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts index 0d04bb2ff7064..ea02186c45b74 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/population_job.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); @@ -33,6 +34,14 @@ export default function ({ getService }: FtrProviderContext) { numberOfBackCards: 5, }, ]; + const fieldStatsEntries = [ + { + fieldName: 'currency', + type: 'keyword' as FieldStatsType, + expectedValues: ['EUR'], + }, + ]; + const bucketSpan = '2h'; const memoryLimit = '8mb'; @@ -133,8 +142,19 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation displays the pick fields step'); await ml.jobWizardCommon.advanceToPickFieldsSection(); - await ml.testExecution.logTestStep('job creation selects the population field'); + await ml.testExecution.logTestStep( + 'job creation opens field stats flyout from population field input' + ); await ml.jobWizardPopulation.assertPopulationFieldInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardPopulation.assertFieldStatFlyoutContentFromPopulationFieldInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep('job creation selects the population field'); await ml.jobWizardPopulation.selectPopulationField(populationField); await ml.testExecution.logTestStep( diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts index a4b702e7400b6..1b61c36469d60 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const config = getService('config'); @@ -79,6 +80,14 @@ export default function ({ getService }: FtrProviderContext) { ? remoteName + indexPatternName : indexPatternName; + const fieldStatsEntries = [ + { + fieldName: '@version.keyword', + type: 'keyword' as FieldStatsType, + expectedValues: ['1'], + }, + ]; + describe('single metric', function () { this.tags(['ml']); before(async () => { @@ -127,8 +136,17 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation displays the pick fields step'); await ml.jobWizardCommon.advanceToPickFieldsSection(); - await ml.testExecution.logTestStep('job creation selects field and aggregation'); + await ml.testExecution.logTestStep('job creation opens field stats flyout from agg input'); await ml.jobWizardCommon.assertAggAndFieldInputExists(); + for (const { fieldName, type: fieldType, expectedValues } of fieldStatsEntries) { + await ml.jobWizardCommon.assertFieldStatFlyoutContentFromAggSelectionInputTrigger( + fieldName, + fieldType, + expectedValues + ); + } + + await ml.testExecution.logTestStep('job creation selects field and aggregation'); await ml.jobWizardCommon.selectAggAndField(aggAndFieldIdentifier, true); await ml.jobWizardCommon.assertAnomalyChartExists('LINE'); @@ -255,7 +273,6 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardCommon.advanceToPickFieldsSection(); await ml.testExecution.logTestStep('job cloning pre-fills field and aggregation'); - await ml.jobWizardCommon.assertAggAndFieldInputExists(); await ml.jobWizardCommon.assertAggAndFieldSelection([aggAndFieldIdentifier]); await ml.jobWizardCommon.assertAnomalyChartExists('LINE'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/types.ts b/x-pack/test/functional/apps/ml/common/types.ts similarity index 100% rename from x-pack/test/functional/apps/ml/data_frame_analytics/types.ts rename to x-pack/test/functional/apps/ml/common/types.ts diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts index df6d53974d876..4fdf99f8aaf5b 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation.ts @@ -7,7 +7,7 @@ import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; import type { FtrProviderContext } from '../../../ftr_provider_context'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts index 872ffb2294af9..6eba57e50f448 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/classification_creation_saved_search.ts @@ -7,7 +7,7 @@ import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; import type { FtrProviderContext } from '../../../ftr_provider_context'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts index 576fcc259315d..752b644092615 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/outlier_detection_creation.ts @@ -7,7 +7,7 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts index 4f89d5875165d..cda7617cc18f3 100644 --- a/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts +++ b/x-pack/test/functional/apps/ml/data_frame_analytics/regression_creation.ts @@ -7,7 +7,7 @@ import type { FtrProviderContext } from '../../../ftr_provider_context'; import type { AnalyticsTableRowDetails } from '../../../services/ml/data_frame_analytics_table'; -import type { FieldStatsType } from './types'; +import type { FieldStatsType } from '../common/types'; export default function ({ getService }: FtrProviderContext) { const esArchiver = getService('esArchiver'); diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts index c20e73d0f51f8..97d8059a85e8b 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts @@ -16,13 +16,13 @@ import { FtrProviderContext } from '../../ftr_provider_context'; import type { CanvasElementColorStats } from '../canvas_element'; import type { MlCommonUI } from './common_ui'; import type { MlApi } from './api'; -import type { MlFieldStatsFlyout } from './field_stats_flyout'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; export function MachineLearningDataFrameAnalyticsCreationProvider( { getPageObject, getService }: FtrProviderContext, mlCommonUI: MlCommonUI, mlApi: MlApi, - mlFieldStatsFlyout: MlFieldStatsFlyout + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout ) { const headerPage = getPageObject('header'); const commonPage = getPageObject('common'); @@ -209,7 +209,7 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( fieldType: 'keyword' | 'date' | 'number', expectedContent?: string[] ) { - await mlFieldStatsFlyout.assertFieldStatFlyoutContentFromTrigger( + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromTrigger( 'mlAnalyticsCreateJobWizardIncludesSelect', fieldName, fieldType, @@ -275,7 +275,7 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( fieldType: 'keyword' | 'date' | 'number', expectedContent?: string[] ) { - await mlFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( 'mlAnalyticsCreateJobWizardDependentVariableSelect loaded', fieldName, fieldType, @@ -288,7 +288,7 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( fieldType: 'keyword' | 'date' | 'number', expectedContent: string[] ) { - await mlFieldStatsFlyout.assertTopValuesContent(fieldName, fieldType, expectedContent); + await mlCommonFieldStatsFlyout.assertTopValuesContent(fieldName, fieldType, expectedContent); }, async assertDependentVariableInputMissing() { diff --git a/x-pack/test/functional/services/ml/field_stats_flyout.ts b/x-pack/test/functional/services/ml/field_stats_flyout.ts index 826af0a4e31c7..cca2db70b5914 100644 --- a/x-pack/test/functional/services/ml/field_stats_flyout.ts +++ b/x-pack/test/functional/services/ml/field_stats_flyout.ts @@ -9,7 +9,7 @@ import { ProvidedType } from '@kbn/test'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; -export type MlFieldStatsFlyout = ProvidedType; +export type MlCommonFieldStatsFlyout = ProvidedType; export function MachineLearningFieldStatsFlyoutProvider({ getService }: FtrProviderContext) { const browser = getService('browser'); diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index ca9698b7813e5..7cab6d61fa792 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -115,11 +115,26 @@ export function MachineLearningProvider(context: FtrProviderContext) { const jobTable = MachineLearningJobTableProvider(context, commonUI, customUrls); const jobTypeSelection = MachineLearningJobTypeSelectionProvider(context); const jobWizardAdvanced = MachineLearningJobWizardAdvancedProvider(context, commonUI); - const jobWizardCategorization = MachineLearningJobWizardCategorizationProvider(context); - const jobWizardCommon = MachineLearningJobWizardCommonProvider(context, commonUI, customUrls); - const jobWizardMultiMetric = MachineLearningJobWizardMultiMetricProvider(context); - const jobWizardPopulation = MachineLearningJobWizardPopulationProvider(context); + const jobWizardCategorization = MachineLearningJobWizardCategorizationProvider( + context, + commonFieldStatsFlyout + ); + const jobWizardCommon = MachineLearningJobWizardCommonProvider( + context, + commonUI, + customUrls, + commonFieldStatsFlyout + ); const jobWizardGeo = MachineLearningJobWizardGeoProvider(context); + const jobWizardMultiMetric = MachineLearningJobWizardMultiMetricProvider( + context, + commonFieldStatsFlyout + ); + const jobWizardPopulation = MachineLearningJobWizardPopulationProvider( + context, + commonFieldStatsFlyout + ); + const lensVisualizations = MachineLearningLensVisualizationsProvider(context, commonUI); const navigation = MachineLearningNavigationProvider(context); const overviewPage = MachineLearningOverviewPageProvider(context); @@ -178,9 +193,9 @@ export function MachineLearningProvider(context: FtrProviderContext) { jobWizardAdvanced, jobWizardCategorization, jobWizardCommon, + jobWizardGeo, jobWizardMultiMetric, jobWizardPopulation, - jobWizardGeo, lensVisualizations, mlNodesPanel, navigation, diff --git a/x-pack/test/functional/services/ml/job_wizard_categorization.ts b/x-pack/test/functional/services/ml/job_wizard_categorization.ts index 997720cc45d23..a646106c42253 100644 --- a/x-pack/test/functional/services/ml/job_wizard_categorization.ts +++ b/x-pack/test/functional/services/ml/job_wizard_categorization.ts @@ -8,9 +8,13 @@ import expect from '@kbn/expect'; import { CATEGORY_EXAMPLES_VALIDATION_STATUS } from '@kbn/ml-plugin/common/constants/categorization_job'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; -export function MachineLearningJobWizardCategorizationProvider({ getService }: FtrProviderContext) { +export function MachineLearningJobWizardCategorizationProvider( + { getService }: FtrProviderContext, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout +) { const comboBox = getService('comboBox'); const testSubjects = getService('testSubjects'); @@ -31,6 +35,19 @@ export function MachineLearningJobWizardCategorizationProvider({ getService }: F await testSubjects.existOrFail('mlCategorizationFieldNameSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromCategorizationFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValues?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlCategorizationFieldNameSelect', + fieldName, + fieldType, + expectedTopValues + ); + }, + async selectCategorizationField(identifier: string) { await comboBox.set('mlCategorizationFieldNameSelect > comboBoxInput', identifier); diff --git a/x-pack/test/functional/services/ml/job_wizard_common.ts b/x-pack/test/functional/services/ml/job_wizard_common.ts index 13b941633be10..5f3c685467c08 100644 --- a/x-pack/test/functional/services/ml/job_wizard_common.ts +++ b/x-pack/test/functional/services/ml/job_wizard_common.ts @@ -7,9 +7,10 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; -import { MlCommonUI } from './common_ui'; -import { MlCustomUrls } from './custom_urls'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonUI } from './common_ui'; +import type { MlCustomUrls } from './custom_urls'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; export interface SectionOptions { withAdvancedSection: boolean; @@ -18,7 +19,8 @@ export interface SectionOptions { export function MachineLearningJobWizardCommonProvider( { getService }: FtrProviderContext, mlCommonUI: MlCommonUI, - customUrls: MlCustomUrls + customUrls: MlCustomUrls, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout ) { const comboBox = getService('comboBox'); const retry = getService('retry'); @@ -99,6 +101,19 @@ export function MachineLearningJobWizardCommonProvider( await testSubjects.existOrFail('mlJobWizardAggSelection > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromAggSelectionInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValuesContent: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlJobWizardAggSelection', + fieldName, + fieldType, + expectedTopValuesContent + ); + }, + async assertAggAndFieldSelection(expectedIdentifier: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( 'mlJobWizardAggSelection > comboBoxInput' @@ -416,6 +431,19 @@ export function MachineLearningJobWizardCommonProvider( await testSubjects.existOrFail('mlInfluencerSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromInfluencerInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValuesContent?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlInfluencerSelect', + fieldName, + fieldType, + expectedTopValuesContent + ); + }, + async getSelectedInfluencers(): Promise { return await comboBox.getComboBoxSelectedOptions('mlInfluencerSelect > comboBoxInput'); }, diff --git a/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts b/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts index d60a5b67c4312..f5c347ad697b2 100644 --- a/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts +++ b/x-pack/test/functional/services/ml/job_wizard_multi_metric.ts @@ -7,9 +7,13 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; -export function MachineLearningJobWizardMultiMetricProvider({ getService }: FtrProviderContext) { +export function MachineLearningJobWizardMultiMetricProvider( + { getService }: FtrProviderContext, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout +) { const comboBox = getService('comboBox'); const testSubjects = getService('testSubjects'); @@ -18,6 +22,19 @@ export function MachineLearningJobWizardMultiMetricProvider({ getService }: FtrP await testSubjects.existOrFail('mlSplitFieldSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromSplitFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValues?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlSplitFieldSelect', + fieldName, + fieldType, + expectedTopValues + ); + }, + async assertSplitFieldSelection(expectedIdentifier: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( 'mlSplitFieldSelect > comboBoxInput' diff --git a/x-pack/test/functional/services/ml/job_wizard_population.ts b/x-pack/test/functional/services/ml/job_wizard_population.ts index fd37c3d786920..418369bbf905f 100644 --- a/x-pack/test/functional/services/ml/job_wizard_population.ts +++ b/x-pack/test/functional/services/ml/job_wizard_population.ts @@ -7,9 +7,13 @@ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; +import type { MlCommonFieldStatsFlyout } from './field_stats_flyout'; -export function MachineLearningJobWizardPopulationProvider({ getService }: FtrProviderContext) { +export function MachineLearningJobWizardPopulationProvider( + { getService }: FtrProviderContext, + mlCommonFieldStatsFlyout: MlCommonFieldStatsFlyout +) { const comboBox = getService('comboBox'); const testSubjects = getService('testSubjects'); @@ -18,6 +22,19 @@ export function MachineLearningJobWizardPopulationProvider({ getService }: FtrPr await testSubjects.existOrFail('mlPopulationSplitFieldSelect > comboBoxInput'); }, + async assertFieldStatFlyoutContentFromPopulationFieldInputTrigger( + fieldName: string, + fieldType: 'keyword' | 'date' | 'number', + expectedTopValues?: string[] + ) { + await mlCommonFieldStatsFlyout.assertFieldStatFlyoutContentFromComboBoxTrigger( + 'mlPopulationSplitFieldSelect', + fieldName, + fieldType, + expectedTopValues + ); + }, + async assertPopulationFieldSelection(expectedIdentifier: string[]) { const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( 'mlPopulationSplitFieldSelect > comboBoxInput' From d80116677d4369b93b5e645657c0000aff4ac0bc Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Thu, 16 Feb 2023 13:04:55 -0800 Subject: [PATCH 103/210] [Cloud Posture] [Quick Wins] Update dashboard links Icon (#151399) --- .../public/components/csp_counter_card.tsx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cloud_security_posture/public/components/csp_counter_card.tsx b/x-pack/plugins/cloud_security_posture/public/components/csp_counter_card.tsx index cb3d0c3527c57..2db04c6f6ebff 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/csp_counter_card.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/csp_counter_card.tsx @@ -18,6 +18,17 @@ export interface CspCounterCardProps { description: EuiStatProps['description']; } +// Todo: remove when EuiIcon type="pivot" is available +const PivotIcon = ({ ...props }) => ( + + + +); + export const CspCounterCard = (counter: CspCounterCardProps) => { const { euiTheme } = useEuiTheme(); @@ -46,6 +57,7 @@ export const CspCounterCard = (counter: CspCounterCardProps) => { justifyContent: 'space-around', '.euiText h6': { textTransform: 'capitalize', + fontSize: euiTheme.size.m, }, }} titleSize="s" @@ -56,8 +68,10 @@ export const CspCounterCard = (counter: CspCounterCardProps) => { /> {counter.onClick && ( Date: Thu, 16 Feb 2023 14:05:26 -0700 Subject: [PATCH 104/210] [Security Solution] Fix cursor jumping to end of text area when editing Rule Action Message (#150823) ## Summary Resolves: https://github.com/elastic/kibana/issues/149885 For additional details, please see https://github.com/elastic/kibana/pull/141811#discussion_r981346237 and https://github.com/elastic/kibana/issues/142217. As mentioned in https://github.com/elastic/kibana/issues/142217, this issue is the result of managing stale events and timings (renderings + field updates) between the Detections `RuleActionsField` component, validation within the hooks-form lib, and field updates coming from the `trigger_actions_ui` components. Note: this behavior is explicit to the Edit Rule flow (`ActionsStepRule` form), and not the Bulk Actions flyout (`RuleActionsFormData` form) as events flow as intended in the latter, presumably because of all the nested components and use of `useFormData` within the Edit Rule flow (see [form libs docs](https://docs.elastic.dev/form-lib/examples/listening-to-changes#forward-the-form-state-to-a-parent-component)). The fix here is a modification of the fix provided in https://github.com/elastic/kibana/pull/141811 with `setTimeout`, but instead of always pushing the params update to be within a `setTimeout`, it now only does it when initially loading `Actions` with empty `Params`. Since this fix also has the unintended side-effect of flickering the validation error callout when first adding an action, validation is now throttled to 100ms intervals, which also helps with extraneous re-renders. Before initial fix (with cursor issue) / Before throttle fix w/ flashing error callout:

After:

--- .../bulk_actions/forms/rule_actions_form.tsx | 7 ++- .../rules/rule_actions_field/index.tsx | 47 +++++++++++------ .../rules/step_rule_actions/get_schema.ts | 6 ++- .../validate_rule_actions_field/index.tsx | 1 + .../validate_rule_actions_field.ts | 52 +++++++++++++++++-- 5 files changed, 88 insertions(+), 25 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/rule_actions_form.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/rule_actions_form.tsx index 0bff754f20f4f..8b791ee2aece1 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/rule_actions_form.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/rule_actions_form.tsx @@ -41,7 +41,7 @@ import { import { getAllActionMessageParams } from '../../../../../../detections/pages/detection_engine/rules/helpers'; import { RuleActionsField } from '../../../../../../detections/components/rules/rule_actions_field'; -import { validateRuleActionsField } from '../../../../../../detections/containers/detection_engine/rules/validate_rule_actions_field'; +import { debouncedValidateRuleActionsField } from '../../../../../../detections/containers/detection_engine/rules/validate_rule_actions_field'; const CommonUseField = getUseField({ component: Field }); @@ -61,7 +61,10 @@ const getFormSchema = ( actions: { validations: [ { - validator: validateRuleActionsField(actionTypeRegistry), + // Debounced validator not explicitly necessary here as the `RuleActionsFormData` form doesn't exhibit the same + // behavior as the `ActionsStepRule` form outlined in https://github.com/elastic/kibana/issues/142217, however + // additional renders are prevented so using for consistency + validator: debouncedValidateRuleActionsField(actionTypeRegistry), }, ], }, diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_field/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_field/index.tsx index 339b81f752723..f7624eaa604ed 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_field/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_field/index.tsx @@ -64,6 +64,10 @@ export const RuleActionsField: React.FC = ({ field, messageVariables }) = triggersActionsUi: { getActionForm }, } = useKibana().services; + // Workaround for setAlertActionsProperty being fired with prevProps when followed by setActionIdByIndex + // For details see: https://github.com/elastic/kibana/issues/142217 + const [isInitializingAction, setIsInitializingAction] = useState(false); + const actions: RuleAction[] = useMemo( () => (!isEmpty(field.value) ? (field.value as RuleAction[]) : []), [field.value] @@ -83,6 +87,9 @@ export const RuleActionsField: React.FC = ({ field, messageVariables }) = const setActionIdByIndex = useCallback( (id: string, index: number) => { const updatedActions = [...(actions as Array>)]; + if (isEmpty(updatedActions[index].params)) { + setIsInitializingAction(true); + } updatedActions[index] = deepMerge(updatedActions[index], { id }); field.setValue(updatedActions); }, @@ -98,24 +105,30 @@ export const RuleActionsField: React.FC = ({ field, messageVariables }) = (key: string, value: RuleActionParam, index: number) => { // validation is not triggered correctly when actions params updated (more details in https://github.com/elastic/kibana/issues/142217) // wrapping field.setValue in setTimeout fixes the issue above - // and triggers validation after params have been updated - setTimeout( - () => - field.setValue((prevValue: RuleAction[]) => { - const updatedActions = [...prevValue]; - updatedActions[index] = { - ...updatedActions[index], - params: { - ...updatedActions[index].params, - [key]: value, - }, - }; - return updatedActions; - }), - 0 - ); + // and triggers validation after params have been updated, however it introduced a new issue where any additional input + // would result in the cursor jumping to the end of the text area (https://github.com/elastic/kibana/issues/149885) + const updateValue = () => { + field.setValue((prevValue: RuleAction[]) => { + const updatedActions = [...prevValue]; + updatedActions[index] = { + ...updatedActions[index], + params: { + ...updatedActions[index].params, + [key]: value, + }, + }; + return updatedActions; + }); + }; + + if (isInitializingAction) { + setTimeout(updateValue, 0); + setIsInitializingAction(false); + } else { + updateValue(); + } }, - [field] + [field, isInitializingAction] ); const actionForm = useMemo( diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_rule_actions/get_schema.ts b/x-pack/plugins/security_solution/public/detections/components/rules/step_rule_actions/get_schema.ts index e5eec8392b0e1..4bc6896c10467 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/step_rule_actions/get_schema.ts +++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_rule_actions/get_schema.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import type { ActionTypeRegistryContract } from '@kbn/triggers-actions-ui-plugin/public'; -import { validateRuleActionsField } from '../../../containers/detection_engine/rules/validate_rule_actions_field'; +import { debouncedValidateRuleActionsField } from '../../../containers/detection_engine/rules/validate_rule_actions_field'; import type { FormSchema } from '../../../../shared_imports'; import type { ActionsStepRule } from '../../../pages/detection_engine/rules/types'; @@ -21,7 +21,9 @@ export const getSchema = ({ actions: { validations: [ { - validator: validateRuleActionsField(actionTypeRegistry), + // Debounced validator is necessary here to prevent error validation + // flashing when first adding an action. Also prevents additional renders + validator: debouncedValidateRuleActionsField(actionTypeRegistry), }, ], }, diff --git a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/index.tsx b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/index.tsx index 22d05080a408b..141d3f96ab987 100644 --- a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/index.tsx @@ -6,3 +6,4 @@ */ export { validateRuleActionsField } from './validate_rule_actions_field'; +export { debouncedValidateRuleActionsField } from './validate_rule_actions_field'; diff --git a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/validate_rule_actions_field.ts b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/validate_rule_actions_field.ts index 18aa758d0a499..8d04ed43e0538 100644 --- a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/validate_rule_actions_field.ts +++ b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/validate_rule_actions_field/validate_rule_actions_field.ts @@ -7,13 +7,22 @@ /* istanbul ignore file */ +import type { + ValidationCancelablePromise, + ValidationFuncArg, + ValidationResponsePromise, +} from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import type { RuleAction, ActionTypeRegistryContract, } from '@kbn/triggers-actions-ui-plugin/public'; -import type { ValidationFunc, ERROR_CODE, ValidationError } from '../../../../../shared_imports'; +import type { RuleActionsFormData } from '../../../../../detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/rule_actions_form'; +import type { ActionsStepRule } from '../../../../pages/detection_engine/rules/types'; +import type { ValidationFunc, ERROR_CODE } from '../../../../../shared_imports'; import { getActionTypeName, validateMustache, validateActionParams } from './utils'; +export const DEFAULT_VALIDATION_TIMEOUT = 100; + export const validateSingleAction = async ( actionItem: RuleAction, actionTypeRegistry: ActionTypeRegistryContract @@ -26,9 +35,7 @@ export const validateSingleAction = async ( export const validateRuleActionsField = (actionTypeRegistry: ActionTypeRegistryContract) => - async ( - ...data: Parameters - ): Promise | void | undefined> => { + async (...data: Parameters): ValidationResponsePromise => { const [{ value, path }] = data as [{ value: RuleAction[]; path: string }]; const errors = []; @@ -51,3 +58,40 @@ export const validateRuleActionsField = }; } }; + +/** + * Debounces validation by canceling previous validation requests. Essentially leveraging the async validation + * cancellation behavior from the hook_form_lib. Necessary to prevent error validation flashing when first adding an + * action until root cause of https://github.com/elastic/kibana/issues/142217 is found + * + * See docs for details: + * https://docs.elastic.dev/form-lib/examples/validation#cancel-asynchronous-validation + * + * Note: _.throttle/debounce does not have async support, and so not used https://github.com/lodash/lodash/issues/4815. + * + * @param actionTypeRegistry + * @param defaultValidationTimeout + */ +export const debouncedValidateRuleActionsField = + ( + actionTypeRegistry: ActionTypeRegistryContract, + defaultValidationTimeout = DEFAULT_VALIDATION_TIMEOUT + ) => + (data: ValidationFuncArg): ValidationResponsePromise => { + let isCanceled = false; + const promise: ValidationCancelablePromise = new Promise((resolve) => { + setTimeout(() => { + if (isCanceled) { + resolve(); + } else { + resolve(validateRuleActionsField(actionTypeRegistry)(data)); + } + }, defaultValidationTimeout); + }); + + promise.cancel = () => { + isCanceled = true; + }; + + return promise; + }; From f3e8932343a7397dbf592f989d159b4370eda788 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 16 Feb 2023 14:09:13 -0700 Subject: [PATCH 105/210] [dashboard] fix react-grid-layout GridItem displaying warning in console (#151494) Fixes https://github.com/elastic/kibana/issues/151487 PR updates DashboardGridItem to use forwardRef to resolve react warning caused when ReactGridLayout passes ref to functional component children. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../component/grid/dashboard_grid_item.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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 94151273af0b7..edea6b0e68dc1 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 @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { useState, useRef, useEffect, FC } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { EuiLoadingChart } from '@elastic/eui'; import classNames from 'classnames'; @@ -96,21 +96,20 @@ const Item = React.forwardRef( } ); -export const ObservedItem: FC = (props: Props) => { +export const ObservedItem = React.forwardRef((props, panelRef) => { const [intersection, updateIntersection] = useState(); const [isRenderable, setIsRenderable] = useState(false); - const panelRef = useRef(null); const observerRef = useRef( new window.IntersectionObserver(([value]) => updateIntersection(value), { - root: panelRef.current, + root: (panelRef as React.RefObject).current, }) ); useEffect(() => { const { current: currentObserver } = observerRef; currentObserver.disconnect(); - const { current } = panelRef; + const { current } = panelRef as React.RefObject; if (current) { currentObserver.observe(current); @@ -126,9 +125,11 @@ export const ObservedItem: FC = (props: Props) => { }, [intersection, isRenderable]); return ; -}; +}); -export const DashboardGridItem: FC = (props: Props) => { +// ReactGridLayout passes ref to children. Functional component children require forwardRef to avoid react warning +// https://github.com/react-grid-layout/react-grid-layout#custom-child-components-and-draggable-handles +export const DashboardGridItem = React.forwardRef((props, ref) => { const { settings: { isProjectEnabledInLabs }, } = pluginServices.getServices(); @@ -138,5 +139,5 @@ export const DashboardGridItem: FC = (props: Props) => { const isPrintMode = select((state) => state.explicitInput.viewMode) === ViewMode.PRINT; const isEnabled = !isPrintMode && isProjectEnabledInLabs('labs:dashboard:deferBelowFold'); - return isEnabled ? : ; -}; + return isEnabled ? : ; +}); From 9dd328117af3aa9abd16dfbd0b49e2ca6a814fab Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 16 Feb 2023 15:22:36 -0700 Subject: [PATCH 106/210] Update Puppeteer script for finding the commit ID of Chromium. (#151378) Path of revision.ts has moved in the Puppeteer repo. See https://raw.githubusercontent.com/puppeteer/puppeteer/puppeteer-v19.7.0/packages/puppeteer-core/src/revisions.ts for the latest placement. --- src/dev/chromium_version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev/chromium_version.ts b/src/dev/chromium_version.ts index f2cbab5e7a516..aabdba9360c80 100644 --- a/src/dev/chromium_version.ts +++ b/src/dev/chromium_version.ts @@ -46,7 +46,7 @@ async function getChromiumRevision( kibanaPuppeteerVersion: PuppeteerRelease, log: ToolingLog ): Promise { - const url = `https://raw.githubusercontent.com/puppeteer/puppeteer/v${kibanaPuppeteerVersion}/src/revisions.ts`; + const url = `https://raw.githubusercontent.com/puppeteer/puppeteer/puppeteer-v${kibanaPuppeteerVersion}/packages/puppeteer-core/src/revisions.ts`; let body: string; try { log.info(`Fetching code from Puppeteer source: ${url}`); From 9fa9ebd727f27572c78f8f3889e30f99cae5586c Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 16 Feb 2023 17:54:18 -0500 Subject: [PATCH 107/210] skip failing test suite (#149611) --- x-pack/test/functional_execution_context/tests/browser.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional_execution_context/tests/browser.ts b/x-pack/test/functional_execution_context/tests/browser.ts index 085fae8ed0d6a..a67a1e64cea67 100644 --- a/x-pack/test/functional_execution_context/tests/browser.ts +++ b/x-pack/test/functional_execution_context/tests/browser.ts @@ -13,7 +13,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'home', 'timePicker']); const retry = getService('retry'); - describe('Browser apps', () => { + // Failing: See https://github.com/elastic/kibana/issues/149611 + describe.skip('Browser apps', () => { before(async () => { await PageObjects.common.navigateToUrl('home', '/tutorial_directory/sampleData', { useActualUrl: true, From ba5634eda6b18ae3d809ba50d21878526c97a8dc Mon Sep 17 00:00:00 2001 From: Garrett Spong Date: Thu, 16 Feb 2023 16:53:26 -0700 Subject: [PATCH 108/210] [Security Solution] Fixes certain Related Integrations showing as `not installed` even when they are (#149646) ## Summary Resolves https://github.com/elastic/kibana/issues/149644 by adding a fallback for package policies without a policy_template. --- .../api/get_installed_integrations/installed_integration_set.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations/api/get_installed_integrations/installed_integration_set.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations/api/get_installed_integrations/installed_integration_set.ts index 156d1c99fde5d..af35f7881bd00 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations/api/get_installed_integrations/installed_integration_set.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/fleet_integrations/api/get_installed_integrations/installed_integration_set.ts @@ -126,7 +126,7 @@ const getIntegrationsInfoFromPolicy = ( packageInfo: InstalledPackageBasicInfo ): InstalledIntegrationBasicInfo[] => { return policy.inputs.map((input) => { - const integrationName = normalizeString(input.policy_template); // e.g. 'cloudtrail' + const integrationName = normalizeString(input.policy_template ?? input.type); // e.g. 'cloudtrail' const integrationTitle = `${packageInfo.package_title} ${capitalize(integrationName)}`; // e.g. 'AWS Cloudtrail' return { integration_name: integrationName, From df9527d458e940f7e9f830d376b7f532d3076ff8 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 17 Feb 2023 02:17:54 +0000 Subject: [PATCH 109/210] chore(NA): update versions after v8.6.3 bump (#151468) This PR is a simple update of our versions file after the recent bumps --- versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.json b/versions.json index 91bf9e9b16fc4..7e832470e4a96 100644 --- a/versions.json +++ b/versions.json @@ -14,7 +14,7 @@ "previousMinor": true }, { - "version": "8.6.2", + "version": "8.6.3", "branch": "8.6", "currentMajor": true, "previousMinor": true From b94d68d0da95d8194721837ae070bd66c8926c03 Mon Sep 17 00:00:00 2001 From: "Joey F. Poon" Date: Thu, 16 Feb 2023 21:16:45 -0600 Subject: [PATCH 110/210] [Fleet] add protection features to agent policy (#151236) --- .../fleet/common/types/models/agent_policy.ts | 9 +++++ .../fleet/server/constants/fleet_es_assets.ts | 2 +- x-pack/plugins/fleet/server/mocks/index.ts | 1 + .../full_agent_policy.test.ts.snap | 27 +++++++++++++ .../agent_policies/full_agent_policy.test.ts | 31 +++++++++++++++ .../agent_policies/full_agent_policy.ts | 36 +++++++++++++++++ .../security/message_signing_service.ts | 39 ++++++++++++------- x-pack/plugins/fleet/server/services/setup.ts | 14 +++---- 8 files changed, 137 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/fleet/common/types/models/agent_policy.ts b/x-pack/plugins/fleet/common/types/models/agent_policy.ts index cc0f0be82eae0..465d6adcb1acd 100644 --- a/x-pack/plugins/fleet/common/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/agent_policy.ts @@ -114,6 +114,15 @@ export interface FullAgentPolicy { }; download: { sourceURI: string }; features: Record; + protection?: { + enabled: boolean; + uninstall_token_hash: string; + signing_key: string; + }; + }; + signed?: { + data: string; + signature: string; }; } diff --git a/x-pack/plugins/fleet/server/constants/fleet_es_assets.ts b/x-pack/plugins/fleet/server/constants/fleet_es_assets.ts index 223a9d293d070..6c3204aadada7 100644 --- a/x-pack/plugins/fleet/server/constants/fleet_es_assets.ts +++ b/x-pack/plugins/fleet/server/constants/fleet_es_assets.ts @@ -13,7 +13,7 @@ const meta = getESAssetMetadata(); export const FLEET_INSTALL_FORMAT_VERSION = '1.0.0'; -export const FLEET_AGENT_POLICIES_SCHEMA_VERSION = '1.0.0'; +export const FLEET_AGENT_POLICIES_SCHEMA_VERSION = '1.1.0'; export const FLEET_FINAL_PIPELINE_ID = '.fleet_final_pipeline-1'; diff --git a/x-pack/plugins/fleet/server/mocks/index.ts b/x-pack/plugins/fleet/server/mocks/index.ts index 75f55a1b353d4..4c1d37e3d0f52 100644 --- a/x-pack/plugins/fleet/server/mocks/index.ts +++ b/x-pack/plugins/fleet/server/mocks/index.ts @@ -76,6 +76,7 @@ export const createAppContextStartContractMock = ( telemetryEventsSender: createMockTelemetryEventsSender(), bulkActionsResolver: {} as any, messageSigningService: { + isEncryptionAvailable: true, generateKeyPair: jest.fn(), sign: jest.fn(), getPublicKey: jest.fn(), diff --git a/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap b/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap index 030dd4d9ec36f..e96997db071a8 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap +++ b/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap @@ -14,6 +14,11 @@ Object { "namespace": "default", "use_output": "default", }, + "protection": Object { + "enabled": false, + "signing_key": "", + "uninstall_token_hash": "", + }, }, "fleet": Object { "hosts": Array [ @@ -63,6 +68,10 @@ Object { }, }, "revision": 1, + "signed": Object { + "data": "", + "signature": "", + }, } `; @@ -80,6 +89,11 @@ Object { "namespace": "default", "use_output": "monitoring-output-id", }, + "protection": Object { + "enabled": false, + "signing_key": "", + "uninstall_token_hash": "", + }, }, "fleet": Object { "hosts": Array [ @@ -129,6 +143,10 @@ Object { }, }, "revision": 1, + "signed": Object { + "data": "", + "signature": "", + }, } `; @@ -146,6 +164,11 @@ Object { "namespace": "default", "use_output": "monitoring-output-id", }, + "protection": Object { + "enabled": false, + "signing_key": "", + "uninstall_token_hash": "", + }, }, "fleet": Object { "hosts": Array [ @@ -195,5 +218,9 @@ Object { }, }, "revision": 1, + "signed": Object { + "data": "", + "signature": "", + }, } `; diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts index 93c6b6dc891ea..72ad9b3e5a99c 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts @@ -8,9 +8,11 @@ import { savedObjectsClientMock } from '@kbn/core/server/mocks'; import type { AgentPolicy, Output, DownloadSource } from '../../types'; +import { createAppContextStartContractMock } from '../../mocks'; import { agentPolicyService } from '../agent_policy'; import { agentPolicyUpdateEventHandler } from '../agent_policy_update'; +import { appContextService } from '../app_context'; import { generateFleetConfig, @@ -433,6 +435,35 @@ describe('getFullAgentPolicy', () => { }, }); }); + + it('should populate agent.protection and signed properties if encryption is available', async () => { + const mockContext = createAppContextStartContractMock(); + mockContext.messageSigningService.sign = jest + .fn() + .mockImplementation((message: Record) => + Promise.resolve({ + data: Buffer.from(JSON.stringify(message), 'utf8'), + signature: 'thisisasignature', + }) + ); + mockContext.messageSigningService.getPublicKey = jest + .fn() + .mockResolvedValue('thisisapublickey'); + appContextService.start(mockContext); + + mockAgentPolicy({}); + const agentPolicy = await getFullAgentPolicy(savedObjectsClientMock.create(), 'agent-policy'); + + expect(agentPolicy!.agent!.protection).toMatchObject({ + enabled: true, + uninstall_token_hash: '', + signing_key: 'thisisapublickey', + }); + expect(agentPolicy!.signed).toMatchObject({ + data: 'eyJpZCI6ImFnZW50LXBvbGljeSIsImFnZW50Ijp7InByb3RlY3Rpb24iOnsiZW5hYmxlZCI6dHJ1ZSwidW5pbnN0YWxsX3Rva2VuX2hhc2giOiIiLCJzaWduaW5nX2tleSI6InRoaXNpc2FwdWJsaWNrZXkifX19', + signature: 'thisisasignature', + }); + }); }); describe('transformOutputToFullPolicyOutput', () => { diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts index 58cf87009a5d0..6fd6e9fdf512b 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts @@ -24,6 +24,7 @@ import { DEFAULT_OUTPUT } from '../../constants'; import { getPackageInfo } from '../epm/packages'; import { pkgToPkgKey, splitPkgKey } from '../epm/registry'; +import { appContextService } from '../app_context'; import { getMonitoringPermissions } from './monitoring_permissions'; import { storedPackagePoliciesToAgentInputs } from '.'; @@ -124,6 +125,15 @@ export async function getFullAgentPolicy( acc[name] = featureConfig; return acc; }, {} as NonNullable['features']), + protection: { + enabled: false, + uninstall_token_hash: '', + signing_key: '', + }, + }, + signed: { + data: '', + signature: '', }, }; @@ -173,6 +183,32 @@ export async function getFullAgentPolicy( if (!standalone && fleetServerHosts) { fullAgentPolicy.fleet = generateFleetConfig(fleetServerHosts, proxies); } + + // populate protection and signed properties + const messageSigningService = appContextService.getMessageSigningService(); + if (messageSigningService?.isEncryptionAvailable && fullAgentPolicy.agent) { + const publicKey = await messageSigningService.getPublicKey(); + + fullAgentPolicy.agent.protection = { + enabled: true, + uninstall_token_hash: '', + signing_key: publicKey, + }; + + const dataToSign = { + id: fullAgentPolicy.id, + agent: { + protection: fullAgentPolicy.agent.protection, + }, + }; + + const { data: signedData, signature } = await messageSigningService.sign(dataToSign); + fullAgentPolicy.signed = { + data: signedData.toString('base64'), + signature, + }; + } + return fullAgentPolicy; } diff --git a/x-pack/plugins/fleet/server/services/security/message_signing_service.ts b/x-pack/plugins/fleet/server/services/security/message_signing_service.ts index 6e323a55fc6f8..590421113f339 100644 --- a/x-pack/plugins/fleet/server/services/security/message_signing_service.ts +++ b/x-pack/plugins/fleet/server/services/security/message_signing_service.ts @@ -22,8 +22,11 @@ interface MessageSigningKeys { } export interface MessageSigningServiceInterface { - generateKeyPair(providedPassphrase?: string): Promise; - sign(serializedMessage: Buffer | object): Promise<{ data: Buffer; signature: string }>; + get isEncryptionAvailable(): boolean; + generateKeyPair( + providedPassphrase?: string + ): Promise<{ privateKey: string; publicKey: string; passphrase: string }>; + sign(message: Buffer | Record): Promise<{ data: Buffer; signature: string }>; getPublicKey(): Promise; } @@ -32,12 +35,18 @@ export class MessageSigningService implements MessageSigningServiceInterface { constructor(private esoClient: EncryptedSavedObjectsClient) {} - public async generateKeyPair(providedPassphrase?: string) { + public get isEncryptionAvailable(): boolean { + return appContextService.getEncryptedSavedObjectsSetup()?.canEncrypt ?? false; + } + + public async generateKeyPair( + providedPassphrase?: string + ): Promise<{ privateKey: string; publicKey: string; passphrase: string }> { this.checkForEncryptionKey(); const currentKeyPair = await this.getCurrentKeyPair(); if (currentKeyPair.privateKey && currentKeyPair.publicKey && currentKeyPair.passphrase) { - return; + return currentKeyPair; } const passphrase = providedPassphrase || this.generatePassphrase(); @@ -56,19 +65,25 @@ export class MessageSigningService implements MessageSigningServiceInterface { }, }); + const privateKey = keyPair.privateKey.toString('base64'); + const publicKey = keyPair.publicKey.toString('base64'); await this.soClient.create(MESSAGE_SIGNING_KEYS_SAVED_OBJECT_TYPE, { - private_key: keyPair.privateKey.toString('base64'), - public_key: keyPair.publicKey.toString('base64'), + private_key: privateKey, + public_key: publicKey, passphrase, }); - return; + return { + privateKey, + publicKey, + passphrase, + }; } public async sign( message: Buffer | Record ): Promise<{ data: Buffer; signature: string }> { - this.checkForEncryptionKey(); + const { privateKey: serializedPrivateKey, passphrase } = await this.generateKeyPair(); const msgBuffer = Buffer.isBuffer(message) ? message @@ -78,8 +93,6 @@ export class MessageSigningService implements MessageSigningServiceInterface { signer.update(msgBuffer); signer.end(); - const { privateKey: serializedPrivateKey, passphrase } = await this.getCurrentKeyPair(); - if (!serializedPrivateKey) { throw new Error('unable to find private key'); } @@ -99,9 +112,7 @@ export class MessageSigningService implements MessageSigningServiceInterface { } public async getPublicKey(): Promise { - this.checkForEncryptionKey(); - - const { publicKey } = await this.getCurrentKeyPair(); + const { publicKey } = await this.generateKeyPair(); if (!publicKey) { throw new Error('unable to find public key'); @@ -170,7 +181,7 @@ export class MessageSigningService implements MessageSigningServiceInterface { } private checkForEncryptionKey(): void { - if (!appContextService.getEncryptedSavedObjectsSetup()?.canEncrypt) { + if (!this.isEncryptionAvailable) { throw new Error('encryption key not set, message signing service is disabled'); } } diff --git a/x-pack/plugins/fleet/server/services/setup.ts b/x-pack/plugins/fleet/server/services/setup.ts index 7acf46408367b..db4a9155ba89e 100644 --- a/x-pack/plugins/fleet/server/services/setup.ts +++ b/x-pack/plugins/fleet/server/services/setup.ts @@ -165,19 +165,19 @@ async function createSetupSideEffects( logger.debug('Upgrade Fleet package install versions'); await upgradePackageInstallVersion({ soClient, esClient, logger }); - logger.debug('Upgrade Agent policy schema version'); - await upgradeAgentPolicySchemaVersion(soClient); - - logger.debug('Setting up Fleet enrollment keys'); - await ensureDefaultEnrollmentAPIKeysExists(soClient, esClient); - - if (appContextService.getEncryptedSavedObjectsSetup()?.canEncrypt) { + if (appContextService.getMessageSigningService()?.isEncryptionAvailable) { logger.debug('Generating key pair for message signing'); await appContextService.getMessageSigningService()?.generateKeyPair(); } else { logger.info('No encryption key set, skipping key pair generation for message signing'); } + logger.debug('Upgrade Agent policy schema version'); + await upgradeAgentPolicySchemaVersion(soClient); + + logger.debug('Setting up Fleet enrollment keys'); + await ensureDefaultEnrollmentAPIKeysExists(soClient, esClient); + if (nonFatalErrors.length > 0) { logger.info('Encountered non fatal errors during Fleet setup'); formatNonFatalErrors(nonFatalErrors).forEach((error) => logger.info(JSON.stringify(error))); From 49e6c25cecee1040faa437b18eabf76b1c4862a0 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 17 Feb 2023 00:54:13 -0500 Subject: [PATCH 111/210] [api-docs] 2023-02-17 Daily api_docs build (#151547) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/251 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 162 +-- api_docs/alerting.mdx | 4 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 44 +- api_docs/deprecations_by_plugin.mdx | 22 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 930 ++++++------------ api_docs/discover.mdx | 15 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/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 | 35 +- api_docs/fleet.mdx | 4 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- .../kbn_content_management_table_list.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- .../kbn_core_lifecycle_browser.devdocs.json | 40 - api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- ...ore_saved_objects_api_browser.devdocs.json | 56 -- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...core_saved_objects_api_server_internal.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 +- ...bn_core_saved_objects_browser.devdocs.json | 24 - 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_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.devdocs.json | 16 + api_docs/kbn_journeys.mdx | 4 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.devdocs.json | 6 +- api_docs/kbn_rule_data_utils.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../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_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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 +- .../kbn_shared_ux_file_picker.devdocs.json | 16 + api_docs/kbn_shared_ux_file_picker.mdx | 4 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 15 + api_docs/observability.mdx | 4 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 20 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.devdocs.json | 6 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.devdocs.json | 424 ++++++-- api_docs/saved_objects.mdx | 7 +- 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.devdocs.json | 625 ++++++++---- api_docs/saved_search.mdx | 15 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 490 files changed, 1777 insertions(+), 1653 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 01796d9d6e216..399bb8c78acc3 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-16 +date: 2023-02-17 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 6660f43f9fc04..d8ccd60b82212 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 459b12ad51964..0abe4613ba956 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index 772cc263ceccf..fb58dd319eb7a 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -24,14 +24,7 @@ "section": "def-common.SanitizedRule", "text": "SanitizedRule" }, - ") => string | ", - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.JsonObject", - "text": "JsonObject" - } + ") => string" ], "path": "x-pack/plugins/alerting/public/alert_navigation_registry/types.ts", "deprecated": false, @@ -106,7 +99,7 @@ "section": "def-common.RuleLastRun", "text": "RuleLastRun" }, - " | null | undefined; nextRun?: Date | null | undefined; running?: boolean | null | undefined; }" + " | null | undefined; nextRun?: Date | null | undefined; running?: boolean | null | undefined; viewInAppRelativeUrl?: string | undefined; }" ], "path": "x-pack/plugins/alerting/public/alert_navigation_registry/types.ts", "deprecated": false, @@ -133,7 +126,8 @@ "id": "def-public.PluginSetupContract.registerNavigation", "type": "Function", "tags": [ - "throws" + "throws", + "deprecated" ], "label": "registerNavigation", "description": [ @@ -151,8 +145,18 @@ ") => void" ], "path": "x-pack/plugins/alerting/public/plugin.ts", - "deprecated": false, + "deprecated": true, "trackAdoption": false, + "references": [ + { + "plugin": "ml", + "path": "x-pack/plugins/ml/public/alerting/register_ml_alerts.ts" + }, + { + "plugin": "stackAlerts", + "path": "x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts" + } + ], "children": [ { "parentPluginId": "alerting", @@ -218,7 +222,9 @@ "parentPluginId": "alerting", "id": "def-public.PluginSetupContract.registerDefaultNavigation", "type": "Function", - "tags": [], + "tags": [ + "deprecated" + ], "label": "registerDefaultNavigation", "description": [ "\nRegister a customized view for all rule types with this application id. Stack Management provides a generic overview, but a developer can register a\ncustom navigation to provide the user an extra link to a more curated view. The alerting plugin doesn't actually do\nanything with this information, but it can be used by other plugins via the `getNavigation` functionality. Currently\nthe trigger_actions_ui plugin uses it to expose the link from the generic rule details view in Stack Management.\n" @@ -235,8 +241,9 @@ ") => void" ], "path": "x-pack/plugins/alerting/public/plugin.ts", - "deprecated": false, + "deprecated": true, "trackAdoption": false, + "references": [], "children": [ { "parentPluginId": "alerting", @@ -304,15 +311,7 @@ "label": "getNavigation", "description": [], "signature": [ - "(ruleId: string) => Promise<", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleNavigation", - "text": "RuleNavigation" - }, - " | undefined>" + "(ruleId: string) => Promise" ], "path": "x-pack/plugins/alerting/public/plugin.ts", "deprecated": false, @@ -2986,6 +2985,21 @@ "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.RuleType.getViewInAppRelativeUrl", + "type": "Function", + "tags": [], + "label": "getViewInAppRelativeUrl", + "description": [], + "signature": [ + "GetViewInAppRelativeUrlFn", + " | undefined" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -5945,6 +5959,20 @@ "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-common.Rule.viewInAppRelativeUrl", + "type": "string", + "tags": [], + "label": "viewInAppRelativeUrl", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/alerting/common/rule.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -6957,40 +6985,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleStateNavigation", - "type": "Interface", - "tags": [], - "label": "RuleStateNavigation", - "description": [], - "path": "x-pack/plugins/alerting/common/rule_navigation.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.RuleStateNavigation.state", - "type": "Object", - "tags": [], - "label": "state", - "description": [], - "signature": [ - { - "pluginId": "@kbn/utility-types", - "scope": "common", - "docId": "kibKbnUtilityTypesPluginApi", - "section": "def-common.JsonObject", - "text": "JsonObject" - } - ], - "path": "x-pack/plugins/alerting/common/rule_navigation.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.RuleType", @@ -7209,31 +7203,6 @@ } ], "initialIsOpen": false - }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleUrlNavigation", - "type": "Interface", - "tags": [], - "label": "RuleUrlNavigation", - "description": [], - "path": "x-pack/plugins/alerting/common/rule_navigation.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "alerting", - "id": "def-common.RuleUrlNavigation.path", - "type": "string", - "tags": [], - "label": "path", - "description": [], - "path": "x-pack/plugins/alerting/common/rule_navigation.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false } ], "enums": [ @@ -7890,35 +7859,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "alerting", - "id": "def-common.RuleNavigation", - "type": "Type", - "tags": [], - "label": "RuleNavigation", - "description": [], - "signature": [ - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleUrlNavigation", - "text": "RuleUrlNavigation" - }, - " | ", - { - "pluginId": "alerting", - "scope": "common", - "docId": "kibAlertingPluginApi", - "section": "def-common.RuleStateNavigation", - "text": "RuleStateNavigation" - } - ], - "path": "x-pack/plugins/alerting/common/rule_navigation.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "alerting", "id": "def-common.RuleNotifyWhenType", @@ -8162,7 +8102,7 @@ "section": "def-common.RuleLastRun", "text": "RuleLastRun" }, - " | null | undefined; nextRun?: Date | null | undefined; running?: boolean | null | undefined; }" + " | null | undefined; nextRun?: Date | null | undefined; running?: boolean | null | undefined; viewInAppRelativeUrl?: string | undefined; }" ], "path": "x-pack/plugins/alerting/common/rule.ts", "deprecated": false, diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 045fc7332d186..1f191df2e4372 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.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 | |-------------------|-----------|------------------------|-----------------| -| 489 | 1 | 478 | 39 | +| 486 | 1 | 475 | 40 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index b874620614d43..d2dedc5d145da 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 1e0d6b35b0cab..0e9ebdf16975d 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-16 +date: 2023-02-17 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 2cf6be5ee966b..8de920555aa98 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-16 +date: 2023-02-17 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 a5774ff145599..45d57f85104fd 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-16 +date: 2023-02-17 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 864b7b1fcbc37..2fa9ebb821897 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-16 +date: 2023-02-17 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 bda164b248d35..3c76a8fd01ccd 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-16 +date: 2023-02-17 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 228b64499a587..a66ff2367bd95 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 1585c8444b6f0..d3548b39f61da 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index fc56cff42156b..62dfe477b93d2 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-16 +date: 2023-02-17 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 1dcbe975bc599..88670b4243ed4 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-16 +date: 2023-02-17 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 daadccc54a779..e93425c10dd00 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-16 +date: 2023-02-17 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 bb9678e4df83a..23fe5b140e7b6 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-16 +date: 2023-02-17 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 54db6d38fa9b3..9b9ea4198096f 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-16 +date: 2023-02-17 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 ac8dc97d4332b..14e61847027cc 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 c5d69a448ec3b..2cdcb8bae7d48 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-16 +date: 2023-02-17 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 28bf4b9cf34e0..ffd81779106fb 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-16 +date: 2023-02-17 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 a1cf418f9a407..3a34952cbbac5 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-16 +date: 2023-02-17 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 27a7bee70ea33..f3e781ac1f3e3 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-16 +date: 2023-02-17 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 6130c36147573..2c4ac4ef55844 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-16 +date: 2023-02-17 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 75a57004aebde..cc7b1a4d7e61d 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-16 +date: 2023-02-17 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 0adfe5be98204..ad9cfdfc2cc25 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-16 +date: 2023-02-17 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 db68fbd49a257..3d1346115b74e 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-16 +date: 2023-02-17 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 f587f3f68875f..77bdaa61ac2e7 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-16 +date: 2023-02-17 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 2f3dc1c92f60d..d3bf83c93ddd5 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 938ca42f41987..13d1c7cd9e963 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-16 +date: 2023-02-17 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 fc85563f7f310..88a248a6a6efd 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 7e487d52132f8..953651640692c 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -16,28 +16,34 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Referencing plugin(s) | Remove By | | ---------------|-----------|-----------| -| | alerting, discover, securitySolution | - | +| | ml, stackAlerts | - | +| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | +| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | +| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, data, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover | - | +| | home, data, esUiShared, spaces, savedObjectsManagement, fleet, observability, ml, apm, enterpriseSearch, indexLifecycleManagement, synthetics, upgradeAssistant, ux, kibanaOverview | - | +| | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | +| | actions, ml, savedObjectsTagging, enterpriseSearch | - | +| | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, dataViews, home, data, savedObjects, unifiedSearch, presentationUtil, visualizations, dashboard, lens, discover, cases, fileUpload, maps, ml, infra, fleet, canvas, dashboardEnhanced, graph, monitoring, synthetics, transform, watcher, dataVisualizer, cloudSecurityPosture, securitySolution | - | +| | @kbn/core-saved-objects-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, dataViews, home, savedObjects, savedSearch, visualizations, dashboard, lens, ml, canvas, graph, securitySolution, synthetics, watcher, visTypeTimeseries, @kbn/core-saved-objects-browser-mocks | - | +| | @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, presentationUtil, savedSearch, visualizations, dashboard, lens, savedObjectsFinder, cases, maps, ml, infra, cloudSecurityPosture, dashboardEnhanced, graph, securitySolution, synthetics, @kbn/core-saved-objects-browser-internal | - | +| | @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, visualizations, dashboard, ml, infra, cloudSecurityPosture, dashboardEnhanced, monitoring, synthetics, @kbn/core-saved-objects-browser-internal | - | +| | @kbn/core-saved-objects-browser-internal, @kbn/core, dataViews, savedObjects, embeddable, presentationUtil, visualizations, dashboard, lens, savedObjectsFinder, aiops, ml, cases, maps, dataVisualizer, infra, fleet, cloudSecurityPosture, dashboardEnhanced, graph, synthetics, securitySolution, @kbn/core-saved-objects-browser-mocks | - | +| | @kbn/core-lifecycle-browser-mocks, @kbn/core, ml, dashboard, dataViews, savedSearch, @kbn/core-plugins-browser-internal | - | +| | @kbn/core, savedObjects, embeddable, visualizations, dashboard, fleet, infra, canvas, graph, ml, @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, actions, alerting, enterpriseSearch, securitySolution, taskManager, savedSearch, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | -| | alerting, discover, securitySolution | - | +| | infra, graph, stackAlerts, inputControlVis, securitySolution, savedObjects | - | +| | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | +| | alerting, discover, securitySolution | - | +| | alerting, discover, securitySolution | - | | | actions, alerting | - | -| | @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, @kbn/core, actions, alerting, canvas, enterpriseSearch, securitySolution, taskManager, dashboard, savedSearch, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server, savedObjects, embeddable, visualizations, fleet, infra, graph, ml | - | | | @kbn/core-saved-objects-migration-server-internal, actions, dataViews, data, alerting, savedObjectsTagging, canvas, lens, cases, graph, lists, maps, securitySolution, dashboard, savedSearch, visualizations, @kbn/core-test-helpers-so-type-serializer | - | | | @kbn/core-saved-objects-common, @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, dataViews, discover, savedObjectsTagging, savedObjectsFinder, fleet, canvas, osquery, securitySolution, synthetics, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, apm, savedObjectsTaggingOss, cases, lists, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal, dashboard | - | | | @kbn/core-saved-objects-common, @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, dataViews, discover, savedObjectsTagging, savedObjectsFinder, fleet, canvas, osquery, securitySolution, synthetics, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, apm, savedObjectsTaggingOss, cases, lists, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal, data | - | -| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | | | discover | - | -| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, dataViews, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover, data | - | -| | @kbn/es-query, securitySolution, timelines, lists, threatIntelligence, data, unifiedSearch, triggersActionsUi, savedObjectsManagement, controls, unifiedFieldList, lens, aiops, ml, infra, visTypeTimeseries, apm, observability, dataVisualizer, fleet, canvas, graph, stackAlerts, synthetics, transform, upgradeAssistant, ux, maps, dataViewManagement, inputControlVis, visDefaultEditor, presentationUtil, visTypeTimelion, visTypeVega, discover | - | | | data, discover, imageEmbeddable, embeddable | - | -| | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, dataViews, home, data, savedObjects, embeddable, unifiedSearch, presentationUtil, visualizations, dashboard, lens, discover, cases, fileUpload, maps, ml, infra, fleet, canvas, dashboardEnhanced, graph, monitoring, synthetics, transform, watcher, dataVisualizer, cloudSecurityPosture, securitySolution | - | | | advancedSettings, discover | - | -| | infra, graph, stackAlerts, inputControlVis, securitySolution, savedObjects | - | | | securitySolution | - | -| | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | -| | @kbn/core-saved-objects-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, dataViews, home, savedObjects, savedSearch, visualizations, dashboard, lens, ml, canvas, graph, securitySolution, synthetics, watcher, visTypeTimeseries, @kbn/core-saved-objects-browser-mocks | - | -| | @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, presentationUtil, savedSearch, visualizations, dashboard, lens, savedObjectsFinder, cases, maps, ml, infra, cloudSecurityPosture, dashboardEnhanced, graph, securitySolution, synthetics, @kbn/core-saved-objects-browser-internal | - | -| | @kbn/core-saved-objects-browser-internal, @kbn/core, dataViews, savedObjects, embeddable, presentationUtil, visualizations, dashboard, lens, savedObjectsFinder, aiops, ml, cases, maps, dataVisualizer, infra, fleet, cloudSecurityPosture, dashboardEnhanced, graph, synthetics, securitySolution, @kbn/core-saved-objects-browser-mocks | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | @@ -50,9 +56,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | securitySolution | - | | | securitySolution | - | -| | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | | | monitoring | - | -| | @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, visualizations, dashboard, ml, infra, cloudSecurityPosture, dashboardEnhanced, monitoring, synthetics, @kbn/core-saved-objects-browser-internal | - | | | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, lens, fleet, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, dataViews, data, embeddable, controls, uiActionsEnhanced, maps, canvas, cases, dashboardEnhanced, globalSearchProviders, infra | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-browser-mocks, dataViews, savedObjects, savedSearch, visualizations, dashboard, lens, maps, infra, graph, synthetics | - | | | @kbn/core-saved-objects-browser-mocks, home, @kbn/core-saved-objects-browser-internal | - | @@ -76,15 +80,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-browser-internal, @kbn/core | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core | - | | | @kbn/core-saved-objects-browser-internal | - | -| | @kbn/core-lifecycle-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, savedSearch, visualizations, dashboard, lens, savedObjectsFinder, observability, canvas, transform, @kbn/core-saved-objects-browser-mocks | - | +| | @kbn/core-lifecycle-browser, @kbn/core-saved-objects-browser-internal, @kbn/core, savedSearch, visualizations, dashboard, lens, savedObjectsFinder, observability, canvas, transform, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core | - | | | @kbn/core | - | -| | @kbn/core-lifecycle-browser-mocks, @kbn/core, ml, dashboard, dataViews, savedSearch, @kbn/core-plugins-browser-internal | - | | | @kbn/core, lens, savedObjects, visualizations | - | | | @kbn/core | - | | | @kbn/core, advancedSettings, triggersActionsUi, visualizations | - | | | home, canvas, osquery | - | -| | home, data, esUiShared, spaces, savedObjectsManagement, fleet, observability, ml, apm, enterpriseSearch, indexLifecycleManagement, synthetics, upgradeAssistant, ux, kibanaOverview | - | | | dataViews, maps | - | | | dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | @@ -93,7 +95,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dataViewManagement, dataViews | - | | | visTypeTimeseries, graph, dataViewManagement, dataViews | - | | | dataViews, dataViewManagement | - | -| | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | observability, dataVisualizer, fleet, cloudSecurityPosture, discoverEnhanced, osquery, synthetics | - | | | canvas | - | | | canvas | - | @@ -120,8 +121,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | encryptedSavedObjects | - | | | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, console | - | | | @kbn/core-plugins-server-internal | - | -| | spaces, security, alerting | 8.8.0 | +| | security, licenseManagement, ml, apm, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher | 8.8.0 | | | spaces, security, actions, alerting, ml, remoteClusters, graph, indexLifecycleManagement, mapsEms, painlessLab, rollup, searchprofiler, securitySolution, snapshotRestore, transform, upgradeAssistant | 8.8.0 | +| | spaces, security, alerting | 8.8.0 | | | embeddable, presentationUtil, dashboard, discover, graph | 8.8.0 | | | apm, security, securitySolution | 8.8.0 | | | apm, security, securitySolution | 8.8.0 | @@ -131,7 +133,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | security, fleet | 8.8.0 | | | security, fleet | 8.8.0 | | | apm | 8.8.0 | -| | security, licenseManagement, ml, apm, crossClusterReplication, logstash, painlessLab, searchprofiler, watcher | 8.8.0 | | | security | 8.8.0 | | | mapsEms | 8.8.0 | | | security | 8.8.0 @@ -150,6 +151,7 @@ Safe to remove. | Deprecated API | Plugin Id | | ---------------|------------| +| | alerting | | | data | | | data | | | data | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index ec2e386d2715a..09713fd0bb5d7 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -446,7 +446,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/types.ts#:~:text=fieldFormats), [data_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/data_service.ts#:~:text=fieldFormats) | - | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [clone_panel_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx#:~:text=SavedObject), [clone_panel_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx#:~:text=SavedObject), [clone_panel_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx#:~:text=SavedObject) | 8.8.0 | -| | [dashboard_saved_object_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/dashboard_saved_object_service.ts#:~:text=savedObjects), [index.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/index.ts#:~:text=savedObjects), [index.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/index.ts#:~:text=savedObjects) | - | +| | [dashboard_saved_object_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/dashboard_saved_object_service.ts#:~:text=savedObjects), [index.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/index.ts#:~:text=savedObjects) | - | | | [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=SavedObjectsClientContract), [load_dashboard_state_from_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/load_dashboard_state_from_saved_object.ts#:~:text=SavedObjectsClientContract), [save_dashboard_state_to_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/save_dashboard_state_to_saved_object.ts#:~:text=SavedObjectsClientContract), [save_dashboard_state_to_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/save_dashboard_state_to_saved_object.ts#:~:text=SavedObjectsClientContract), [find_dashboard_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/find_dashboard_saved_objects.ts#:~:text=SavedObjectsClientContract), [find_dashboard_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/find_dashboard_saved_objects.ts#:~:text=SavedObjectsClientContract), [find_dashboard_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/find_dashboard_saved_objects.ts#:~:text=SavedObjectsClientContract), [find_dashboard_saved_objects.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/find_dashboard_saved_objects.ts#:~:text=SavedObjectsClientContract), [check_for_duplicate_dashboard_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/check_for_duplicate_dashboard_title.ts#:~:text=SavedObjectsClientContract), [check_for_duplicate_dashboard_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/check_for_duplicate_dashboard_title.ts#:~:text=SavedObjectsClientContract)+ 4 more | - | | | [save_dashboard_state_to_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_saved_object/lib/save_dashboard_state_to_saved_object.ts#:~:text=create), [clone_panel_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx#:~:text=create) | - | | | [dashboard_listing.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_app/listing/dashboard_listing.tsx#:~:text=delete) | - | @@ -592,7 +592,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [attribute_service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/attribute_service/attribute_service.tsx#:~:text=SavedObjectSaveModal), [attribute_service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/attribute_service/attribute_service.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [container.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/tests/container.test.ts#:~:text=executeTriggerActions), [container.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/tests/container.test.ts#:~:text=executeTriggerActions), [container.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/tests/container.test.ts#:~:text=executeTriggerActions), [container.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/tests/container.test.ts#:~:text=executeTriggerActions), [explicit_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/tests/explicit_input.test.ts#:~:text=executeTriggerActions) | - | -| | [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/plugin.tsx#:~:text=savedObjects) | - | | | [add_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx#:~:text=SimpleSavedObject), [add_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx#:~:text=SimpleSavedObject), [add_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx#:~:text=SimpleSavedObject) | - | | | [add_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx#:~:text=SavedObjectAttributes), [add_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx#:~:text=SavedObjectAttributes), [add_panel_flyout.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx#:~:text=SavedObjectAttributes), [default_embeddable_factory_provider.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/embeddables/default_embeddable_factory_provider.ts#:~:text=SavedObjectAttributes), [default_embeddable_factory_provider.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/embeddables/default_embeddable_factory_provider.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/types.ts#:~:text=SavedObjectAttributes) | - | | | [migrate_base_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/common/lib/migrate_base_input.ts#:~:text=SavedObjectReference), [migrate_base_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/common/lib/migrate_base_input.ts#:~:text=SavedObjectReference), [migrate_base_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/common/lib/migrate_base_input.ts#:~:text=SavedObjectReference), [inject.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/common/lib/inject.ts#:~:text=SavedObjectReference), [inject.ts](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/common/lib/inject.ts#:~:text=SavedObjectReference) | - | @@ -696,7 +695,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [deserialize.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/deserialize.ts#:~:text=getNonScriptedFields), [datasource.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/state_management/datasource.test.ts#:~:text=getNonScriptedFields), [deserialize.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/deserialize.test.ts#:~:text=getNonScriptedFields), [deserialize.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/persistence/deserialize.test.ts#:~:text=getNonScriptedFields) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/save_modal.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | -| | [source_picker.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/source_picker.tsx#:~:text=savedObjects), [source_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/source_modal.tsx#:~:text=savedObjects), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/plugin.ts#:~:text=savedObjects), [search_bar.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/search_bar.tsx#:~:text=savedObjects), [guidance_panel.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/components/guidance_panel/guidance_panel.tsx#:~:text=savedObjects) | - | +| | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/plugin.ts#:~:text=savedObjects) | - | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/save_modal.tsx#:~:text=SavedObjectsClientContract), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/services/save_modal.tsx#:~:text=SavedObjectsClientContract), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectsClientContract), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectsClientContract), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectsClientContract), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectsClientContract), [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=SavedObjectsClientContract), [store.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/state_management/store.ts#:~:text=SavedObjectsClientContract), [store.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/state_management/store.ts#:~:text=SavedObjectsClientContract), [use_workspace_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/use_workspace_loader.ts#:~:text=SavedObjectsClientContract)+ 5 more | - | | | [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=create), [saved_workspace_utils.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.test.ts#:~:text=create) | - | | | [saved_workspace_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/graph/public/helpers/saved_workspace_utils.ts#:~:text=delete) | - | @@ -892,6 +891,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [register_ml_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/alerting/register_ml_alerts.ts#:~:text=registerNavigation) | - | | | [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts#:~:text=title), [rollup.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/job_service/new_job_caps/rollup.ts#:~:text=title), [alerting_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/lib/alerts/alerting_service.ts#:~:text=title), [data_recognizer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title)+ 40 more | - | | | [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts#:~:text=title), [rollup.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/job_service/new_job_caps/rollup.ts#:~:text=title), [alerting_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/lib/alerts/alerting_service.ts#:~:text=title), [data_recognizer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title)+ 40 more | - | | | [index_patterns.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_frame_analytics/index_patterns.ts#:~:text=title), [rollup.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/job_service/new_job_caps/rollup.ts#:~:text=title), [alerting_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/lib/alerts/alerting_service.ts#:~:text=title), [data_recognizer.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title)+ 15 more | - | @@ -900,11 +900,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [annotations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/routes/annotations.ts#:~:text=authc) | - | | | [initialization.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/initialization/initialization.ts#:~:text=authz), [sync_task.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/saved_objects/sync_task.ts#:~:text=authz), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=authz), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=authz) | - | -| | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=savedObjects), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=savedObjects), [page.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx#:~:text=savedObjects), [change_data_view.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx#:~:text=savedObjects), [source_selection.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx#:~:text=savedObjects), [dashboard_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.ts#:~:text=savedObjects) | - | +| | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=savedObjects), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/app.tsx#:~:text=savedObjects), [dashboard_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.ts#:~:text=savedObjects) | - | | | [dependency_cache.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/util/dependency_cache.ts#:~:text=SavedObjectsClientContract), [dependency_cache.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/util/dependency_cache.ts#:~:text=SavedObjectsClientContract), [use_resolver.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/routing/use_resolver.ts#:~:text=SavedObjectsClientContract), [use_resolver.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/routing/use_resolver.ts#:~:text=SavedObjectsClientContract), [use_resolver.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/routing/use_resolver.ts#:~:text=SavedObjectsClientContract), [dashboard_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.ts#:~:text=SavedObjectsClientContract), [dashboard_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.ts#:~:text=SavedObjectsClientContract), [router.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/routing/router.tsx#:~:text=SavedObjectsClientContract), [router.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/routing/router.tsx#:~:text=SavedObjectsClientContract) | - | | | [index_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/util/index_utils.ts#:~:text=find), [resolvers.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/jobs/new_job/recognize/resolvers.ts#:~:text=find), [dashboard_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.ts#:~:text=find), [dashboard_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts#:~:text=find) | - | | | [index_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/util/index_utils.ts#:~:text=get), [route_resolver.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/route_resolver.ts#:~:text=get) | - | -| | [kibana.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/kibana.ts#:~:text=SimpleSavedObject), [kibana.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/kibana.ts#:~:text=SimpleSavedObject), [source_selection.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx#:~:text=SimpleSavedObject), [source_selection.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx#:~:text=SimpleSavedObject) | - | +| | [kibana.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/kibana.ts#:~:text=SimpleSavedObject), [kibana.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/kibana.ts#:~:text=SimpleSavedObject) | - | | | [dashboard_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts#:~:text=savedObjectsServiceMock), [dashboard_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/services/dashboard_service.test.ts#:~:text=savedObjectsServiceMock) | - | | | [modules.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/modules.ts#:~:text=SavedObjectAttributes), [modules.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/common/types/modules.ts#:~:text=SavedObjectAttributes) | - | @@ -991,17 +991,16 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject) | - | | | [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=indexPatterns), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=indexPatterns) | - | | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObject) | - | -| | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/plugin.ts#:~:text=savedObjects), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=savedObjects) | - | +| | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/plugin.ts#:~:text=savedObjects) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectsClientContract), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectsClientContract), [initialize_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/initialize_saved_object.ts#:~:text=SavedObjectsClientContract), [initialize_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/initialize_saved_object.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SavedObjectsClientContract), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=SavedObjectsClientContract), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=SavedObjectsClientContract), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=SavedObjectsClientContract)+ 5 more | - | | | [create_source.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/create_source.ts#:~:text=create), [create_source.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/create_source.ts#:~:text=create), [save_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_saved_object.ts#:~:text=create), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=create), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=create), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=create), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=create), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=create), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=create), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=create)+ 9 more | - | | | [build_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/build_saved_object.ts#:~:text=delete) | - | -| | [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=find), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=find), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=find), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=find), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=find) | - | +| | [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=find), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=find), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=find), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=find) | - | | | [initialize_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/initialize_saved_object.ts#:~:text=get), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=get) | - | | | [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=bulkGet) | - | | | [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=update) | - | -| | [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SimpleSavedObject), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SimpleSavedObject), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SimpleSavedObject)+ 15 more | - | +| | [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SimpleSavedObject), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SimpleSavedObject), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject), [saved_object.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/saved_object.test.ts#:~:text=SimpleSavedObject)+ 4 more | - | | | [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.test.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.test.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.test.ts#:~:text=SavedObjectsCreateOptions) | - | -| | [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SavedObjectsStart), [saved_object_finder.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/finder/saved_object_finder.tsx#:~:text=SavedObjectsStart) | - | | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=simpleSavedObjectMock), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.test.ts#:~:text=simpleSavedObjectMock) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectAttributes), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectAttributes), [create_source.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/create_source.ts#:~:text=SavedObjectAttributes), [create_source.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/create_source.ts#:~:text=SavedObjectAttributes), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SavedObjectAttributes), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts#:~:text=SavedObjectAttributes), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/saved_object/helpers/save_with_confirmation.ts#:~:text=SavedObjectAttributes)+ 15 more | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/saved_objects/public/types.ts#:~:text=SavedObjectReference) | - | @@ -1172,6 +1171,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| +| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/es_query/index.ts#:~:text=registerNavigation) | - | | | [fetch_search_source_query.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_search_source_query.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch), [rule_type.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/server/rule_types/es_query/rule_type.test.ts#:~:text=fetch) | - | | | [boundary_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/boundary_index_expression.tsx#:~:text=indexPatterns), [entity_index_expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/expressions/entity_index_expression.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/geo_containment/query_builder/index.tsx#:~:text=indexPatterns) | - | | | [expression.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/stack_alerts/public/rule_types/threshold/expression.tsx#:~:text=fieldFormats) | - | @@ -1388,7 +1388,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.test.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.test.ts#:~:text=SavedObjectsCreateOptions), [save_with_confirmation.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.test.ts#:~:text=SavedObjectsCreateOptions) | - | | | [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectsFindOptions), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectsFindOptions) | - | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/types.ts#:~:text=ResolvedSimpleSavedObject), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/types.ts#:~:text=ResolvedSimpleSavedObject) | - | -| | [services.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/services.ts#:~:text=SavedObjectsStart), [services.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/services.ts#:~:text=SavedObjectsStart), [search_selection.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx#:~:text=SavedObjectsStart), [search_selection.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx#:~:text=SavedObjectsStart), [new_vis_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/new_vis_modal.tsx#:~:text=SavedObjectsStart), [new_vis_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/wizard/new_vis_modal.tsx#:~:text=SavedObjectsStart) | - | +| | [services.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/services.ts#:~:text=SavedObjectsStart), [services.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/services.ts#:~:text=SavedObjectsStart) | - | | | [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/find_object_by_title.test.ts#:~:text=simpleSavedObjectMock), [find_object_by_title.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/find_object_by_title.test.ts#:~:text=simpleSavedObjectMock) | - | | | [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectAttribute), [saved_visualization_references.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualization_references/saved_visualization_references.ts#:~:text=SavedObjectAttribute) | - | | | [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts#:~:text=SavedObjectAttributes), [save_with_confirmation.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/save_with_confirmation.ts#:~:text=SavedObjectAttributes), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/find_object_by_title.ts#:~:text=SavedObjectAttributes), [find_object_by_title.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_objects_utils/find_object_by_title.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes), [saved_visualize_utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/visualizations/public/utils/saved_visualize_utils.ts#:~:text=SavedObjectAttributes)+ 11 more | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 1c7ec65271f44..919c6d6454082 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 19c685f5d07f5..968bc4cc93823 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-16 +date: 2023-02-17 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 676ad6ce01b70..c494514113808 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -240,70 +240,6 @@ } ], "interfaces": [ - { - "parentPluginId": "discover", - "id": "def-public.DiscoverGridSettings", - "type": "Interface", - "tags": [], - "label": "DiscoverGridSettings", - "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "discover", - "id": "def-public.DiscoverGridSettings.columns", - "type": "Object", - "tags": [], - "label": "columns", - "description": [], - "signature": [ - "Record | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "discover", - "id": "def-public.DiscoverGridSettingsColumn", - "type": "Interface", - "tags": [], - "label": "DiscoverGridSettingsColumn", - "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "discover", - "id": "def-public.DiscoverGridSettingsColumn.width", - "type": "number", - "tags": [], - "label": "width", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "discover", "id": "def-public.ISearchEmbeddable", @@ -376,543 +312,36 @@ "tags": [], "label": "SavedSearch", "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.searchSource", - "type": "Object", - "tags": [], - "label": "searchSource", - "description": [], - "signature": [ - "{ create: () => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; fetch: (options?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceSearchOptions", - "text": "SearchSourceSearchOptions" - }, - ") => Promise<", - "SearchResponse", - ">>; history: ", - "SearchRequest", - "[]; setOverwriteDataViewType: (overwriteType: string | false | undefined) => void; setField: (field: K, value: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceFields", - "text": "SearchSourceFields" - }, - "[K]) => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; removeField: (field: K) => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; setFields: (newFields: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceFields", - "text": "SearchSourceFields" - }, - ") => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; getId: () => string; getFields: () => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceFields", - "text": "SearchSourceFields" - }, - "; getField: (field: K, recurse?: boolean) => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceFields", - "text": "SearchSourceFields" - }, - "[K]; getActiveIndexFilter: () => any[]; getOwnField: (field: K) => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceFields", - "text": "SearchSourceFields" - }, - "[K]; createCopy: () => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; createChild: (options?: {}) => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; setParent: (parent?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ISearchSource", - "text": "ISearchSource" - }, - " | undefined, options?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceOptions", - "text": "SearchSourceOptions" - }, - ") => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - "; getParent: () => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - " | undefined; fetch$: (options?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceSearchOptions", - "text": "SearchSourceSearchOptions" - }, - ") => ", - "Observable", - "<", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.IKibanaSearchResponse", - "text": "IKibanaSearchResponse" - }, - "<", - "SearchResponse", - ">>>; onRequestStart: (handler: (searchSource: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSource", - "text": "SearchSource" - }, - ", options?: ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SearchSourceSearchOptions", - "text": "SearchSourceSearchOptions" - }, - " | undefined) => Promise) => void; getSearchRequestBody: () => any; destroy: () => void; getSerializedFields: (recurse?: boolean, includeFields?: boolean) => ", - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.SerializedSearchSourceFields", - "text": "SerializedSearchSourceFields" - }, - "; serialize: () => { searchSourceJSON: string; references: ", - { - "pluginId": "@kbn/core-saved-objects-common", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsCommonPluginApi", - "section": "def-common.SavedObjectReference", - "text": "SavedObjectReference" - }, - "[]; }; toExpressionAst: ({ asDatatable }?: ExpressionAstOptions) => ", - { - "pluginId": "expressions", - "scope": "common", - "docId": "kibExpressionsPluginApi", - "section": "def-common.ExpressionAstExpression", - "text": "ExpressionAstExpression" - }, - "; parseActiveIndexPatternFromQueryString: (queryString: string) => string[]; }" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.id", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.title", - "type": "string", - "tags": [], - "label": "title", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.sort", - "type": "Array", - "tags": [], - "label": "sort", - "description": [], - "signature": [ - "SortOrder", - "[] | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.columns", - "type": "Array", - "tags": [], - "label": "columns", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.description", - "type": "string", - "tags": [], - "label": "description", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.tags", - "type": "Array", - "tags": [], - "label": "tags", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.grid", - "type": "Object", - "tags": [], - "label": "grid", - "description": [], - "signature": [ - "{ columns?: Record | undefined; } | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.hideChart", - "type": "CompoundType", - "tags": [], - "label": "hideChart", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.sharingSavedObjectProps", - "type": "Object", - "tags": [], - "label": "sharingSavedObjectProps", - "description": [], - "signature": [ - "{ outcome?: \"conflict\" | \"exactMatch\" | \"aliasMatch\" | undefined; aliasTargetId?: string | undefined; aliasPurpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; errorJSON?: string | undefined; } | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.viewMode", - "type": "CompoundType", - "tags": [], - "label": "viewMode", - "description": [], - "signature": [ - { - "pluginId": "savedSearch", - "scope": "public", - "docId": "kibSavedSearchPluginApi", - "section": "def-public.VIEW_MODE", - "text": "VIEW_MODE" - }, - " | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.hideAggregatedPreview", - "type": "CompoundType", - "tags": [], - "label": "hideAggregatedPreview", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.rowHeight", - "type": "number", - "tags": [], - "label": "rowHeight", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.isTextBasedQuery", - "type": "CompoundType", - "tags": [], - "label": "isTextBasedQuery", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.usesAdHocDataView", - "type": "CompoundType", - "tags": [], - "label": "usesAdHocDataView", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.timeRestore", - "type": "CompoundType", - "tags": [], - "label": "timeRestore", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.timeRange", - "type": "Object", - "tags": [], - "label": "timeRange", - "description": [], - "signature": [ - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.TimeRange", - "text": "TimeRange" - }, - " | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, + "signature": [ { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.refreshInterval", - "type": "Object", - "tags": [], - "label": "refreshInterval", - "description": [], - "signature": [ - { - "pluginId": "data", - "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.RefreshInterval", - "text": "RefreshInterval" - }, - " | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false + "pluginId": "savedSearch", + "scope": "public", + "docId": "kibSavedSearchPluginApi", + "section": "def-public.SavedSearch", + "text": "SavedSearch" }, + " extends ", { - "parentPluginId": "discover", - "id": "def-public.SavedSearch.rowsPerPage", - "type": "number", - "tags": [], - "label": "rowsPerPage", - "description": [], - "signature": [ - "number | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.SavedSearch", + "text": "SavedSearch" + } + ], + "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "discover", - "id": "def-public.SavedSearch.breakdownField", - "type": "string", + "id": "def-public.SavedSearch.sharingSavedObjectProps", + "type": "Object", "tags": [], - "label": "breakdownField", + "label": "sharingSavedObjectProps", "description": [], "signature": [ - "string | undefined" + "{ outcome?: \"conflict\" | \"exactMatch\" | \"aliasMatch\" | undefined; aliasTargetId?: string | undefined; aliasPurpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; errorJSON?: string | undefined; } | undefined" ], "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", "deprecated": false, @@ -1094,20 +523,7 @@ "initialIsOpen": false } ], - "enums": [ - { - "parentPluginId": "discover", - "id": "def-public.VIEW_MODE", - "type": "Enum", - "tags": [], - "label": "VIEW_MODE", - "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], + "enums": [], "misc": [ { "parentPluginId": "discover", @@ -1224,10 +640,306 @@ "server": { "classes": [], "functions": [], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginLocatorService", + "type": "Interface", + "tags": [], + "label": "DiscoverServerPluginLocatorService", + "description": [], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginLocatorService.asScopedClient", + "type": "Function", + "tags": [], + "label": "asScopedClient", + "description": [], + "signature": [ + "(req: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + ") => Promise<", + { + "pluginId": "discover", + "scope": "server", + "docId": "kibDiscoverPluginApi", + "section": "def-server.LocatorServiceScopedClient", + "text": "LocatorServiceScopedClient" + }, + ">" + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginLocatorService.asScopedClient.$1", + "type": "Object", + "tags": [], + "label": "req", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-server", + "scope": "common", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-common.KibanaRequest", + "text": "KibanaRequest" + }, + "" + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginStartDeps", + "type": "Interface", + "tags": [], + "label": "DiscoverServerPluginStartDeps", + "description": [], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginStartDeps.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "server", + "docId": "kibDataPluginApi", + "section": "def-server.DataPluginStart", + "text": "DataPluginStart" + } + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient", + "type": "Interface", + "tags": [], + "label": "LocatorServiceScopedClient", + "description": [], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient.columnsFromLocator", + "type": "Function", + "tags": [], + "label": "columnsFromLocator", + "description": [], + "signature": [ + "(params: ", + { + "pluginId": "discover", + "scope": "common", + "docId": "kibDiscoverPluginApi", + "section": "def-common.DiscoverAppLocatorParams", + "text": "DiscoverAppLocatorParams" + }, + ") => Promise" + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient.columnsFromLocator.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "common", + "docId": "kibDiscoverPluginApi", + "section": "def-common.DiscoverAppLocatorParams", + "text": "DiscoverAppLocatorParams" + } + ], + "path": "src/plugins/discover/server/locator/columns_from_locator.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient.searchSourceFromLocator", + "type": "Function", + "tags": [], + "label": "searchSourceFromLocator", + "description": [], + "signature": [ + "(params: ", + { + "pluginId": "discover", + "scope": "common", + "docId": "kibDiscoverPluginApi", + "section": "def-common.DiscoverAppLocatorParams", + "text": "DiscoverAppLocatorParams" + }, + ") => Promise<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.SearchSource", + "text": "SearchSource" + }, + ">" + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient.searchSourceFromLocator.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "common", + "docId": "kibDiscoverPluginApi", + "section": "def-common.DiscoverAppLocatorParams", + "text": "DiscoverAppLocatorParams" + } + ], + "path": "src/plugins/discover/server/locator/searchsource_from_locator.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient.titleFromLocator", + "type": "Function", + "tags": [], + "label": "titleFromLocator", + "description": [], + "signature": [ + "(params: ", + { + "pluginId": "discover", + "scope": "common", + "docId": "kibDiscoverPluginApi", + "section": "def-common.DiscoverAppLocatorParams", + "text": "DiscoverAppLocatorParams" + }, + ") => Promise" + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.LocatorServiceScopedClient.titleFromLocator.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "common", + "docId": "kibDiscoverPluginApi", + "section": "def-common.DiscoverAppLocatorParams", + "text": "DiscoverAppLocatorParams" + } + ], + "path": "src/plugins/discover/server/locator/title_from_locator.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [], - "objects": [] + "objects": [], + "start": { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginStart", + "type": "Interface", + "tags": [], + "label": "DiscoverServerPluginStart", + "description": [], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "discover", + "id": "def-server.DiscoverServerPluginStart.locator", + "type": "Object", + "tags": [], + "label": "locator", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "server", + "docId": "kibDiscoverPluginApi", + "section": "def-server.DiscoverServerPluginLocatorService", + "text": "DiscoverServerPluginLocatorService" + } + ], + "path": "src/plugins/discover/server/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "lifecycle": "start", + "initialIsOpen": true + } }, "common": { "classes": [ diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 8a6210844db85..477ac944aafbc 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 107 | 0 | 88 | 7 | +| 97 | 0 | 78 | 7 | ## Client @@ -37,12 +37,17 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k ### Interfaces -### Enums - - ### Consts, variables and types +## Server + +### Start + + +### Interfaces + + ## Common ### Classes diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index b4551b83e1726..ce1eb46a9227a 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 53b17c01735ee..adfc3dcf3d9c4 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 2912d2b598553..f080ea9437d54 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-16 +date: 2023-02-17 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 82c1486689a80..b59298baaef24 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-16 +date: 2023-02-17 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 561e5511d4f8a..ca632138ae715 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-16 +date: 2023-02-17 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 5d73393736696..5dad56ff2777a 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-16 +date: 2023-02-17 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 a11bb262d597b..957524dd30dd2 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-16 +date: 2023-02-17 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 307341e1df79e..c3a8e433af348 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index f3b90aefa2917..b8fd28a7d747c 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 125882023b0c2..197a23feccd8b 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-16 +date: 2023-02-17 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 3d1e900efdc63..501c98326c34b 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-16 +date: 2023-02-17 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 8317a90f00b9c..e01a2b2e5fd05 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-16 +date: 2023-02-17 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 84335fca321f1..3107867473a2f 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-16 +date: 2023-02-17 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 7d2a39d25068c..662c469c78989 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-16 +date: 2023-02-17 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 5f56c15876bf5..db796221e95d6 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-16 +date: 2023-02-17 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 be0ea397efef9..ac8757106b017 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-16 +date: 2023-02-17 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 8c3f99da4e44f..7b355dff85aa0 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-16 +date: 2023-02-17 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 231d4bfd3ee60..a2ac4b7d3e4d1 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-16 +date: 2023-02-17 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 bde358a7e3d11..bc1067bad3ba9 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-16 +date: 2023-02-17 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 a3137a10e5a54..1691745661840 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-16 +date: 2023-02-17 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 fdb7580f7242a..51a59e499ccb8 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-16 +date: 2023-02-17 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 06ca3e0a50bed..f71892f784700 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-16 +date: 2023-02-17 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 facc3ced12015..c4e3017f4a80e 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-16 +date: 2023-02-17 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 7a7b44331611f..3fe146da2ee5f 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-16 +date: 2023-02-17 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 7d81280fae05d..069a7845ef3da 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-16 +date: 2023-02-17 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 11ba5bd516c9c..97f5195b812ec 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-16 +date: 2023-02-17 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 66f541c80817c..d082338074062 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-16 +date: 2023-02-17 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 8df86ca78898f..a55da530155b0 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 214d8176f9d54..283f0825aebf7 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -5481,6 +5481,17 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "fleet", + "id": "def-server.MessageSigningServiceInterface.isEncryptionAvailable", + "type": "boolean", + "tags": [], + "label": "isEncryptionAvailable", + "description": [], + "path": "x-pack/plugins/fleet/server/services/security/message_signing_service.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "fleet", "id": "def-server.MessageSigningServiceInterface.generateKeyPair", @@ -5489,7 +5500,7 @@ "label": "generateKeyPair", "description": [], "signature": [ - "(providedPassphrase?: string | undefined) => Promise" + "(providedPassphrase?: string | undefined) => Promise<{ privateKey: string; publicKey: string; passphrase: string; }>" ], "path": "x-pack/plugins/fleet/server/services/security/message_signing_service.ts", "deprecated": false, @@ -5521,7 +5532,7 @@ "label": "sign", "description": [], "signature": [ - "(serializedMessage: object | Buffer) => Promise<{ data: Buffer; signature: string; }>" + "(message: Record | Buffer) => Promise<{ data: Buffer; signature: string; }>" ], "path": "x-pack/plugins/fleet/server/services/security/message_signing_service.ts", "deprecated": false, @@ -5532,10 +5543,10 @@ "id": "def-server.MessageSigningServiceInterface.sign.$1", "type": "CompoundType", "tags": [], - "label": "serializedMessage", + "label": "message", "description": [], "signature": [ - "object | Buffer" + "Record | Buffer" ], "path": "x-pack/plugins/fleet/server/services/security/message_signing_service.ts", "deprecated": false, @@ -17698,7 +17709,21 @@ "label": "agent", "description": [], "signature": [ - "{ monitoring: { namespace?: string | undefined; use_output?: string | undefined; enabled: boolean; metrics: boolean; logs: boolean; }; download: { sourceURI: string; }; features: Record; } | undefined" + "{ monitoring: { namespace?: string | undefined; use_output?: string | undefined; enabled: boolean; metrics: boolean; logs: boolean; }; download: { sourceURI: string; }; features: Record; protection?: { enabled: boolean; uninstall_token_hash: string; signing_key: string; } | undefined; } | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/agent_policy.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.FullAgentPolicy.signed", + "type": "Object", + "tags": [], + "label": "signed", + "description": [], + "signature": [ + "{ data: string; signature: string; } | undefined" ], "path": "x-pack/plugins/fleet/common/types/models/agent_policy.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 104b2550f6c8d..cecd0c9fb3b8a 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-16 +date: 2023-02-17 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 | |-------------------|-----------|------------------------|-----------------| -| 1077 | 3 | 972 | 26 | +| 1079 | 3 | 974 | 26 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 937f7ac4b119f..889bf1332596a 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-16 +date: 2023-02-17 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 4f4fe8e1456a5..3d6a398eae84b 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-16 +date: 2023-02-17 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 474bcb99cb062..e962d3de693be 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-16 +date: 2023-02-17 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 53b82662e70ac..86cd1942adac4 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-16 +date: 2023-02-17 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 173f639693ca2..1cf460c656ea0 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 4f8d00209d4c0..fd670e0cd6a7f 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 cf1fdb6cd1dbf..054cb1da42696 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 51e4f190a255e..bc60271600007 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-16 +date: 2023-02-17 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 e0fff424e74a4..54eaca1f0d0af 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-16 +date: 2023-02-17 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 ca1b4c40d2f7f..7e1485f998e37 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 1606fb0e50684..0ae2c28bce24f 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 6fba76a809cd2..20344c4d793de 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 82f35c41759dc..67e01c6471b05 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 5fdb1e6590ba6..e35871fd2a549 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-16 +date: 2023-02-17 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 f35a33e3b53ca..c110fd4e65e23 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-16 +date: 2023-02-17 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 59fd65a0247f4..0cec33a4c8e62 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index cfa2f738df491..4477988cbf09a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 d82f788dae55d..41c0e54257cb2 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-16 +date: 2023-02-17 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 4712186a07c5a..d37e57a307c89 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-16 +date: 2023-02-17 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 8ffb3c3bc5fe1..f243d629bcd72 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 3e438262ecca9..99a90c133c5ea 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 18a1976224995..a5ec42433b3f4 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 227c058ff12ee..0f755d7a79dae 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-16 +date: 2023-02-17 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 b4d728183292c..16e2ef21c7f4e 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-16 +date: 2023-02-17 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 779dc409d9d70..f3dc830ce30b2 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 f475efa099218..0fb16ceacfd94 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 041a9e55d93cf..1782bc5634342 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-16 +date: 2023-02-17 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 da4ff62497a80..9843609281952 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-16 +date: 2023-02-17 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 17064fabba6b5..28cae29bbdbd2 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-16 +date: 2023-02-17 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 a60e53f32a4cd..358233785e8bf 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-16 +date: 2023-02-17 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 68de0b62c5a18..a1d332f1967f7 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-16 +date: 2023-02-17 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 0e23290944f23..9714a409b72ed 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-16 +date: 2023-02-17 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 7eaab16696ac0..0650e8a725e4f 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-16 +date: 2023-02-17 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 e813b270b05ad..8fa3954e23ac6 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-16 +date: 2023-02-17 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 8335aa8cff0db..7a73067b3f65d 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index a76d50d334c99..065502a9103d8 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 9cab1e3bdd9e1..9c5f534f24101 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-16 +date: 2023-02-17 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 5075ef437b7f4..f6561e89969aa 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-16 +date: 2023-02-17 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 07d4a5ad4cb32..467731c707193 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 831b6c4fcdb46..239d5c6d09768 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-16 +date: 2023-02-17 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 e3861fec754c9..7d9daf7d37cfe 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-16 +date: 2023-02-17 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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index affaac3e161a1..cf5a8acbb8bd7 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index a09d2e8bea242..6145673a1b354 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 f5219f7fc0df8..55f9f25a0f5d0 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 12aadc3f5deed..1c3f0bb5c5874 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 444b341061a62..448a7be7d5658 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-16 +date: 2023-02-17 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 7a4e26b857c35..79a47f7e112e8 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 c4cecd592eacc..0e9163644898b 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 f05396da060f6..ccf4c494f4002 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 660446ef7de3a..6dc80116a0c40 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 58c0e76feab1c..f071132bce26d 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 8bd8e48fd4d40..060ab9008a7c6 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-16 +date: 2023-02-17 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 8f4ab9c447eb1..8547767c136d8 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 9bbe05de78d9c..07c471c5c6d92 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 05d50e1f0ffc2..627499185f464 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 1a8ca86255726..45f61a0d57f2e 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 8e40919cc1bf5..fce51edcce460 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-16 +date: 2023-02-17 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 1693575cbe2c5..b00a312eb20af 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 f702115a5ac99..55126adc8a44d 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 3f06a33b7dcf7..0e5e03a463f24 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 58fd806777089..3c911329934ed 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-16 +date: 2023-02-17 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 5f93533d4d475..c3a94facdb8e9 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-16 +date: 2023-02-17 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 79e1e625d5b0b..808f43f666101 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 ea47ce0af3677..04aa615e050e9 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 af1a5a0dafe59..12332ceaa478e 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 6362f2d68afa5..113a36cb0c9fb 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 751b8ceb6997e..fced0d6d211f6 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 0970bfed9dfd1..fa11a3a05eab3 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 242cc78e194e4..02bf2f8c0cc10 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 cb104de0f3a91..f163ab8034bb4 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-16 +date: 2023-02-17 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 4548203f35438..a75f3e6550b47 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-16 +date: 2023-02-17 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 34f15270bcc59..bd1bc4c9712e1 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 4f135027be15b..18a7f94084f08 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 5e435db4ed9f2..03bf236210c33 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 67dd2b40c8849..bd582a1e14670 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 6d42570d313d9..c106ab2912f06 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 a36203ad8d7e8..03738d6618986 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-16 +date: 2023-02-17 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 e04f2c8cbf322..eda81a526b6dc 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-16 +date: 2023-02-17 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 439a58d3a11c0..65cd847eec9fe 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 6a563922f9daa..4708588160609 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 75c5f7bb938b7..d87ccef0c3151 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 44840c821f5e5..ab74de56da4fd 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 64969c735503d..fb7c657d299ab 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-16 +date: 2023-02-17 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 2dd8383a610d5..3798f0940d2c3 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 38966007acf5b..42393deccdafc 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 3bd1df9846b8b..e5c71eb131b13 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 631f9c532d630..5b77b863a2311 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-16 +date: 2023-02-17 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 b818d2619b912..a2abe57f647d4 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 5123ca8672c48..5446068ea4fb9 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 d4e4417a37bf9..275cfe125bc68 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 cf67ec9c49b6e..34e572223f436 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 6fa0f62e7c061..511c2e03babb1 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 2c0c51bbb9fa9..6eae92721553a 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 72467bb10b468..1bf54b1d67d79 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 a10a0976d2a25..9a17b57894405 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-16 +date: 2023-02-17 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 634c603bb3736..41aaa87f1da3a 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-16 +date: 2023-02-17 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 37f5bbcfce110..e8ffe3d678ecc 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 99060386eabee..73b9f429ecc7b 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 d8d41b071e5cb..045db4bc9a59e 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 6ca44e245f46e..2d265b816eafc 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 d87730c83727f..de819e093c80d 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 705c70bb5e5ab..f5dd1440c322b 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 f9133dc61749e..bb89d3ac450ec 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 c7259953ec24d..58dd837c48943 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-16 +date: 2023-02-17 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 78f90f7282dd9..d87f95139edfd 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 27dbea1868281..dde8c167d568f 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-16 +date: 2023-02-17 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 9911307138221..57984718332be 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-16 +date: 2023-02-17 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 78bdee40138a6..e58987f4357c0 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 eb27ccf7cbc01..54d7183a7af25 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 173c69eddff16..9bb4d6677127c 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 fc9226ec23be3..eecbf0a76512b 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 7ce0427e580c1..eecfa427eb5b1 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-16 +date: 2023-02-17 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 59a8a8a986d60..fb41fdf775e81 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 9a9f3a39d847f..ad8027dae32a8 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 56435821ea369..ba8f019f34a67 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 0e1d73497c91e..c45802507a1d6 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 4283549d44b6a..48f06a33302fe 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-16 +date: 2023-02-17 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 dbae1eb5468c4..e877b72e871f9 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 1fead6619e9bf..2594ef64e7735 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 1b23e10c1806e..8605900bdbe22 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 1070e020a552b..edee8ef0cdc3c 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 d5d61b95e8a64..46080c80c6e72 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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.devdocs.json b/api_docs/kbn_core_lifecycle_browser.devdocs.json index 69669e96d4319..bd667ba0286a2 100644 --- a/api_docs/kbn_core_lifecycle_browser.devdocs.json +++ b/api_docs/kbn_core_lifecycle_browser.devdocs.json @@ -577,14 +577,6 @@ "plugin": "savedObjects", "path": "src/plugins/saved_objects/public/plugin.ts" }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "embeddable", - "path": "src/plugins/embeddable/public/plugin.tsx" - }, { "plugin": "unifiedSearch", "path": "src/plugins/unified_search/public/types.ts" @@ -633,10 +625,6 @@ "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_actions/index.ts" }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_actions/index.ts" - }, { "plugin": "lens", "path": "x-pack/plugins/lens/public/lens_attribute_service.ts" @@ -777,14 +765,6 @@ "plugin": "dashboardEnhanced", "path": "x-pack/plugins/dashboard_enhanced/public/services/drilldowns/abstract_dashboard_drilldown/components/collect_config_container.tsx" }, - { - "plugin": "graph", - "path": "x-pack/plugins/graph/public/components/source_picker.tsx" - }, - { - "plugin": "graph", - "path": "x-pack/plugins/graph/public/services/source_modal.tsx" - }, { "plugin": "graph", "path": "x-pack/plugins/graph/public/plugin.ts" @@ -865,18 +845,6 @@ "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/application/jobs/new_job/pages/index_or_search/page.tsx" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/application/jobs/new_job/pages/components/datafeed_step/components/data_view/change_data_view.tsx" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/public/application/services/dashboard_service.ts" @@ -885,14 +853,6 @@ "plugin": "cloudSecurityPosture", "path": "x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules.ts" }, - { - "plugin": "graph", - "path": "x-pack/plugins/graph/public/components/search_bar.tsx" - }, - { - "plugin": "graph", - "path": "x-pack/plugins/graph/public/components/guidance_panel/guidance_panel.tsx" - }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/public/common/hooks/use_dashboard_button_href.ts" diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index ec5a983e343d2..8b6077c782258 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 b462c1a7b8784..2950365be8b70 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 de0633c626b8c..98edcfcf678fd 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-16 +date: 2023-02-17 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 c1bc57c3c55ef..93707bc9ed00e 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 2a2be06bffdf3..6e2a59d006dc0 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 694bff205ef67..153b7a3c3acb6 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 fa6b6deac04e7..8a3fb651766c2 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-16 +date: 2023-02-17 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 28a3dfe8e7b6a..c1d92788f86fc 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 914ad4cbd9779..a6723858e4466 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 7ad9c4c857823..6218aa9e9d5c9 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 916241b138610..023e3eabdfece 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 b397d7e6d42fc..756d0a143f0d8 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-16 +date: 2023-02-17 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 7559367cad6e6..cc08aefdb0ee6 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 c3b34f91967fa..8325ec0b22455 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 8059612a8bd69..5c8c88946c4d0 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 4530ad8ae700e..77c51982b6ae8 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-16 +date: 2023-02-17 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 c0c54e87c07f5..9b7c09332dcd7 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 70edb49e35926..dfdb06b9611f1 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 bb1d3ec670f6b..0fcbd8b906b79 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 c759d1dbe2306..08390a9b7494d 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 21f5e0487657f..4bc10e8f03f94 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 49cdf84b8a81d..44d887e8dde0a 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 d2f6135b86b98..adf0b742c33c7 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 3662d97f6916f..577a3aa02e0b3 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 735deb2923ddc..b47b1a5513cc1 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 da0ef8f5cbf4d..d75707d2c5c33 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 7f05061343161..609bd0b6bbb13 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-16 +date: 2023-02-17 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 1bb5d6f6bda0e..95b09cb802728 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 978edbf1e331e..4dcaee7e015bf 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-16 +date: 2023-02-17 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 0d641275140a5..ae2b331766759 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 238337e875534..83de4de44e468 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 207c50bbbb8c7..8d9cd34e1777a 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 9ed3166096ace..ec6b39c0d7edf 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 6aabab831ddcb..27d67ffb1eb29 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json index c2152fcd5914f..35826ef8cc505 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_browser.devdocs.json @@ -2207,10 +2207,6 @@ "plugin": "savedObjects", "path": "src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts" }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, { "plugin": "presentationUtil", "path": "src/plugins/presentation_util/public/services/dashboards/dashboards_service.ts" @@ -3916,50 +3912,6 @@ "plugin": "savedObjects", "path": "src/plugins/saved_objects/public/saved_object/helpers/find_object_by_title.ts" }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, { "plugin": "embeddable", "path": "src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_flyout.tsx" @@ -4152,14 +4104,6 @@ "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/common/types/index.ts" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/source_selection/source_selection.tsx" - }, { "plugin": "infra", "path": "x-pack/plugins/infra/public/hooks/use_create_saved_object.tsx" diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index ecbeabe4e3065..ded4eb32ab8e3 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 dbc1314565879..198845f1609a9 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-16 +date: 2023-02-17 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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 8772394c5e46f..fb0a032991a64 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 9c4fa5819cce4..8e1c1d8f8c18a 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 23c6c35c2039c..4bedd22ec2e43 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 651e7e4097aa4..186442a494285 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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.devdocs.json b/api_docs/kbn_core_saved_objects_browser.devdocs.json index d40aa8ce76ba9..ee794076334b8 100644 --- a/api_docs/kbn_core_saved_objects_browser.devdocs.json +++ b/api_docs/kbn_core_saved_objects_browser.devdocs.json @@ -57,14 +57,6 @@ "plugin": "@kbn/core", "path": "src/core/public/index.ts" }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, - { - "plugin": "savedObjects", - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx" - }, { "plugin": "savedSearch", "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts" @@ -81,22 +73,6 @@ "plugin": "visualizations", "path": "src/plugins/visualizations/public/services.ts" }, - { - "plugin": "visualizations", - "path": "src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx" - }, - { - "plugin": "visualizations", - "path": "src/plugins/visualizations/public/wizard/search_selection/search_selection.tsx" - }, - { - "plugin": "visualizations", - "path": "src/plugins/visualizations/public/wizard/new_vis_modal.tsx" - }, - { - "plugin": "visualizations", - "path": "src/plugins/visualizations/public/wizard/new_vis_modal.tsx" - }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx" diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index c154f02694307..06b09afb539b3 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 5ae5a82ee4237..310d0dcfbc49a 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 fdcf9166372ff..0aa0806899cfc 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 b7b195fba3528..cc7a6275a3d4a 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-16 +date: 2023-02-17 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 a38e20bace754..add345ec49fe1 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 549bf381786d7..831f657e2d1af 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 8c20317335a2c..704c3a3751680 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 6a8c24a0190d1..52fdebf24516e 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 48022a5f10927..8c6c0da3a2cde 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-16 +date: 2023-02-17 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 77b2f3e60023e..f6b84ab940a49 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 c85ff0bd026e4..a5ddda71a28c8 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 759fcc31b19dc..5a155de305d89 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index f766dbf91f4ed..142bf8d0ee443 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-16 +date: 2023-02-17 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 a32de019c776b..677209a0a3004 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 1438b8b6b16db..6c287504043e9 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-16 +date: 2023-02-17 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 f033238f49811..750e4a1659bce 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 61067f029fc72..8b7abe40838aa 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 0fc6c866a1a8a..941a96b39b784 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-16 +date: 2023-02-17 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 2120cc7ec4efc..d705152409063 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 9458a3945d4c7..02829a211b0be 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 65aab7d20315a..1a3d47bef95c8 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-16 +date: 2023-02-17 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 310aa92948b17..b50e65d197aaa 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 035f88057b053..a2d82c164a3fb 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index d06104243dc19..a3d8bb0997d83 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 5fbcd1be9692a..da18be174b792 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 a83b90b2748f7..6d1e90e0553cc 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 5aba39e5b836e..bfd53648ec8a2 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 c5c4cf61ca2a6..588b9a2da2813 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 ca30857413d36..287053ddd1559 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-16 +date: 2023-02-17 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 9c9484b7afee9..2a5f62a6cc694 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-16 +date: 2023-02-17 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 c01ad7d6eb83b..8e3de64c3e743 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 e2a042fd22137..e43413139c6fb 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 6c65a8c267647..cb72f98c8b96b 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-16 +date: 2023-02-17 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 1ed33d3489b68..4ed94b629781e 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-16 +date: 2023-02-17 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 97cf81dd6cf19..9602037e11af1 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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_crypto.mdx b/api_docs/kbn_crypto.mdx index 414ef07a41bb8..f67e7f485d30f 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-16 +date: 2023-02-17 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 93230a78f1ae1..23c945fdd6727 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 775e7af2567b6..359bc1a5eeb4d 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 9a50676c8844e..75eec5d53402e 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index c968e5a148c34..914d091fbf0e2 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-16 +date: 2023-02-17 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 38771fed3d0cb..ef106cd92c9b1 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-16 +date: 2023-02-17 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 13e93db276218..8466d264af2d0 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-16 +date: 2023-02-17 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 8b774dbe02cd8..2a70a32c0c223 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index b4f574a854eea..5c2a836fada5d 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-16 +date: 2023-02-17 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 208971474ba68..9805ca4bbcf8c 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 9560edf50e575..b562b894201d1 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index cbcddb5c26572..50d0bb7eb8a0e 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 2379c28b2290d..c91dcb2533b11 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-16 +date: 2023-02-17 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_es.mdx b/api_docs/kbn_es.mdx index ae60f75644b93..43bde6c6db392 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-16 +date: 2023-02-17 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 195d55a5fefcd..49e023c2027ba 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-16 +date: 2023-02-17 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 cfd05a2910055..ea311ef3e0da2 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-16 +date: 2023-02-17 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 d96ebe475c3a8..f64229db30d7b 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-16 +date: 2023-02-17 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 85e37890b4f81..7fe5f74909249 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-16 +date: 2023-02-17 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 f1e05ee91a52a..691115b413fca 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 46f49d6f3a440..b7c52e598672e 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 7b1c5c2782229..0ce8107a53235 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 99459b2724e4c..cb31745666908 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index b62d5eae0ceac..fd698ff67e1cc 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 3046a4c6ca139..afeebcd3c145a 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-16 +date: 2023-02-17 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 d076ef6209022..c859db1d559ca 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-16 +date: 2023-02-17 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 d18719c1a1c52..c244dd63665d9 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 c7caf7e1381c4..d807919d837ce 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-16 +date: 2023-02-17 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 b3bd82323024e..17e3a0beb178a 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-16 +date: 2023-02-17 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 46a7f6f0fd6d9..89da229bcef5b 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-16 +date: 2023-02-17 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 49d48495b2a09..9db0436c42f80 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-16 +date: 2023-02-17 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 7de7fb437791c..1a5883775264b 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-16 +date: 2023-02-17 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 8408f5eaecc80..5fe087899b577 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 822131c4358c6..43f482cd23fd6 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-16 +date: 2023-02-17 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 80860d0973c1e..b850538ddca4e 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 42bf5e30df173..1b30e62c4eda8 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.devdocs.json b/api_docs/kbn_journeys.devdocs.json index a367aafa2dd81..d06f674126af2 100644 --- a/api_docs/kbn_journeys.devdocs.json +++ b/api_docs/kbn_journeys.devdocs.json @@ -422,6 +422,22 @@ ], "returnComment": [] }, + { + "parentPluginId": "@kbn/journeys", + "id": "def-common.JourneyConfig.getFtrConfigPath", + "type": "Function", + "tags": [], + "label": "getFtrConfigPath", + "description": [], + "signature": [ + "() => string | undefined" + ], + "path": "packages/kbn-journeys/journey/journey_config.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "@kbn/journeys", "id": "def-common.JourneyConfig.getEsArchives", diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 208d175598ba2..1c79dcefe0556 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 67 | 0 | 62 | 5 | +| 68 | 0 | 63 | 5 | ## Common diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index ca4312aa608d6..5f4cb5da39721 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-16 +date: 2023-02-17 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 2355effaa4338..9475b4a34007a 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-16 +date: 2023-02-17 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 db40623912faa..35dbcee81eaa6 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 206189b5817ea..dc86cf850d597 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-16 +date: 2023-02-17 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 d0c35339b2859..7c3b76ea4a0cb 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 0bc1e9c2a083f..29a06d5292c6a 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 67d80d955891f..a9453f47c6c3b 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 94823871e3f66..e968a85524f7c 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-16 +date: 2023-02-17 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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 5155e41df91ac..5aa89b6e919bb 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-16 +date: 2023-02-17 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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 044d9fe5c5d5d..bf79b5f19003e 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-16 +date: 2023-02-17 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 7bc8836029023..77a04081a8b09 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-16 +date: 2023-02-17 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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index d9dfb7bbdc992..8c8bf19d80799 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-16 +date: 2023-02-17 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 c2e5309373671..ef043b733a4c8 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-16 +date: 2023-02-17 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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 1b16e64a1b48f..0b07a6b17eaf9 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-16 +date: 2023-02-17 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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 510c572fe1d48..6b005d7d7c430 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-16 +date: 2023-02-17 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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 0d531d2730049..1df7ea79e0647 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index ff84137fdd118..cb8166f8d876a 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index c9639f1afba8c..9ae1dd4500ff3 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-16 +date: 2023-02-17 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 33f62f4a23306..9987b9aef5025 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-16 +date: 2023-02-17 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 9bc705ebc0cf2..3b7e65353269a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 57c232ed410bc..54588d3173561 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 6c4b9093948ad..c9fa28a552e72 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-16 +date: 2023-02-17 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 eee4f24cb91f0..299d2bd982c91 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 2c07170eaf526..703331a5fb114 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 36a3dcdd58e81..9433d2bff1393 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-16 +date: 2023-02-17 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 d636dc99094dc..759804f927f10 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-16 +date: 2023-02-17 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 2a373c86eb76f..29c5c19e88e3f 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-16 +date: 2023-02-17 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 2b12d25b3fede..848fae66b8d28 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index ac42537054b41..c138c9d720df1 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index 8e15b282dd6c8..51429bd28d4a4 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -1266,7 +1266,7 @@ "label": "AlertConsumers", "description": [], "signature": [ - "\"uptime\" | \"siem\" | \"apm\" | \"logs\" | \"infrastructure\" | \"observability\"" + "\"uptime\" | \"siem\" | \"apm\" | \"logs\" | \"infrastructure\" | \"observability\" | \"slo\"" ], "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", "deprecated": false, @@ -1521,7 +1521,7 @@ "label": "ValidFeatureId", "description": [], "signature": [ - "\"uptime\" | \"siem\" | \"apm\" | \"logs\" | \"infrastructure\" | \"observability\"" + "\"uptime\" | \"siem\" | \"apm\" | \"logs\" | \"infrastructure\" | \"observability\" | \"slo\"" ], "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", "deprecated": false, @@ -1570,7 +1570,7 @@ "\nregistering a new instance of the rule data client\nin a new plugin will require updating the below data structure\nto include the index name where the alerts as data will be written to." ], "signature": [ - "{ readonly APM: \"apm\"; readonly LOGS: \"logs\"; readonly INFRASTRUCTURE: \"infrastructure\"; readonly OBSERVABILITY: \"observability\"; readonly SIEM: \"siem\"; readonly UPTIME: \"uptime\"; }" + "{ readonly APM: \"apm\"; readonly LOGS: \"logs\"; readonly INFRASTRUCTURE: \"infrastructure\"; readonly OBSERVABILITY: \"observability\"; readonly SLO: \"slo\"; readonly SIEM: \"siem\"; readonly UPTIME: \"uptime\"; }" ], "path": "packages/kbn-rule-data-utils/src/alerts_as_data_rbac.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index a4afd817ac65f..f94403ed8d89e 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 020034226e817..6ada5bcafea3d 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 5fa83b8867d0b..d09ddc4ae7db2 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-16 +date: 2023-02-17 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 20c071e13c510..4e1b009acc4d3 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 fd52fef164cba..8b7ab5f06e73a 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index f38890ce0c0b0..371087b21beed 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 524ad7930f21d..aea8f64f661c6 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-16 +date: 2023-02-17 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 dc368dc60e47b..2b0d322fc1e78 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-16 +date: 2023-02-17 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 ef2c040d9d90c..9d6058955ce9f 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-16 +date: 2023-02-17 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 62474c089a86e..13e4d96f7daaa 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 6377a0b56da96..533131675ed1d 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-16 +date: 2023-02-17 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 6561acaa7e1e3..1f3ce713ccf3e 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-16 +date: 2023-02-17 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 6eee665ab2421..9f92c3650b186 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-16 +date: 2023-02-17 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 d917da592a381..b5f7e3c425ebd 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 9e377e1046d91..3d4b9b7bf304d 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-16 +date: 2023-02-17 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 e3c1636d2583e..36e46034d2985 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-16 +date: 2023-02-17 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 aa69ead0f2a80..e4ca1d19293b8 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-16 +date: 2023-02-17 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 2bf1023538138..d9833a2ac3193 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-16 +date: 2023-02-17 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 8052a0c477ce2..fe084a0c166f9 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 7ec8ecebf808e..6ef192f81d249 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-16 +date: 2023-02-17 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 748523e2b6dec..4ccc0cb03bbb9 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index a54eda9059921..3d3689b548a69 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index b53d63937bad5..e957a4549e6c3 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 90aad6717ab26..5c4f039fd4b06 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 448f01ef24cb1..96adda36ddd26 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-16 +date: 2023-02-17 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 c112d796888b7..6af9958a999f0 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-16 +date: 2023-02-17 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 e0775860046a7..ee6e2102ef4be 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 184df4d0dfb4a..9d856a6a95d39 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-16 +date: 2023-02-17 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 cb15f3227f596..b46203dcd47c1 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-16 +date: 2023-02-17 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 2eec94a8e6cf0..564d0516d92d9 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 1e37bcb30956a..0fba00f7967a7 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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.devdocs.json b/api_docs/kbn_shared_ux_file_picker.devdocs.json index c291b1d0ee29d..0838853073257 100644 --- a/api_docs/kbn_shared_ux_file_picker.devdocs.json +++ b/api_docs/kbn_shared_ux_file_picker.devdocs.json @@ -247,6 +247,22 @@ ], "returnComment": [] }, + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.uploadMeta", + "type": "Unknown", + "tags": [], + "label": "uploadMeta", + "description": [ + "\n`meta` value to be used for file uploads" + ], + "signature": [ + "unknown" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/shared-ux-file-picker", "id": "def-common.Props.pageSize", diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 9d4ae20f6a40d..a1fc9c3a3f083 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.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 | |-------------------|-----------|------------------------|-----------------| -| 13 | 0 | 6 | 0 | +| 14 | 0 | 6 | 0 | ## Common diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 89aeea6934702..c2f94363250c8 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-16 +date: 2023-02-17 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 63ac5a36f3d39..f6c33a1e60ffb 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-16 +date: 2023-02-17 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 334c1cd62f96d..9c9c8a04752a6 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-16 +date: 2023-02-17 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 c4db69beafd2c..7c91d82cbc32d 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 2fae876b53379..1c3c3f84d44eb 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-16 +date: 2023-02-17 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 128ea8e8df9ef..a991dc321498a 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 8f7b75ddf4c75..afe272b276225 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-16 +date: 2023-02-17 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 c5b2c4f5789fa..4b88c03c94a50 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 da29f12b22595..81c1fddb4964a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-16 +date: 2023-02-17 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 a7e4c290cbeda..cd2912aeac595 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 c84b324f13ed5..c4d1869bc43a2 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-16 +date: 2023-02-17 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 623f8e5f6072f..25c7866038935 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 237333dead873..ec847ef6ff53d 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-16 +date: 2023-02-17 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 3e9711497a8a2..a3f461766bfb0 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-16 +date: 2023-02-17 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 774024740a0a1..9e155a08b8de5 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 01d3b6085c13e..7006b24607c4a 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 5a1d052961b55..019e8d4766814 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-16 +date: 2023-02-17 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 a7277b6729192..a75d581f18deb 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-16 +date: 2023-02-17 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 804f45a24e334..92240bd13d681 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 ecc7eda56ae9f..eb80ae38ea4e7 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-16 +date: 2023-02-17 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 26fc8e4dd82b4..397f3bcf5ebd1 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-16 +date: 2023-02-17 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 2bc966fafaaea..3f05c314126a9 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-16 +date: 2023-02-17 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 8d66ebbd7ab5d..6db91092e595a 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-16 +date: 2023-02-17 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 4a63da3314288..ae5c18b336f2b 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 4437e5bd930fb..cd41e3eafbaf2 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-16 +date: 2023-02-17 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 506bf83435e55..362ec901a129f 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 8cfc9af4765fb..a03e3b8a3e50a 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index e7b44a0595f2b..b933eb09fa3d9 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-16 +date: 2023-02-17 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 639033423f782..e880520ab1036 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-16 +date: 2023-02-17 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 71fa66aa5cd72..4f5775d0954ee 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-16 +date: 2023-02-17 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 f34f4e79b477c..9a1d6218ec271 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-16 +date: 2023-02-17 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 7ad93b1efc641..2123295bfa136 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 547a3531cc3ca..b5dc8dabef401 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-16 +date: 2023-02-17 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 4c08f55f95fac..fd0ffd371ed19 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index d53ba028587f8..f191a0a320869 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 7cf648110f7bb..8c42823bb8ed0 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-16 +date: 2023-02-17 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 af6e4c619a775..3fbc16b9cc311 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-16 +date: 2023-02-17 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 c9c179c190b3d..8e07c34fe05d7 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-16 +date: 2023-02-17 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 86665a71a6590..95d94c26c37f3 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-16 +date: 2023-02-17 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 cb914af306315..e8a3316643d55 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 92ec8131e2e49..5a47037cf9c1c 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-16 +date: 2023-02-17 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 73effc933ae1c..4fc67b290dfbc 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-16 +date: 2023-02-17 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 8151013e56478..b51b0a7155d5a 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-16 +date: 2023-02-17 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 32dc2d89e7ebb..57891fd669300 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 526c731c0dd80..fb8dcb6da6e97 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 537a58309875b..1d0e71422ddd2 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-16 +date: 2023-02-17 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 34e2f7e1ee6d5..8bdad4cd2907b 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-16 +date: 2023-02-17 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 73999ea92082c..df70db764e657 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-16 +date: 2023-02-17 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 a60441eb5d287..0add010ed494d 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-16 +date: 2023-02-17 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 3292575c90c53..d27bae5f4929e 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-16 +date: 2023-02-17 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 0a02ad7af5723..4fa6f089222a8 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-16 +date: 2023-02-17 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 29ec9594da556..b21873b91153d 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 1b015c35b488b..fa6aded325d37 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index fe9acfdd27fde..c9b8f8b977309 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 98da0947c88ee..a0f104c545f06 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-16 +date: 2023-02-17 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 6ebdfb4285516..6b3cba1fe29af 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-16 +date: 2023-02-17 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 ff1f9c17c2136..7795eb0ebce31 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index d670b1b24d7f6..28acbc782ef73 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index a09fb315e1d15..83606e35329a5 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-16 +date: 2023-02-17 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 979e298e20962..62da752984b66 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-16 +date: 2023-02-17 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 2580638a9ee21..bd8229e3e4ef4 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-16 +date: 2023-02-17 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 bb76a13d3448b..cad52e6bd252c 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 7f5e095373c87..9a89c7b7a7f0c 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-16 +date: 2023-02-17 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 777c50843ad4f..9c56b9606c241 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -14157,6 +14157,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "observability", + "id": "def-common.sloFeatureId", + "type": "string", + "tags": [], + "label": "sloFeatureId", + "description": [], + "signature": [ + "\"slo\"" + ], + "path": "x-pack/plugins/observability/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observability", "id": "def-common.SYNTHETICS_BLOCKED_TIMINGS", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 7a7ffa9c14ca1..2ab9cdaa3ff90 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.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 | |-------------------|-----------|------------------------|-----------------| -| 614 | 43 | 608 | 32 | +| 615 | 43 | 609 | 32 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 138fd3b29816f..c81d1ba3909ed 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 4c5a4a5c99f3d..2ac00a0811c33 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 67630 | 515 | 58461 | 1230 | +| 67652 | 515 | 58482 | 1232 | ## Plugin Directory @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 256 | 8 | 251 | 24 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 36 | 1 | 32 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 12 | 0 | 1 | 2 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 489 | 1 | 478 | 39 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 486 | 1 | 475 | 40 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 42 | 0 | 42 | 65 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 89 | 1 | 74 | 2 | @@ -61,7 +61,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1028 | 0 | 243 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 28 | 3 | 24 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 10 | 0 | 8 | 2 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 107 | 0 | 88 | 7 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 97 | 0 | 78 | 7 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 532 | 8 | 430 | 4 | @@ -90,7 +90,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 62 | 0 | 62 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 254 | 1 | 45 | 5 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 1 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1077 | 3 | 972 | 26 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1079 | 3 | 974 | 26 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 68 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -127,7 +127,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 614 | 43 | 608 | 32 | +| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 615 | 43 | 609 | 32 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | painlessLab | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 219 | 7 | 163 | 12 | @@ -137,12 +137,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 21 | 0 | 21 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 257 | 0 | 228 | 13 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 24 | 0 | 19 | 2 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 196 | 2 | 155 | 5 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 216 | 2 | 175 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 16 | 0 | 16 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 154 | 0 | 140 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 79 | 0 | 73 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 100 | 0 | 52 | 1 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the definition and helper methods around saved searches, used by discover and visualizations. | 45 | 0 | 45 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the definition and helper methods around saved searches, used by discover and visualizations. | 55 | 0 | 55 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 13 | 0 | | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 4 | | searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | @@ -418,7 +418,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | | | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 24 | 0 | 24 | 3 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 0 | 13 | 0 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 67 | 0 | 62 | 5 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 68 | 0 | 63 | 5 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 35 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 108 | 0 | 107 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 7 | 0 | 5 | 0 | @@ -479,7 +479,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 2 | 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) | - | 1 | 0 | 1 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 13 | 0 | 6 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 14 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 7 | 0 | 7 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 17 | 0 | 15 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 17 | 0 | 9 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index f9b865ff8cbcf..ceaa7cacb9005 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-16 +date: 2023-02-17 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 e6001e7201715..f6a88f3527e67 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 1548c3dfb2d53..bb0eb6a87d169 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-16 +date: 2023-02-17 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 d0a51aedf8ce5..3863034eef051 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-16 +date: 2023-02-17 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 a21729e4639b7..5a72ca5988cdf 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index b098acea5fb03..9e7abc7076580 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -1943,7 +1943,9 @@ "section": "def-common.SavedObjectReference", "text": "SavedObjectReference" }, - "[]) => TParams; } | undefined; isExportable: boolean; defaultScheduleInterval?: string | undefined; ruleTaskTimeout?: string | undefined; doesSetRecoveryContext?: boolean | undefined; autoRecoverAlerts?: boolean | undefined; }" + "[]) => TParams; } | undefined; isExportable: boolean; defaultScheduleInterval?: string | undefined; ruleTaskTimeout?: string | undefined; doesSetRecoveryContext?: boolean | undefined; autoRecoverAlerts?: boolean | undefined; getViewInAppRelativeUrl?: ", + "GetViewInAppRelativeUrlFn", + " | undefined; }" ], "path": "x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts", "deprecated": false, @@ -2157,7 +2159,7 @@ "\nID of the Kibana feature associated with the index.\nUsed by alerts-as-data RBAC.\n\nNote from @dhurley14\nThe purpose of the `feature` param is to force the user to update\nthe data structure which contains the mapping of consumers to alerts\nas data indices. The idea is it is typed such that it forces the\nuser to go to the code and modify it. At least until a better system\nis put in place or we move the alerts as data client out of rule registry.\n" ], "signature": [ - "\"uptime\" | \"siem\" | \"apm\" | \"logs\" | \"infrastructure\" | \"observability\"" + "\"uptime\" | \"siem\" | \"apm\" | \"logs\" | \"infrastructure\" | \"observability\" | \"slo\"" ], "path": "x-pack/plugins/rule_registry/server/rule_data_plugin_service/index_options.ts", "deprecated": false, diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 21a9aee8492cd..052e71b420386 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-02-16 +date: 2023-02-17 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 4d44041e9be5c..990c14778a8f9 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.devdocs.json b/api_docs/saved_objects.devdocs.json index 594d2fc7d11cc..b6ed1819ec684 100644 --- a/api_docs/saved_objects.devdocs.json +++ b/api_docs/saved_objects.devdocs.json @@ -889,15 +889,7 @@ "label": "getSavedObjectFinder", "description": [], "signature": [ - "(savedObject: ", - { - "pluginId": "@kbn/core-saved-objects-browser", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsBrowserPluginApi", - "section": "def-common.SavedObjectsStart", - "text": "SavedObjectsStart" - }, - ", uiSettings: ", + "(uiSettings: ", { "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", @@ -905,6 +897,14 @@ "section": "def-common.IUiSettingsClient", "text": "IUiSettingsClient" }, + ", http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "common", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.HttpSetup", + "text": "HttpSetup" + }, ") => (props: ", "SavedObjectFinderProps", ") => JSX.Element" @@ -918,15 +918,15 @@ "id": "def-public.getSavedObjectFinder.$1", "type": "Object", "tags": [], - "label": "savedObject", + "label": "uiSettings", "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-browser", + "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", - "docId": "kibKbnCoreSavedObjectsBrowserPluginApi", - "section": "def-common.SavedObjectsStart", - "text": "SavedObjectsStart" + "docId": "kibKbnCoreUiSettingsBrowserPluginApi", + "section": "def-common.IUiSettingsClient", + "text": "IUiSettingsClient" } ], "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx", @@ -939,15 +939,15 @@ "id": "def-public.getSavedObjectFinder.$2", "type": "Object", "tags": [], - "label": "uiSettings", + "label": "http", "description": [], "signature": [ { - "pluginId": "@kbn/core-ui-settings-browser", + "pluginId": "@kbn/core-http-browser", "scope": "common", - "docId": "kibKbnCoreUiSettingsBrowserPluginApi", - "section": "def-common.IUiSettingsClient", - "text": "IUiSettingsClient" + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.HttpSetup", + "text": "HttpSetup" } ], "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx", @@ -1329,7 +1329,7 @@ "tags": [], "label": "FinderAttributes", "description": [], - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx", + "path": "src/plugins/saved_objects/common/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1343,7 +1343,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx", + "path": "src/plugins/saved_objects/common/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1357,7 +1357,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx", + "path": "src/plugins/saved_objects/common/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1368,7 +1368,7 @@ "tags": [], "label": "type", "description": [], - "path": "src/plugins/saved_objects/public/finder/saved_object_finder.tsx", + "path": "src/plugins/saved_objects/common/types.ts", "deprecated": false, "trackAdoption": false } @@ -2816,11 +2816,11 @@ "signature": [ "(savedObject: ", { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, ") => ", "IconType" @@ -2838,11 +2838,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, "" ], @@ -2864,11 +2864,11 @@ "signature": [ "((savedObject: ", { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, ") => string) | undefined" ], @@ -2885,11 +2885,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, "" ], @@ -2911,11 +2911,11 @@ "signature": [ "((savedObject: ", { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, ") => boolean) | undefined" ], @@ -2932,11 +2932,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, "" ], @@ -2958,11 +2958,11 @@ "signature": [ "((savedObject: ", { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, ") => string) | undefined" ], @@ -2979,11 +2979,11 @@ "description": [], "signature": [ { - "pluginId": "@kbn/core-saved-objects-api-browser", + "pluginId": "savedObjects", "scope": "common", - "docId": "kibKbnCoreSavedObjectsApiBrowserPluginApi", - "section": "def-common.SimpleSavedObject", - "text": "SimpleSavedObject" + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" }, "" ], @@ -3261,15 +3261,7 @@ "label": "SavedObjectFinderUiProps", "description": [], "signature": [ - "{ savedObjects: ", - { - "pluginId": "@kbn/core-saved-objects-browser", - "scope": "common", - "docId": "kibKbnCoreSavedObjectsBrowserPluginApi", - "section": "def-common.SavedObjectsStart", - "text": "SavedObjectsStart" - }, - "; uiSettings: ", + "{ uiSettings: ", { "pluginId": "@kbn/core-ui-settings-browser", "scope": "common", @@ -3277,6 +3269,14 @@ "section": "def-common.IUiSettingsClient", "text": "IUiSettingsClient" }, + "; http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "common", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.HttpSetup", + "text": "HttpSetup" + }, "; } & ", "SavedObjectFinderProps" ], @@ -3445,7 +3445,279 @@ "common": { "classes": [], "functions": [], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "savedObjects", + "id": "def-common.FinderAttributes", + "type": "Interface", + "tags": [], + "label": "FinderAttributes", + "description": [], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjects", + "id": "def-common.FinderAttributes.title", + "type": "string", + "tags": [], + "label": "title", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FinderAttributes.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FinderAttributes.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP", + "type": "Interface", + "tags": [], + "label": "FindQueryHTTP", + "description": [], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.perPage", + "type": "number", + "tags": [], + "label": "perPage", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.page", + "type": "number", + "tags": [], + "label": "page", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string | string[]" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.search", + "type": "string", + "tags": [], + "label": "search", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.searchFields", + "type": "Array", + "tags": [], + "label": "searchFields", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.defaultSearchOperator", + "type": "CompoundType", + "tags": [], + "label": "defaultSearchOperator", + "description": [], + "signature": [ + "\"AND\" | \"OR\" | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.sortField", + "type": "string", + "tags": [], + "label": "sortField", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.sortOrder", + "type": "CompoundType", + "tags": [], + "label": "sortOrder", + "description": [], + "signature": [ + "\"asc\" | \"desc\" | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindQueryHTTP.fields", + "type": "CompoundType", + "tags": [], + "label": "fields", + "description": [], + "signature": [ + "string | string[] | undefined" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindResponseHTTP", + "type": "Interface", + "tags": [], + "label": "FindResponseHTTP", + "description": [], + "signature": [ + { + "pluginId": "savedObjects", + "scope": "common", + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.FindResponseHTTP", + "text": "FindResponseHTTP" + }, + "" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjects", + "id": "def-common.FindResponseHTTP.saved_objects", + "type": "Array", + "tags": [], + "label": "saved_objects", + "description": [], + "signature": [ + { + "pluginId": "savedObjects", + "scope": "common", + "docId": "kibSavedObjectsPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" + }, + "[]" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindResponseHTTP.total", + "type": "number", + "tags": [], + "label": "total", + "description": [], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindResponseHTTP.page", + "type": "number", + "tags": [], + "label": "page", + "description": [], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.FindResponseHTTP.per_page", + "type": "number", + "tags": [], + "label": "per_page", + "description": [], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [ { @@ -3477,6 +3749,28 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "savedObjects", + "id": "def-common.SavedObjectCommon", + "type": "Type", + "tags": [], + "label": "SavedObjectCommon", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-common", + "scope": "common", + "docId": "kibKbnCoreSavedObjectsCommonPluginApi", + "section": "def-common.SavedObject", + "text": "SavedObject" + }, + "" + ], + "path": "src/plugins/saved_objects/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 29d5b2a6ec11d..285d7589f3b43 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.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 | |-------------------|-----------|------------------------|-----------------| -| 196 | 2 | 155 | 5 | +| 216 | 2 | 175 | 5 | ## Client @@ -45,6 +45,9 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core ## Common +### Interfaces + + ### Consts, variables and types diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 8917557f4c7b0..8d6be9ce6902e 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-02-16 +date: 2023-02-17 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 77a441c39dc96..07cdfe4ddd006 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-02-16 +date: 2023-02-17 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 a2340928add9e..76b9e75213aad 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-02-16 +date: 2023-02-17 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 70ef0ecfd6823..db75efd3c3ca6 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.devdocs.json b/api_docs/saved_search.devdocs.json index f2630166f76f1..8599dfd744e06 100644 --- a/api_docs/saved_search.devdocs.json +++ b/api_docs/saved_search.devdocs.json @@ -223,18 +223,376 @@ "interfaces": [ { "parentPluginId": "savedSearch", - "id": "def-public.DiscoverGridSettings", + "id": "def-public.SavedSearch", "type": "Interface", "tags": [], - "label": "DiscoverGridSettings", + "label": "SavedSearch", "description": [], + "signature": [ + { + "pluginId": "savedSearch", + "scope": "public", + "docId": "kibSavedSearchPluginApi", + "section": "def-public.SavedSearch", + "text": "SavedSearch" + }, + " extends ", + { + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.SavedSearch", + "text": "SavedSearch" + } + ], "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "savedSearch", - "id": "def-public.DiscoverGridSettings.columns", + "id": "def-public.SavedSearch.sharingSavedObjectProps", + "type": "Object", + "tags": [], + "label": "sharingSavedObjectProps", + "description": [], + "signature": [ + "{ outcome?: \"conflict\" | \"exactMatch\" | \"aliasMatch\" | undefined; aliasTargetId?: string | undefined; aliasPurpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; errorJSON?: string | undefined; } | undefined" + ], + "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "savedSearch", + "id": "def-public.SaveSavedSearchOptions", + "type": "Interface", + "tags": [], + "label": "SaveSavedSearchOptions", + "description": [], + "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedSearch", + "id": "def-public.SaveSavedSearchOptions.onTitleDuplicate", + "type": "Function", + "tags": [], + "label": "onTitleDuplicate", + "description": [], + "signature": [ + "(() => void) | undefined" + ], + "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "savedSearch", + "id": "def-public.SaveSavedSearchOptions.isTitleDuplicateConfirmed", + "type": "CompoundType", + "tags": [], + "label": "isTitleDuplicateConfirmed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "savedSearch", + "id": "def-public.SaveSavedSearchOptions.copyOnSave", + "type": "CompoundType", + "tags": [], + "label": "copyOnSave", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [ + { + "parentPluginId": "savedSearch", + "id": "def-public.VIEW_MODE", + "type": "Enum", + "tags": [], + "label": "VIEW_MODE", + "description": [], + "path": "src/plugins/saved_search/common/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [ + { + "parentPluginId": "savedSearch", + "id": "def-server.getSavedSearch", + "type": "Function", + "tags": [], + "label": "getSavedSearch", + "description": [], + "signature": [ + "(savedSearchId: string, deps: GetSavedSearchDependencies) => Promise<", + { + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.SavedSearch", + "text": "SavedSearch" + }, + ">" + ], + "path": "src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedSearch", + "id": "def-server.getSavedSearch.$1", + "type": "string", + "tags": [], + "label": "savedSearchId", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "savedSearch", + "id": "def-server.getSavedSearch.$2", + "type": "Object", + "tags": [], + "label": "deps", + "description": [], + "signature": [ + "GetSavedSearchDependencies" + ], + "path": "src/plugins/saved_search/server/services/saved_searches/get_saved_searches.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "savedSearch", + "id": "def-common.fromSavedSearchAttributes", + "type": "Function", + "tags": [], + "label": "fromSavedSearchAttributes", + "description": [], + "signature": [ + "(id: string, attributes: ", + "SavedSearchAttributes", + ", tags: string[] | undefined, searchSource: ", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.ISearchSource", + "text": "ISearchSource" + }, + ") => ", + { + "pluginId": "savedSearch", + "scope": "common", + "docId": "kibSavedSearchPluginApi", + "section": "def-common.SavedSearch", + "text": "SavedSearch" + } + ], + "path": "src/plugins/saved_search/common/saved_searches_utils.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedSearch", + "id": "def-common.fromSavedSearchAttributes.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/plugins/saved_search/common/saved_searches_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "savedSearch", + "id": "def-common.fromSavedSearchAttributes.$2", + "type": "Object", + "tags": [], + "label": "attributes", + "description": [], + "signature": [ + "SavedSearchAttributes" + ], + "path": "src/plugins/saved_search/common/saved_searches_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "savedSearch", + "id": "def-common.fromSavedSearchAttributes.$3", + "type": "Array", + "tags": [], + "label": "tags", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "src/plugins/saved_search/common/saved_searches_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "savedSearch", + "id": "def-common.fromSavedSearchAttributes.$4", + "type": "Object", + "tags": [], + "label": "searchSource", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.ISearchSource", + "text": "ISearchSource" + } + ], + "path": "src/plugins/saved_search/common/saved_searches_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "savedSearch", + "id": "def-common.getSavedSearchFullPathUrl", + "type": "Function", + "tags": [], + "label": "getSavedSearchFullPathUrl", + "description": [], + "signature": [ + "(id?: string | undefined) => string" + ], + "path": "src/plugins/saved_search/common/saved_searches_url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedSearch", + "id": "def-common.getSavedSearchFullPathUrl.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/saved_search/common/saved_searches_url.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "savedSearch", + "id": "def-common.getSavedSearchUrl", + "type": "Function", + "tags": [], + "label": "getSavedSearchUrl", + "description": [], + "signature": [ + "(id?: string | undefined) => string" + ], + "path": "src/plugins/saved_search/common/saved_searches_url.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedSearch", + "id": "def-common.getSavedSearchUrl.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/saved_search/common/saved_searches_url.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "savedSearch", + "id": "def-common.DiscoverGridSettings", + "type": "Interface", + "tags": [], + "label": "DiscoverGridSettings", + "description": [], + "path": "src/plugins/saved_search/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedSearch", + "id": "def-common.DiscoverGridSettings.columns", "type": "Object", "tags": [], "label": "columns", @@ -243,14 +601,14 @@ "Record | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false } @@ -259,18 +617,18 @@ }, { "parentPluginId": "savedSearch", - "id": "def-public.DiscoverGridSettingsColumn", + "id": "def-common.DiscoverGridSettingsColumn", "type": "Interface", "tags": [], "label": "DiscoverGridSettingsColumn", "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "savedSearch", - "id": "def-public.DiscoverGridSettingsColumn.width", + "id": "def-common.DiscoverGridSettingsColumn.width", "type": "number", "tags": [], "label": "width", @@ -278,7 +636,7 @@ "signature": [ "number | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false } @@ -287,18 +645,18 @@ }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch", + "id": "def-common.SavedSearch", "type": "Interface", "tags": [], "label": "SavedSearch", "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.searchSource", + "id": "def-common.SavedSearch.searchSource", "type": "Object", "tags": [], "label": "searchSource", @@ -534,13 +892,13 @@ }, "; parseActiveIndexPatternFromQueryString: (queryString: string) => string[]; }" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.id", + "id": "def-common.SavedSearch.id", "type": "string", "tags": [], "label": "id", @@ -548,13 +906,13 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.title", + "id": "def-common.SavedSearch.title", "type": "string", "tags": [], "label": "title", @@ -562,13 +920,13 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.sort", + "id": "def-common.SavedSearch.sort", "type": "Array", "tags": [], "label": "sort", @@ -577,13 +935,13 @@ "SortOrder", "[] | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.columns", + "id": "def-common.SavedSearch.columns", "type": "Array", "tags": [], "label": "columns", @@ -591,13 +949,13 @@ "signature": [ "string[] | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.description", + "id": "def-common.SavedSearch.description", "type": "string", "tags": [], "label": "description", @@ -605,13 +963,13 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.tags", + "id": "def-common.SavedSearch.tags", "type": "Array", "tags": [], "label": "tags", @@ -619,13 +977,13 @@ "signature": [ "string[] | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.grid", + "id": "def-common.SavedSearch.grid", "type": "Object", "tags": [], "label": "grid", @@ -634,20 +992,20 @@ "{ columns?: Record | undefined; } | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.hideChart", + "id": "def-common.SavedSearch.hideChart", "type": "CompoundType", "tags": [], "label": "hideChart", @@ -655,27 +1013,13 @@ "signature": [ "boolean | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.sharingSavedObjectProps", - "type": "Object", - "tags": [], - "label": "sharingSavedObjectProps", - "description": [], - "signature": [ - "{ outcome?: \"conflict\" | \"exactMatch\" | \"aliasMatch\" | undefined; aliasTargetId?: string | undefined; aliasPurpose?: \"savedObjectConversion\" | \"savedObjectImport\" | undefined; errorJSON?: string | undefined; } | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.viewMode", + "id": "def-common.SavedSearch.viewMode", "type": "CompoundType", "tags": [], "label": "viewMode", @@ -683,20 +1027,20 @@ "signature": [ { "pluginId": "savedSearch", - "scope": "public", + "scope": "common", "docId": "kibSavedSearchPluginApi", - "section": "def-public.VIEW_MODE", + "section": "def-common.VIEW_MODE", "text": "VIEW_MODE" }, " | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.hideAggregatedPreview", + "id": "def-common.SavedSearch.hideAggregatedPreview", "type": "CompoundType", "tags": [], "label": "hideAggregatedPreview", @@ -704,13 +1048,13 @@ "signature": [ "boolean | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.rowHeight", + "id": "def-common.SavedSearch.rowHeight", "type": "number", "tags": [], "label": "rowHeight", @@ -718,13 +1062,13 @@ "signature": [ "number | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.isTextBasedQuery", + "id": "def-common.SavedSearch.isTextBasedQuery", "type": "CompoundType", "tags": [], "label": "isTextBasedQuery", @@ -732,13 +1076,13 @@ "signature": [ "boolean | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.usesAdHocDataView", + "id": "def-common.SavedSearch.usesAdHocDataView", "type": "CompoundType", "tags": [], "label": "usesAdHocDataView", @@ -746,13 +1090,13 @@ "signature": [ "boolean | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.timeRestore", + "id": "def-common.SavedSearch.timeRestore", "type": "CompoundType", "tags": [], "label": "timeRestore", @@ -760,13 +1104,13 @@ "signature": [ "boolean | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.timeRange", + "id": "def-common.SavedSearch.timeRange", "type": "Object", "tags": [], "label": "timeRange", @@ -781,13 +1125,13 @@ }, " | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.refreshInterval", + "id": "def-common.SavedSearch.refreshInterval", "type": "Object", "tags": [], "label": "refreshInterval", @@ -802,13 +1146,13 @@ }, " | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.rowsPerPage", + "id": "def-common.SavedSearch.rowsPerPage", "type": "number", "tags": [], "label": "rowsPerPage", @@ -816,13 +1160,13 @@ "signature": [ "number | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "savedSearch", - "id": "def-public.SavedSearch.breakdownField", + "id": "def-common.SavedSearch.breakdownField", "type": "string", "tags": [], "label": "breakdownField", @@ -830,65 +1174,7 @@ "signature": [ "string | undefined" ], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "savedSearch", - "id": "def-public.SaveSavedSearchOptions", - "type": "Interface", - "tags": [], - "label": "SaveSavedSearchOptions", - "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "savedSearch", - "id": "def-public.SaveSavedSearchOptions.onTitleDuplicate", - "type": "Function", - "tags": [], - "label": "onTitleDuplicate", - "description": [], - "signature": [ - "(() => void) | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "savedSearch", - "id": "def-public.SaveSavedSearchOptions.isTitleDuplicateConfirmed", - "type": "CompoundType", - "tags": [], - "label": "isTitleDuplicateConfirmed", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "savedSearch", - "id": "def-public.SaveSavedSearchOptions.copyOnSave", - "type": "CompoundType", - "tags": [], - "label": "copyOnSave", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/saved_search/public/services/saved_searches/save_saved_searches.ts", + "path": "src/plugins/saved_search/common/types.ts", "deprecated": false, "trackAdoption": false } @@ -899,100 +1185,17 @@ "enums": [ { "parentPluginId": "savedSearch", - "id": "def-public.VIEW_MODE", + "id": "def-common.VIEW_MODE", "type": "Enum", "tags": [], "label": "VIEW_MODE", "description": [], - "path": "src/plugins/saved_search/public/services/saved_searches/types.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - } - ], - "misc": [], - "objects": [] - }, - "server": { - "classes": [], - "functions": [], - "interfaces": [], - "enums": [], - "misc": [], - "objects": [] - }, - "common": { - "classes": [], - "functions": [ - { - "parentPluginId": "savedSearch", - "id": "def-common.getSavedSearchFullPathUrl", - "type": "Function", - "tags": [], - "label": "getSavedSearchFullPathUrl", - "description": [], - "signature": [ - "(id?: string | undefined) => string" - ], - "path": "src/plugins/saved_search/common/saved_searches_url.ts", + "path": "src/plugins/saved_search/common/index.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "savedSearch", - "id": "def-common.getSavedSearchFullPathUrl.$1", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_search/common/saved_searches_url.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], - "initialIsOpen": false - }, - { - "parentPluginId": "savedSearch", - "id": "def-common.getSavedSearchUrl", - "type": "Function", - "tags": [], - "label": "getSavedSearchUrl", - "description": [], - "signature": [ - "(id?: string | undefined) => string" - ], - "path": "src/plugins/saved_search/common/saved_searches_url.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "savedSearch", - "id": "def-common.getSavedSearchUrl.$1", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/saved_search/common/saved_searches_url.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - } - ], - "returnComment": [], "initialIsOpen": false } ], - "interfaces": [], - "enums": [], "misc": [], "objects": [] } diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index c2ebc14e8045f..2aeeafe26261e 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.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 | |-------------------|-----------|------------------------|-----------------| -| 45 | 0 | 45 | 1 | +| 55 | 0 | 55 | 2 | ## Client @@ -34,8 +34,19 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k ### Enums +## Server + +### Functions + + ## Common ### Functions +### Interfaces + + +### Enums + + diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 6deb948aaf417..5c6b06c856ba0 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-02-16 +date: 2023-02-17 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 f8dd9e4134c52..986df69249a91 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 481609084643f..def3b15704961 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-16 +date: 2023-02-17 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 7409186cd5c15..8aa2b4eb5a17e 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 3ebbcad1a0d98..5e22e097c4196 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-16 +date: 2023-02-17 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 f4cac153343a4..3fb32e4df53f5 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 9f39e867b3ac6..8d0aa191a1de1 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-16 +date: 2023-02-17 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 899655b26377c..7101403e6bc18 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-16 +date: 2023-02-17 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 6be96495a6d33..ec8acb7e1feea 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-16 +date: 2023-02-17 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 fa6fed03d9ff2..1ff302d260fa5 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-16 +date: 2023-02-17 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 21b5f8640f866..162d3455ab0db 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-16 +date: 2023-02-17 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 690bf19a1c029..015b6c852ee5f 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-16 +date: 2023-02-17 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 bb6944c6d589a..7af12278d9fad 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-16 +date: 2023-02-17 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 d8fbe62929d29..772a67b0ff68f 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-16 +date: 2023-02-17 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 5400f5c7eaeb1..7613f843a0a13 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 4d86b62d3caca..184bce901fd2e 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-16 +date: 2023-02-17 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 9ccf2cc5d0c7c..39faa54e61ca6 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-16 +date: 2023-02-17 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 6cede0d49e2ec..c095e7fd2abac 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 6e557911abdf9..688489bebe219 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -4975,7 +4975,7 @@ "label": "setRuleProperty", "description": [], "signature": [ - "(key: Prop, value: ", + "(key: Prop, value: ", "SanitizedRule", "[Prop] | null) => void" ], diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 06cfebed3d937..c8c3a3b89cf38 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-16 +date: 2023-02-17 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 95084fa2aaccb..42088c7a1fa33 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-16 +date: 2023-02-17 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 ce00787df3417..f5e40e60d0505 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index c3cd14977ac0b..d1dcbb7948c2d 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 6d456394e388c..9e8898a0a724c 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-16 +date: 2023-02-17 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 313872400971c..23cac42a48211 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-16 +date: 2023-02-17 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 30b971c6f7ef3..62ff978db6681 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 12c2643b3c707..6b5b2f48d091e 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-16 +date: 2023-02-17 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 6fd51629aa377..61defd3744dbf 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-16 +date: 2023-02-17 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 2a714d235182c..cea2d020aa195 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-16 +date: 2023-02-17 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 d71de853a8536..80ba21e4b2cbf 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-16 +date: 2023-02-17 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 5e59b27ff0f42..0cb5f2974cd54 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-16 +date: 2023-02-17 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 1792dfa1faa54..e7c95338741bc 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-16 +date: 2023-02-17 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 e74951ff16de7..d29c638e160e1 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-16 +date: 2023-02-17 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 4c9bbedccb11a..adca736538a99 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-16 +date: 2023-02-17 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 964b6dda69e49..8120854fc7d4d 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-16 +date: 2023-02-17 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 b4619e59ea04b..2ce334142dcea 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-16 +date: 2023-02-17 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 2e13178b31acb..c1e58675c82e6 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-16 +date: 2023-02-17 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 7dd061e5875ba..e0df05ca591ba 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-16 +date: 2023-02-17 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 cd9a8760c9197..39b407f002f9c 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-16 +date: 2023-02-17 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 b30d9665b309e..7942de173c42a 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-16 +date: 2023-02-17 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From e55d60e039c42555aa07f9b0e1b8770d801d7e10 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Fri, 17 Feb 2023 09:48:21 +0100 Subject: [PATCH 112/210] [ML] Transforms: Fix health constants, styles and wording. (#151415) - Fix to make all keys lower case across constants to match API texts. - Fix styling to use `EuiHealth` instead of `EuiBadge` in the search bar filter dropdown. - Fix text format in expanded row health tab. --- x-pack/plugins/transform/common/constants.ts | 8 ++--- .../transform_health_colored_dot.tsx | 29 +++++++++++++------ .../transform_search_bar_filters.tsx | 13 ++------- .../transform/start_reset_delete/starting.ts | 16 +++++----- 4 files changed, 34 insertions(+), 32 deletions(-) diff --git a/x-pack/plugins/transform/common/constants.ts b/x-pack/plugins/transform/common/constants.ts index 20f4d4ff77a6f..e489abe51c856 100644 --- a/x-pack/plugins/transform/common/constants.ts +++ b/x-pack/plugins/transform/common/constants.ts @@ -98,10 +98,10 @@ export const TRANSFORM_STATE = { export type TransformState = typeof TRANSFORM_STATE[keyof typeof TRANSFORM_STATE]; export const TRANSFORM_HEALTH = { - GREEN: 'green', - UNKNOWN: 'unknown', - YELLOW: 'yellow', - RED: 'red', + green: 'green', + unknown: 'unknown', + yellow: 'yellow', + red: 'red', } as const; export type TransformHealth = typeof TRANSFORM_HEALTH[keyof typeof TRANSFORM_HEALTH]; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx index 85fbc2c604fc1..632e5ee1c6bbd 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_health_colored_dot.tsx @@ -19,21 +19,32 @@ import { interface TransformHealthProps { healthStatus: TransformHealth; compact?: boolean; + showToolTip?: boolean; } export const TransformHealthColoredDot: FC = ({ healthStatus, compact = true, + showToolTip = true, }) => { - return compact ? ( - - - {TRANSFORM_HEALTH_LABEL[healthStatus]} - - - ) : ( - - {TRANSFORM_HEALTH_LABEL[healthStatus]} {TRANSFORM_HEALTH_DESCRIPTION[healthStatus]} + const transformHealthDescription = TRANSFORM_HEALTH_DESCRIPTION[healthStatus]; + const transformHealthColor = TRANSFORM_HEALTH_COLOR[healthStatus]; + const transformHealthLabel = TRANSFORM_HEALTH_LABEL[healthStatus]; + + const health = ( + + {transformHealthLabel} + {compact ? '' : `: ${transformHealthDescription}`} ); + + if (showToolTip) { + return {health}; + } + + return health; }; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx index cad987a621d7b..5a2df943e9a54 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx @@ -14,12 +14,11 @@ import { TRANSFORM_MODE, TRANSFORM_STATE, TRANSFORM_HEALTH, - TRANSFORM_HEALTH_COLOR, - TRANSFORM_HEALTH_LABEL, } from '../../../../../../common/constants'; import { isLatestTransform, isPivotTransform } from '../../../../../../common/types/transform'; import { TransformListRow } from '../../../../common'; import { TransformTaskStateBadge } from './transform_task_state_badge'; +import { TransformHealthColoredDot } from './transform_health_colored_dot'; export const transformFilters: SearchFilterConfig[] = [ { @@ -56,15 +55,7 @@ export const transformFilters: SearchFilterConfig[] = [ options: Object.values(TRANSFORM_HEALTH).map((val) => ({ value: val, name: val, - view: ( - - {TRANSFORM_HEALTH_LABEL[val]} - - ), + view: , })), }, ]; diff --git a/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts b/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts index 3a06dbb6108c7..dc86cf7489530 100644 --- a/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts +++ b/x-pack/test/functional/apps/transform/start_reset_delete/starting.ts @@ -59,7 +59,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, healthLabel: TRANSFORM_HEALTH_LABEL.green, - healthStatus: TRANSFORM_HEALTH.GREEN, + healthStatus: TRANSFORM_HEALTH.green, }, }, { @@ -70,7 +70,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, healthLabel: TRANSFORM_HEALTH_LABEL.green, - healthStatus: TRANSFORM_HEALTH.GREEN, + healthStatus: TRANSFORM_HEALTH.green, }, }, { @@ -81,7 +81,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { healthDescription: TRANSFORM_HEALTH_DESCRIPTION.yellow, healthLabel: TRANSFORM_HEALTH_LABEL.yellow, - healthStatus: TRANSFORM_HEALTH.YELLOW, + healthStatus: TRANSFORM_HEALTH.yellow, }, }, { @@ -92,7 +92,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, healthLabel: TRANSFORM_HEALTH_LABEL.green, - healthStatus: TRANSFORM_HEALTH.GREEN, + healthStatus: TRANSFORM_HEALTH.green, }, }, { @@ -103,7 +103,7 @@ export default function ({ getService }: FtrProviderContext) { expected: { healthDescription: TRANSFORM_HEALTH_DESCRIPTION.green, healthLabel: TRANSFORM_HEALTH_LABEL.green, - healthStatus: TRANSFORM_HEALTH.GREEN, + healthStatus: TRANSFORM_HEALTH.green, }, }, ]; @@ -114,7 +114,7 @@ export default function ({ getService }: FtrProviderContext) { for (const testData of testDataList) { if ( - testData.expected.healthStatus === TRANSFORM_HEALTH.YELLOW && + testData.expected.healthStatus === TRANSFORM_HEALTH.yellow && testData.type === 'pivot' ) { testData.originalConfig.pivot.aggregations['products.base_price.fail'] = { @@ -128,7 +128,7 @@ export default function ({ getService }: FtrProviderContext) { await transform.api.createTransform( testData.originalConfig.id, testData.originalConfig, - testData.expected.healthStatus === TRANSFORM_HEALTH.YELLOW + testData.expected.healthStatus === TRANSFORM_HEALTH.yellow ); } await transform.testResources.setKibanaTimeZoneToUTC(); @@ -169,7 +169,7 @@ export default function ({ getService }: FtrProviderContext) { await transform.table.assertTransformExpandedRowHealth( testData.expected.healthDescription, - testData.expected.healthStatus !== TRANSFORM_HEALTH.GREEN + testData.expected.healthStatus !== TRANSFORM_HEALTH.green ); await transform.table.clearSearchString(testDataList.length); From 40bd1e2ef1a53c3c17162d0c303cccb0314d4f91 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Sat, 18 Feb 2023 00:51:02 -0500 Subject: [PATCH 113/210] [api-docs] 2023-02-18 Daily api_docs build (#151572) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/252 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 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/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.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_shippers_elastic_v3_browser.mdx | 2 +- api_docs/kbn_analytics_shippers_elastic_v3_common.mdx | 2 +- api_docs/kbn_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- api_docs/kbn_content_management_content_editor.mdx | 2 +- api_docs/kbn_content_management_table_list.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- api_docs/kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- api_docs/kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- api_docs/kbn_core_application_browser_internal.mdx | 2 +- api_docs/kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- api_docs/kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- api_docs/kbn_core_custom_branding_browser_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- api_docs/kbn_core_custom_branding_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- api_docs/kbn_core_deprecations_browser_internal.mdx | 2 +- api_docs/kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- api_docs/kbn_core_deprecations_server_internal.mdx | 2 +- api_docs/kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_mocks.mdx | 2 +- api_docs/kbn_core_environment_server_internal.mdx | 2 +- api_docs/kbn_core_environment_server_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_browser.mdx | 2 +- api_docs/kbn_core_execution_context_browser_internal.mdx | 2 +- api_docs/kbn_core_execution_context_browser_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_common.mdx | 2 +- api_docs/kbn_core_execution_context_server.mdx | 2 +- api_docs/kbn_core_execution_context_server_internal.mdx | 2 +- api_docs/kbn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- api_docs/kbn_core_http_context_server_mocks.mdx | 2 +- api_docs/kbn_core_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- api_docs/kbn_core_http_resources_server_internal.mdx | 2 +- api_docs/kbn_core_http_resources_server_mocks.mdx | 2 +- api_docs/kbn_core_http_router_server_internal.mdx | 2 +- api_docs/kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- api_docs/kbn_core_injected_metadata_browser_mocks.mdx | 2 +- api_docs/kbn_core_integrations_browser_internal.mdx | 2 +- api_docs/kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- api_docs/kbn_core_notifications_browser_internal.mdx | 2 +- api_docs/kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- api_docs/kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- api_docs/kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_api_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- .../kbn_core_saved_objects_import_export_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- api_docs/kbn_core_saved_objects_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- api_docs/kbn_core_test_helpers_deprecations_getters.mdx | 2 +- api_docs/kbn_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- api_docs/kbn_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- api_docs/kbn_core_ui_settings_browser_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- api_docs/kbn_core_ui_settings_server_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- api_docs/kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.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_performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- api_docs/kbn_securitysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_alerting_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- api_docs/kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- api_docs/kbn_shared_ux_avatar_user_profile_components.mdx | 2 +- api_docs/kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/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_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 476 files changed, 476 insertions(+), 476 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 399bb8c78acc3..7f3b57b4a3493 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-17 +date: 2023-02-18 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 d8ccd60b82212..6997c60717fa5 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 0abe4613ba956..407e0bb5a6bcc 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-17 +date: 2023-02-18 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 1f191df2e4372..b8c50069b1045 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-17 +date: 2023-02-18 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 d2dedc5d145da..3ca0697679d77 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 0e9ebdf16975d..9291e012c8228 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-17 +date: 2023-02-18 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 8de920555aa98..f68f1f2941648 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-17 +date: 2023-02-18 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 45d57f85104fd..b3d2177b58e6e 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-17 +date: 2023-02-18 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 2fa9ebb821897..38e9dca0c2cb9 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-17 +date: 2023-02-18 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 3c76a8fd01ccd..359ff809ade73 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-17 +date: 2023-02-18 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 a66ff2367bd95..f227d5cca711a 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index d3548b39f61da..c108c0bbc3fe5 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 62dfe477b93d2..b67f0d90a52ba 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-17 +date: 2023-02-18 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 88670b4243ed4..413782a562902 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-17 +date: 2023-02-18 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 e93425c10dd00..988b34e483530 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-17 +date: 2023-02-18 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 23fe5b140e7b6..fad19b121d165 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-17 +date: 2023-02-18 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 9b9ea4198096f..a7bf797c8f931 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-17 +date: 2023-02-18 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 14e61847027cc..52b0c94fdb884 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 2cdcb8bae7d48..2a2c5f8b70507 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-17 +date: 2023-02-18 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 ffd81779106fb..744c0b0273bc6 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-17 +date: 2023-02-18 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 3a34952cbbac5..c73f025709dac 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-17 +date: 2023-02-18 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 f3e781ac1f3e3..bdfa0fe894aac 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-17 +date: 2023-02-18 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 2c4ac4ef55844..56c8de588350a 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-17 +date: 2023-02-18 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 cc7b1a4d7e61d..78e704dc9e390 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-17 +date: 2023-02-18 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 ad9cfdfc2cc25..390e25bf951a4 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-17 +date: 2023-02-18 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 3d1346115b74e..b135a84b19637 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-17 +date: 2023-02-18 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 77bdaa61ac2e7..950ce216869b2 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-17 +date: 2023-02-18 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 d3bf83c93ddd5..ae2fc4527b1b8 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 13d1c7cd9e963..446b52b498cb6 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-17 +date: 2023-02-18 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 88a248a6a6efd..82b3765fb78bb 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 953651640692c..5946d7b9a9ad2 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 09713fd0bb5d7..a00fab8eb9cea 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 919c6d6454082..53ca35cdd97c6 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 968bc4cc93823..3bb294452e62e 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-17 +date: 2023-02-18 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 477ac944aafbc..a78d03a9ac84e 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-17 +date: 2023-02-18 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 ce1eb46a9227a..676f585bf6d85 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index adfc3dcf3d9c4..a15660e853474 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index f080ea9437d54..062382aad761d 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-17 +date: 2023-02-18 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 b59298baaef24..062c8eb49134a 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-17 +date: 2023-02-18 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 ca632138ae715..17a65a8438d2b 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-17 +date: 2023-02-18 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 5dad56ff2777a..8e6910e43e727 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-17 +date: 2023-02-18 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 957524dd30dd2..e6a194ec9c9d3 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-17 +date: 2023-02-18 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 c3a8e433af348..985649f0f2f64 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index b8fd28a7d747c..7400633f67a81 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 197a23feccd8b..21613d2a0e9f9 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-17 +date: 2023-02-18 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 501c98326c34b..44b79a1cff527 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-17 +date: 2023-02-18 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 e01a2b2e5fd05..ee15efb322262 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-17 +date: 2023-02-18 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 3107867473a2f..fb0a201a6d645 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-17 +date: 2023-02-18 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 662c469c78989..f7e60468154bc 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-17 +date: 2023-02-18 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 db796221e95d6..e6652a33a1de5 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-17 +date: 2023-02-18 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 ac8757106b017..37fb8531eaa6d 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-17 +date: 2023-02-18 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 7b355dff85aa0..0e33cb9cbdb5d 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-17 +date: 2023-02-18 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 a2ac4b7d3e4d1..4a6c548d4eec5 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-17 +date: 2023-02-18 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 bc1067bad3ba9..2bcf0f170f961 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-17 +date: 2023-02-18 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 1691745661840..495509dc3a9d3 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-17 +date: 2023-02-18 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 51a59e499ccb8..606b811e5260a 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-17 +date: 2023-02-18 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 f71892f784700..6ecf8a42228c0 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-17 +date: 2023-02-18 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 c4e3017f4a80e..51188152ac9e9 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-17 +date: 2023-02-18 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 3fe146da2ee5f..ae3117c55b989 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-17 +date: 2023-02-18 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 069a7845ef3da..b3f2397a09eb0 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-17 +date: 2023-02-18 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 97f5195b812ec..b36fc51eb8c87 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-17 +date: 2023-02-18 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 d082338074062..bf4d94181580d 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-17 +date: 2023-02-18 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 a55da530155b0..9ef48e8143f50 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 cecd0c9fb3b8a..5fa87c1378cfd 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-17 +date: 2023-02-18 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 889bf1332596a..c9c5f5639714b 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-17 +date: 2023-02-18 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 3d6a398eae84b..19b06607368e3 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-17 +date: 2023-02-18 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 e962d3de693be..66af743b1122b 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-17 +date: 2023-02-18 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 86cd1942adac4..c74de99f4eccd 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-17 +date: 2023-02-18 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 1cf460c656ea0..1bcf285d05b66 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 fd670e0cd6a7f..15b63ab526aa0 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 054cb1da42696..38f819c5edeb6 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index bc60271600007..2c4de3cb938c5 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-17 +date: 2023-02-18 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 54eaca1f0d0af..eda62e845558a 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-17 +date: 2023-02-18 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 7e1485f998e37..7e541b5d94dee 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 0ae2c28bce24f..02d863dd5f62f 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 20344c4d793de..b5e6cdb9a8ccf 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 67e01c6471b05..a0d30d1a11375 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index e35871fd2a549..1ba4e49e28887 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-17 +date: 2023-02-18 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 c110fd4e65e23..fb47f927a40cc 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-17 +date: 2023-02-18 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 0cec33a4c8e62..9a51e8e6a68ec 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 4477988cbf09a..b4ffaef9d9710 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 41c0e54257cb2..57180f38b9a59 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-17 +date: 2023-02-18 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 d37e57a307c89..7fba5fcf37ba6 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-17 +date: 2023-02-18 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 f243d629bcd72..426a432bd4627 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 99a90c133c5ea..ca87adca49775 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index a5ec42433b3f4..82e9680cdb04d 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 0f755d7a79dae..d52546863f4a8 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-17 +date: 2023-02-18 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 16e2ef21c7f4e..135cb4e6c266a 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-17 +date: 2023-02-18 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 f3dc830ce30b2..863fa8ecfc8eb 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 0fb16ceacfd94..43cc2fa514486 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 1782bc5634342..245a57c85783a 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-17 +date: 2023-02-18 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 9843609281952..dc417e5baed28 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-17 +date: 2023-02-18 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 28cae29bbdbd2..e8a496081e740 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-17 +date: 2023-02-18 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 358233785e8bf..f5217a0bff8c0 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-17 +date: 2023-02-18 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 a1d332f1967f7..715cb696f49f7 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-17 +date: 2023-02-18 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 9714a409b72ed..ed6474f9d2369 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-17 +date: 2023-02-18 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 0650e8a725e4f..6ce9e82355c8f 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-17 +date: 2023-02-18 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 8fa3954e23ac6..b7b9c47e005c6 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-17 +date: 2023-02-18 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 7a73067b3f65d..00bbada4986b3 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 065502a9103d8..18a5656fcf44b 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 9c5f534f24101..9fa1f368adaff 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-17 +date: 2023-02-18 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 f6561e89969aa..227c648fbbb46 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-17 +date: 2023-02-18 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 467731c707193..2c2a2db900ee4 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 239d5c6d09768..eddcd09d2dac7 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-17 +date: 2023-02-18 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 7d9daf7d37cfe..90ba4b6ce451a 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-17 +date: 2023-02-18 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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index cf5a8acbb8bd7..6a958090b3d78 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 6145673a1b354..3540904621e80 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 55f9f25a0f5d0..d32dab4dd7b1a 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 1c3f0bb5c5874..47b8ca6cf91c0 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 448a7be7d5658..b3841cc013085 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-17 +date: 2023-02-18 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 79a47f7e112e8..f0370ed55caa5 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 0e9163644898b..19332e96bbd5d 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 ccf4c494f4002..a974e6e2f3d82 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 6dc80116a0c40..30c8eea14abb7 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 f071132bce26d..0c4a3ebabbb93 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 060ab9008a7c6..c7012e408dd20 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-17 +date: 2023-02-18 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 8547767c136d8..ddcb9ddfc93af 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 07c471c5c6d92..73eb74f1e3d9c 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 627499185f464..8a888eca9fa79 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 45f61a0d57f2e..aff4634dc2188 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 fce51edcce460..6ec460555b2e3 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-17 +date: 2023-02-18 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 b00a312eb20af..d4f0bf5e7f820 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 55126adc8a44d..4e945fca6ef9f 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 0e5e03a463f24..6b56067127809 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 3c911329934ed..291ac38bfb061 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-17 +date: 2023-02-18 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 c3a94facdb8e9..560a75d8cd578 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-17 +date: 2023-02-18 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 808f43f666101..c38eb2983238c 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 04aa615e050e9..facda2d8a9c4f 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 12332ceaa478e..4c941739a3b3d 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 113a36cb0c9fb..8eeb2443c3ee5 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 fced0d6d211f6..55e290d234ce8 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 fa11a3a05eab3..77017b9f2194c 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 02bf2f8c0cc10..687907f355155 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 f163ab8034bb4..789799e1789b8 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-17 +date: 2023-02-18 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 a75f3e6550b47..30976bc98d6cf 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-17 +date: 2023-02-18 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 bd1bc4c9712e1..05518ea7abc7e 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 18a7f94084f08..aa775006c036d 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 03bf236210c33..d5d1c7e4043d0 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 bd582a1e14670..d103b9bdeb283 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 c106ab2912f06..97c9569fe8bfd 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 03738d6618986..89a34979b532d 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-17 +date: 2023-02-18 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 eda81a526b6dc..c17b05c299ee3 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-17 +date: 2023-02-18 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 65cd847eec9fe..ff6eeaf9e63c2 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 4708588160609..4c3a89e536f76 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 d87ccef0c3151..d6be19744f534 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 ab74de56da4fd..160fbfbc8df31 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 fb7c657d299ab..5f50f250c9718 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-17 +date: 2023-02-18 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 3798f0940d2c3..b1cf5de25955c 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 42393deccdafc..67053ed463390 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 e5c71eb131b13..dea1c39fd7cfd 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 5b77b863a2311..8ff46e91771f5 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-17 +date: 2023-02-18 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 a2abe57f647d4..96969ff2f26f1 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 5446068ea4fb9..18a2839bdd379 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 275cfe125bc68..f555b9ba69a6e 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 34e572223f436..a19e9c86b0bf1 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 511c2e03babb1..9a587293b2653 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 6eae92721553a..1a41829d87c33 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 1bf54b1d67d79..1ecdab637c6f0 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 9a17b57894405..d2bbc7466310f 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-17 +date: 2023-02-18 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 41aaa87f1da3a..f65b58292e3f7 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-17 +date: 2023-02-18 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 e8ffe3d678ecc..8fab837842cde 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 73b9f429ecc7b..2c285c2472f4b 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 045db4bc9a59e..e5cf573e717be 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 2d265b816eafc..c9a3e48a98082 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 de819e093c80d..0e143a1d2a742 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 f5dd1440c322b..5687e4372bf1d 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 bb89d3ac450ec..0fb9f0a4547e0 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 58dd837c48943..2b66142859825 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-17 +date: 2023-02-18 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 d87f95139edfd..b4d9047e16348 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 dde8c167d568f..9682cdbbd09bd 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-17 +date: 2023-02-18 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 57984718332be..3559f8642ca81 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-17 +date: 2023-02-18 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 e58987f4357c0..ca3ca4b3dbb6c 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 54d7183a7af25..a5007957946d6 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 9bb4d6677127c..f9d054ae745c4 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 eecbf0a76512b..5a1ff4337c33a 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 eecfa427eb5b1..8ecdb4df4ae83 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-17 +date: 2023-02-18 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 fb41fdf775e81..da93bb408a4a7 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 ad8027dae32a8..a6f112de60fb8 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 ba8f019f34a67..973a93417f222 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 c45802507a1d6..b6daf13664a1f 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 48f06a33302fe..cccd3a7d94eff 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-17 +date: 2023-02-18 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 e877b72e871f9..e87b6bad9e4b4 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 2594ef64e7735..b323ee54d09a9 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 8605900bdbe22..0a631f66da612 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 edee8ef0cdc3c..c866108a4e0d1 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 46080c80c6e72..dd252d49ee4ab 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 8b6077c782258..0ff226bca5333 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 2950365be8b70..3da0bcfc747f0 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 98edcfcf678fd..9871d7260ca63 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-17 +date: 2023-02-18 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 93707bc9ed00e..61d135cae4f53 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 6e2a59d006dc0..94c663306a307 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 153b7a3c3acb6..ba75b5705d724 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 8a3fb651766c2..b7d2ba4fb0957 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-17 +date: 2023-02-18 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 c1d92788f86fc..c975be22a244a 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 a6723858e4466..f6a3b5fc587cc 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 6218aa9e9d5c9..839b6ec05de06 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 023e3eabdfece..ea2de4b5a47cd 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 756d0a143f0d8..1f595c89edb2b 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-17 +date: 2023-02-18 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 cc08aefdb0ee6..600e4bb877fd5 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 8325ec0b22455..4a9802eb95286 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 5c8c88946c4d0..50f90838f6d67 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 77c51982b6ae8..27a39edd67dc8 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-17 +date: 2023-02-18 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 9b7c09332dcd7..24480423b2050 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 dfdb06b9611f1..5a9a8fc1190ad 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 0fcbd8b906b79..da6ea2cc81ace 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 08390a9b7494d..63150f63c84fc 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 4bc10e8f03f94..15784f496dcf6 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 44d887e8dde0a..a7456bf24e5cf 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 adf0b742c33c7..ed3caa30394c9 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 577a3aa02e0b3..ced81d55af893 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 b47b1a5513cc1..fb46b2e587c3f 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 d75707d2c5c33..01026039f4e1b 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 609bd0b6bbb13..f536e44cd7065 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-17 +date: 2023-02-18 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 95b09cb802728..dc8ec5e0239b6 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 4dcaee7e015bf..95ff3a5e66bc2 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-17 +date: 2023-02-18 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 ae2b331766759..53d563b5bfd9e 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 83de4de44e468..6984cdf41c0d6 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 8d9cd34e1777a..d50bd3b2c4caa 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 ec6b39c0d7edf..d6bba99a122a2 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 27d67ffb1eb29..a7fdd01277447 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 ded4eb32ab8e3..4eb9a568b8c0b 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 198845f1609a9..328847a7e3952 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-17 +date: 2023-02-18 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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index fb0a032991a64..06f73dbf323ff 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 8e1c1d8f8c18a..139224932dc33 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 4bedd22ec2e43..49c442e0401f8 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 186442a494285..4b5037c8d503c 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 06b09afb539b3..4d462322e5aec 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 310d0dcfbc49a..08decfb64d664 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 0aa0806899cfc..34c6d35aa8356 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 cc7a6275a3d4a..fba3223f297da 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-17 +date: 2023-02-18 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 add345ec49fe1..dce2976b589d8 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 831f657e2d1af..cc4f286f62395 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 704c3a3751680..e7e223c6c7fb0 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 52fdebf24516e..9ff40062c8eac 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 8c6c0da3a2cde..2832650d9cc74 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-17 +date: 2023-02-18 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 f6b84ab940a49..f8adb31643a4e 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 a5ddda71a28c8..b8a15fc7d1705 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 5a155de305d89..7442ff0a56be4 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 142bf8d0ee443..5c9ecd16c6cd4 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-17 +date: 2023-02-18 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 677209a0a3004..94253cca596fa 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 6c287504043e9..a4dbdad6f9f66 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-17 +date: 2023-02-18 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 750e4a1659bce..82986c80fceb9 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 8b7abe40838aa..98de7c90e1523 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 941a96b39b784..a648ea9991cff 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-17 +date: 2023-02-18 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 d705152409063..d9c850467ee50 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 02829a211b0be..9a0c69376def8 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 1a3d47bef95c8..3fc10bb04dd99 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-17 +date: 2023-02-18 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 b50e65d197aaa..ea0beb5ec582c 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 a2d82c164a3fb..f34898398e433 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index a3d8bb0997d83..58a1113a41e9a 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index da18be174b792..e696f3f6bffc4 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 6d1e90e0553cc..2e44b956f5155 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 bfd53648ec8a2..6e2928c20f521 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 588b9a2da2813..23d49ddea63df 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 287053ddd1559..e3b04c269a12f 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-17 +date: 2023-02-18 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 2a5f62a6cc694..9397bf740e0b3 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-17 +date: 2023-02-18 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 8e3de64c3e743..0fc6da482bee9 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 e43413139c6fb..61d7cfa75a8fe 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 cb72f98c8b96b..e6afca43b1e65 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-17 +date: 2023-02-18 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 4ed94b629781e..1f8a42d77bf14 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-17 +date: 2023-02-18 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 9602037e11af1..ee3e5a634774a 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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_crypto.mdx b/api_docs/kbn_crypto.mdx index f67e7f485d30f..274ab42c5decb 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-17 +date: 2023-02-18 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 23c945fdd6727..cc6382bb31b5c 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 359bc1a5eeb4d..f6cbaa572a291 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 75eec5d53402e..e0e76c241d226 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 914d091fbf0e2..992711ecf1404 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-17 +date: 2023-02-18 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 ef106cd92c9b1..8df2672cd7b5b 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-17 +date: 2023-02-18 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 8466d264af2d0..a7813b5c8bf70 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-17 +date: 2023-02-18 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 2a70a32c0c223..1cdd8047c0b88 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 5c2a836fada5d..b2a86a188f279 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-17 +date: 2023-02-18 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 9805ca4bbcf8c..7fee070b4e249 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index b562b894201d1..af393f6ec296d 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 50d0bb7eb8a0e..f4ad0d3218160 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index c91dcb2533b11..fe80c23906989 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-17 +date: 2023-02-18 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_es.mdx b/api_docs/kbn_es.mdx index 43bde6c6db392..273809a355bda 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-17 +date: 2023-02-18 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 49e023c2027ba..b38688f5d84ea 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-17 +date: 2023-02-18 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 ea311ef3e0da2..1c5e1724e2099 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-17 +date: 2023-02-18 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 f64229db30d7b..85dddbccae62a 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-17 +date: 2023-02-18 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 7fe5f74909249..3544f73d8c24f 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-17 +date: 2023-02-18 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 691115b413fca..329c96821843a 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index b7c52e598672e..27b204052e375 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 0ce8107a53235..c91162634aa96 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index cb31745666908..9e872991f3160 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index fd698ff67e1cc..6490d976bfd6b 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index afeebcd3c145a..4c0e8b27b3deb 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-17 +date: 2023-02-18 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 c859db1d559ca..86e68187b71bc 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-17 +date: 2023-02-18 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 c244dd63665d9..d99cb4640c88b 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 d807919d837ce..ed466533b349c 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-17 +date: 2023-02-18 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 17e3a0beb178a..5920e775b7669 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-17 +date: 2023-02-18 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 89da229bcef5b..b5afc04d956b6 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-17 +date: 2023-02-18 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 9db0436c42f80..8e7fded4ce0ea 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-17 +date: 2023-02-18 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 1a5883775264b..d04b3e236cc30 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-17 +date: 2023-02-18 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 5fe087899b577..785fa078627f9 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 43f482cd23fd6..1ca5660ef26a6 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-17 +date: 2023-02-18 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 b850538ddca4e..81d93c8f4c7b9 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 1b30e62c4eda8..6f803adebcf03 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-17 +date: 2023-02-18 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 1c79dcefe0556..3e9a4e6385fc8 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-17 +date: 2023-02-18 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 5f4cb5da39721..9a611f9651ab4 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-17 +date: 2023-02-18 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 9475b4a34007a..324bae801aaec 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-17 +date: 2023-02-18 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 35dbcee81eaa6..df5c23642e700 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index dc86cf850d597..8e63e5ec04a22 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-17 +date: 2023-02-18 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 7c3b76ea4a0cb..359590dce3b27 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 29a06d5292c6a..d65c6842fe9fb 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index a9453f47c6c3b..48a5d3f9eeba8 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index e968a85524f7c..410679ccff228 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-17 +date: 2023-02-18 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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 5aa89b6e919bb..71cfbd9457c4d 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-17 +date: 2023-02-18 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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index bf79b5f19003e..0a88f67f422fb 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-17 +date: 2023-02-18 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 77a04081a8b09..98cdf050913fd 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-17 +date: 2023-02-18 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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 8c8bf19d80799..a996f192f5714 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-17 +date: 2023-02-18 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 ef043b733a4c8..6af393bf20ef8 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-17 +date: 2023-02-18 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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 0b07a6b17eaf9..1f083bc3b454c 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-17 +date: 2023-02-18 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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 6b005d7d7c430..51b59b534f64e 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-17 +date: 2023-02-18 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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 1df7ea79e0647..59593e268b73b 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index cb8166f8d876a..f27dc591c1ca5 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 9ae1dd4500ff3..9fbceff1ffb79 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-17 +date: 2023-02-18 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 9987b9aef5025..422f7009e3889 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-17 +date: 2023-02-18 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 3b7e65353269a..fa99c311a189d 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 54588d3173561..27c7211e8001f 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index c9fa28a552e72..429e83a6bc81b 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-17 +date: 2023-02-18 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 299d2bd982c91..bd6634cf2c61f 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 703331a5fb114..d45eb9861f5b9 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 9433d2bff1393..0231cb701f391 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-17 +date: 2023-02-18 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 759804f927f10..1d8ef4448f076 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-17 +date: 2023-02-18 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 29c5c19e88e3f..39e5fd5e80ddf 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-17 +date: 2023-02-18 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 848fae66b8d28..51f47d9eaabef 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index c138c9d720df1..d9d23d786d30b 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index f94403ed8d89e..b201e23dde09c 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 6ada5bcafea3d..4e1a8347e4c5e 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index d09ddc4ae7db2..091ad9bbf3a00 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-17 +date: 2023-02-18 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 4e1b009acc4d3..a939eaec60120 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 8b7ab5f06e73a..a054dcb37dc86 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 371087b21beed..6f5bf067940cd 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 aea8f64f661c6..eefcfc3e07a13 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-17 +date: 2023-02-18 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 2b0d322fc1e78..b7b802128dd1a 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-17 +date: 2023-02-18 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 9d6058955ce9f..d2d52c6343fe5 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-17 +date: 2023-02-18 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 13e4d96f7daaa..dd05eedd0cbe3 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 533131675ed1d..926da95db307d 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-17 +date: 2023-02-18 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 1f3ce713ccf3e..4bb8d5990f262 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-17 +date: 2023-02-18 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 9f92c3650b186..908e6716fda1d 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-17 +date: 2023-02-18 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 b5f7e3c425ebd..a8a69b9e2c8b2 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 3d4b9b7bf304d..ef62c5d5a8ac4 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-17 +date: 2023-02-18 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 36e46034d2985..a0e14c931ad75 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-17 +date: 2023-02-18 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 e4ca1d19293b8..e44f0bfd4c922 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-17 +date: 2023-02-18 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 d9833a2ac3193..7f2546b64e919 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-17 +date: 2023-02-18 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 fe084a0c166f9..dd7e2e599fd21 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 6ef192f81d249..7ad69ec702513 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-17 +date: 2023-02-18 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 4ccc0cb03bbb9..d4063fb672201 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 3d3689b548a69..e824f9ec1139c 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index e957a4549e6c3..6c18d6afa10b7 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 5c4f039fd4b06..7bfc4542d85e6 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 96adda36ddd26..9e9122ca702d2 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-17 +date: 2023-02-18 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 6af9958a999f0..5daf21afdc406 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-17 +date: 2023-02-18 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 ee6e2102ef4be..df59e5b853770 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 9d856a6a95d39..67e717ae88176 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-17 +date: 2023-02-18 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 b46203dcd47c1..982e09470d14a 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-17 +date: 2023-02-18 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 564d0516d92d9..ddf7da8008aaa 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 0fba00f7967a7..c39a3126cc5ee 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 a1fc9c3a3f083..7792d1a5d39fc 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-17 +date: 2023-02-18 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_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index c2f94363250c8..1cb55f8157a00 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-17 +date: 2023-02-18 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 f6c33a1e60ffb..663c5a4854884 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-17 +date: 2023-02-18 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 9c9c8a04752a6..304d904e2a7e9 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-17 +date: 2023-02-18 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 7c91d82cbc32d..813820c733ae8 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 1c3c3f84d44eb..75b0ed95e7189 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-17 +date: 2023-02-18 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 a991dc321498a..bb728e12daf3a 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 afe272b276225..f306d00f89391 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-17 +date: 2023-02-18 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 4b88c03c94a50..fcc2ac535d7e7 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 81c1fddb4964a..23278617ad999 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-17 +date: 2023-02-18 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 cd2912aeac595..b1ed96cd0fc8c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 c4d1869bc43a2..916cb965462de 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-17 +date: 2023-02-18 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 25c7866038935..a34c43a0f554b 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 ec847ef6ff53d..96f0f683206bf 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-17 +date: 2023-02-18 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 a3f461766bfb0..e8a2d683552f2 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-17 +date: 2023-02-18 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 9e155a08b8de5..8fe3e68b1994c 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 7006b24607c4a..befe0fdc76613 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 019e8d4766814..1f82881f13d93 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-17 +date: 2023-02-18 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 a75d581f18deb..b708cba2d2319 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-17 +date: 2023-02-18 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 92240bd13d681..f0dd71a867757 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 eb80ae38ea4e7..692e9f4544a48 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-17 +date: 2023-02-18 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 397f3bcf5ebd1..01f71ca207c66 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-17 +date: 2023-02-18 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 3f05c314126a9..96d7b77674840 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-17 +date: 2023-02-18 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 6db91092e595a..7b4ff7f457d5b 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-17 +date: 2023-02-18 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 ae5c18b336f2b..9e285c5bf5052 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index cd41e3eafbaf2..c79823bafac6e 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-17 +date: 2023-02-18 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 362ec901a129f..7ea669e44b0ed 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index a03e3b8a3e50a..3465d0207937c 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index b933eb09fa3d9..4e1c96efabc08 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-17 +date: 2023-02-18 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 e880520ab1036..1471d7ce1023c 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-17 +date: 2023-02-18 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 4f5775d0954ee..fbc5d4747893b 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-17 +date: 2023-02-18 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 9a1d6218ec271..1714a93d132f0 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-17 +date: 2023-02-18 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 2123295bfa136..5366c307fa9e0 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index b5dc8dabef401..a0315e002184e 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-17 +date: 2023-02-18 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 fd0ffd371ed19..0dcf14e0f738d 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index f191a0a320869..552c8430289d2 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 8c42823bb8ed0..3a8c68aaf15be 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-17 +date: 2023-02-18 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 3fbc16b9cc311..57abe26f2268e 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-17 +date: 2023-02-18 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 8e07c34fe05d7..e172e3632f6b9 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-17 +date: 2023-02-18 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 95d94c26c37f3..80a34529bc255 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-17 +date: 2023-02-18 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 e8a3316643d55..7bd34e1206df6 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 5a47037cf9c1c..adb625072fa23 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-17 +date: 2023-02-18 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 4fc67b290dfbc..4a63c3e60e6e7 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-17 +date: 2023-02-18 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 b51b0a7155d5a..787a9843b8ec9 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-17 +date: 2023-02-18 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 57891fd669300..bbba081165b8f 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index fb8dcb6da6e97..08507d9b03aa0 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 1d0e71422ddd2..0fcac33ef6316 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-17 +date: 2023-02-18 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 8bdad4cd2907b..b35cd1561f362 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-17 +date: 2023-02-18 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 df70db764e657..cee4aa9fc82f4 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-17 +date: 2023-02-18 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 0add010ed494d..b7ecfc501cda8 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-17 +date: 2023-02-18 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 d27bae5f4929e..088e0ee40373d 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-17 +date: 2023-02-18 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 4fa6f089222a8..66e1a4c78d637 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-17 +date: 2023-02-18 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 b21873b91153d..77239278c5c9b 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 fa6aded325d37..2a51eefc2bbf4 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index c9b8f8b977309..7dedccf5cbc05 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index a0f104c545f06..df053c73a36fc 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-17 +date: 2023-02-18 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 6b3cba1fe29af..37b410b9bc645 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-17 +date: 2023-02-18 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 7795eb0ebce31..d11ef688e9ec5 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 28acbc782ef73..8b8dc1731c7b6 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 83606e35329a5..179108694cf94 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-17 +date: 2023-02-18 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 62da752984b66..819e66de145d8 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-17 +date: 2023-02-18 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 bd8229e3e4ef4..10cc686ae29e2 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-17 +date: 2023-02-18 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 cad52e6bd252c..6dc2dd22c460b 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 9a89c7b7a7f0c..1d1d708739523 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-17 +date: 2023-02-18 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 2ab9cdaa3ff90..f78ef100e167d 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index c81d1ba3909ed..8b93793915604 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 2ac00a0811c33..f1ddaec0984e7 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index ceaa7cacb9005..c383baab64140 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-17 +date: 2023-02-18 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 f6a88f3527e67..0aa4a4ac6d84a 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index bb0eb6a87d169..eb38eb0ae1885 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-17 +date: 2023-02-18 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 3863034eef051..2fcf603e74211 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-17 +date: 2023-02-18 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 5a72ca5988cdf..801eea65f7135 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-17 +date: 2023-02-18 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 052e71b420386..78db83619bf46 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-02-17 +date: 2023-02-18 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 990c14778a8f9..fe53566b86916 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-02-17 +date: 2023-02-18 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 285d7589f3b43..3f6752077aa60 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-02-17 +date: 2023-02-18 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 8d6be9ce6902e..587c4d4465b18 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-02-17 +date: 2023-02-18 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 07cdfe4ddd006..837d6d08c47fb 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-02-17 +date: 2023-02-18 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 76b9e75213aad..26f98982bcba0 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-02-17 +date: 2023-02-18 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 db75efd3c3ca6..03ee80470e7d8 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-02-17 +date: 2023-02-18 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 2aeeafe26261e..68a81d7e61f0d 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-02-17 +date: 2023-02-18 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 5c6b06c856ba0..fd908e6534771 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-02-17 +date: 2023-02-18 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 986df69249a91..966b16e2995b6 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index def3b15704961..5f18ad6e68953 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-17 +date: 2023-02-18 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 8aa2b4eb5a17e..033bcbb2b2de2 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 5e22e097c4196..f2c39ab92d991 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-17 +date: 2023-02-18 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 3fb32e4df53f5..e57e3c3bec8ac 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 8d0aa191a1de1..b663cd6be2325 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-17 +date: 2023-02-18 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 7101403e6bc18..f0058597d27d0 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-17 +date: 2023-02-18 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 ec8acb7e1feea..8bf4714ff912e 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-17 +date: 2023-02-18 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 1ff302d260fa5..a0028ea44556d 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-17 +date: 2023-02-18 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 162d3455ab0db..25fea79f7111f 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-17 +date: 2023-02-18 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 015b6c852ee5f..314a8a1018842 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-17 +date: 2023-02-18 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 7af12278d9fad..61b4143728085 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-17 +date: 2023-02-18 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 772a67b0ff68f..1f4985e372c46 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-17 +date: 2023-02-18 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 7613f843a0a13..840218c2d1c3f 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 184bce901fd2e..4e0e0a22e2b1e 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-17 +date: 2023-02-18 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 39faa54e61ca6..7448f35cc3b7a 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-17 +date: 2023-02-18 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 c095e7fd2abac..f8039e2871248 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-17 +date: 2023-02-18 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 c8c3a3b89cf38..b5057f08b4b4e 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-17 +date: 2023-02-18 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 42088c7a1fa33..b8b1d60db394d 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-17 +date: 2023-02-18 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 f5e40e60d0505..dc3e9ce66f675 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index d1dcbb7948c2d..5830f3a170755 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 9e8898a0a724c..28d207ef93280 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-17 +date: 2023-02-18 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 23cac42a48211..3f717c02e3c46 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-17 +date: 2023-02-18 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 62ff978db6681..59d2654fbef58 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 6b5b2f48d091e..43994a68b8700 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-17 +date: 2023-02-18 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 61defd3744dbf..d8ee2c851b25c 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-17 +date: 2023-02-18 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 cea2d020aa195..15e0d28836737 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-17 +date: 2023-02-18 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 80ba21e4b2cbf..e1834317fbb4d 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-17 +date: 2023-02-18 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 0cb5f2974cd54..2911803c2c99a 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-17 +date: 2023-02-18 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 e7c95338741bc..4cddb6f167673 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-17 +date: 2023-02-18 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 d29c638e160e1..c77ca466fac0f 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-17 +date: 2023-02-18 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 adca736538a99..18424d56ecd2a 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-17 +date: 2023-02-18 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 8120854fc7d4d..1b2a5590c881b 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-17 +date: 2023-02-18 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 2ce334142dcea..c355596ee37e4 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-17 +date: 2023-02-18 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 c1e58675c82e6..37963276df2a1 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-17 +date: 2023-02-18 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 e0df05ca591ba..8e8c4306eb22b 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-17 +date: 2023-02-18 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 39b407f002f9c..909abba2ff671 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-17 +date: 2023-02-18 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 7942de173c42a..749f9d677c568 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-17 +date: 2023-02-18 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 8f6516391844c28f722f3d3349182348aa4bc057 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Sun, 19 Feb 2023 00:56:51 -0500 Subject: [PATCH 114/210] [api-docs] 2023-02-19 Daily api_docs build (#151574) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/253 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 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/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.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_shippers_elastic_v3_browser.mdx | 2 +- api_docs/kbn_analytics_shippers_elastic_v3_common.mdx | 2 +- api_docs/kbn_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- api_docs/kbn_content_management_content_editor.mdx | 2 +- api_docs/kbn_content_management_table_list.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- api_docs/kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- api_docs/kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- api_docs/kbn_core_application_browser_internal.mdx | 2 +- api_docs/kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- api_docs/kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- api_docs/kbn_core_custom_branding_browser_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- api_docs/kbn_core_custom_branding_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- api_docs/kbn_core_deprecations_browser_internal.mdx | 2 +- api_docs/kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- api_docs/kbn_core_deprecations_server_internal.mdx | 2 +- api_docs/kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_mocks.mdx | 2 +- api_docs/kbn_core_environment_server_internal.mdx | 2 +- api_docs/kbn_core_environment_server_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_browser.mdx | 2 +- api_docs/kbn_core_execution_context_browser_internal.mdx | 2 +- api_docs/kbn_core_execution_context_browser_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_common.mdx | 2 +- api_docs/kbn_core_execution_context_server.mdx | 2 +- api_docs/kbn_core_execution_context_server_internal.mdx | 2 +- api_docs/kbn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- api_docs/kbn_core_http_context_server_mocks.mdx | 2 +- api_docs/kbn_core_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- api_docs/kbn_core_http_resources_server_internal.mdx | 2 +- api_docs/kbn_core_http_resources_server_mocks.mdx | 2 +- api_docs/kbn_core_http_router_server_internal.mdx | 2 +- api_docs/kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- api_docs/kbn_core_injected_metadata_browser_mocks.mdx | 2 +- api_docs/kbn_core_integrations_browser_internal.mdx | 2 +- api_docs/kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- api_docs/kbn_core_notifications_browser_internal.mdx | 2 +- api_docs/kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- api_docs/kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- api_docs/kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_api_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- .../kbn_core_saved_objects_import_export_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- api_docs/kbn_core_saved_objects_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- api_docs/kbn_core_test_helpers_deprecations_getters.mdx | 2 +- api_docs/kbn_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- api_docs/kbn_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- api_docs/kbn_core_ui_settings_browser_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- api_docs/kbn_core_ui_settings_server_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- api_docs/kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.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_performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- api_docs/kbn_securitysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_alerting_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- api_docs/kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- api_docs/kbn_shared_ux_avatar_user_profile_components.mdx | 2 +- api_docs/kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/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_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 476 files changed, 476 insertions(+), 476 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 7f3b57b4a3493..6a7af5b4d00cf 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-18 +date: 2023-02-19 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 6997c60717fa5..616f0fedb96c0 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 407e0bb5a6bcc..5551b24facb34 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-18 +date: 2023-02-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 b8c50069b1045..1bcac0e60cb59 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-18 +date: 2023-02-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 3ca0697679d77..fa0ebba98d9d2 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 9291e012c8228..85841f8604a73 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-18 +date: 2023-02-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 f68f1f2941648..3247182ee4dd6 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-18 +date: 2023-02-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 b3d2177b58e6e..e98add02f2506 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-18 +date: 2023-02-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 38e9dca0c2cb9..7579927392f59 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-18 +date: 2023-02-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 359ff809ade73..b3b8f47a96c33 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-18 +date: 2023-02-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 f227d5cca711a..19d184e29f942 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index c108c0bbc3fe5..cca2c4621f828 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index b67f0d90a52ba..45eb8c2a34bfe 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-18 +date: 2023-02-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 413782a562902..3d05a5a098c9f 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-18 +date: 2023-02-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 988b34e483530..8af1006f45f7d 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-18 +date: 2023-02-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 fad19b121d165..e0503ecc36fbf 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-18 +date: 2023-02-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 a7bf797c8f931..00289b2424534 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-18 +date: 2023-02-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 52b0c94fdb884..44395166f20ef 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-18 +date: 2023-02-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 2a2c5f8b70507..3caefead60560 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-18 +date: 2023-02-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 744c0b0273bc6..c81be30a6b86a 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-18 +date: 2023-02-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 c73f025709dac..67e18ed35fa7a 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-18 +date: 2023-02-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 bdfa0fe894aac..0613e61c2f8bf 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-18 +date: 2023-02-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 56c8de588350a..59e1b6a6d2ecc 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-18 +date: 2023-02-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 78e704dc9e390..37e36f42ce5a8 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-18 +date: 2023-02-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 390e25bf951a4..cd712ed9badb4 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-18 +date: 2023-02-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 b135a84b19637..207464a5d0d7c 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-18 +date: 2023-02-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 950ce216869b2..36daf4cd259e2 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-18 +date: 2023-02-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 ae2fc4527b1b8..d7b1db63dc67a 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-18 +date: 2023-02-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 446b52b498cb6..7a8ebf09ebb86 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-18 +date: 2023-02-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 82b3765fb78bb..13d727e5c4230 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 5946d7b9a9ad2..27be6f63a3b81 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index a00fab8eb9cea..791a7fcee0f44 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 53ca35cdd97c6..dcd329ab7672a 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 3bb294452e62e..af8aa3ceb1205 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-18 +date: 2023-02-19 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 a78d03a9ac84e..d02cea3d760b7 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-18 +date: 2023-02-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 676f585bf6d85..473f486365846 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index a15660e853474..f7ba98846b7bc 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 062382aad761d..251569e4e9ae2 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-18 +date: 2023-02-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 062c8eb49134a..5294d76b99e4f 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-18 +date: 2023-02-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 17a65a8438d2b..68996d5bab7eb 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-18 +date: 2023-02-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 8e6910e43e727..9b3b2dcc3281e 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-18 +date: 2023-02-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 e6a194ec9c9d3..d3b9bb5e1e876 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-18 +date: 2023-02-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 985649f0f2f64..42722635c7baa 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 7400633f67a81..632722b872c4d 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 21613d2a0e9f9..742fd6b81c4c1 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-18 +date: 2023-02-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 44b79a1cff527..fcf9ed9749cb5 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-18 +date: 2023-02-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 ee15efb322262..e8e1c0d56048d 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-18 +date: 2023-02-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 fb0a201a6d645..6eb381384293d 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-18 +date: 2023-02-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 f7e60468154bc..87c1f1e372dbc 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-18 +date: 2023-02-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 e6652a33a1de5..bf2f5209940f2 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-18 +date: 2023-02-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 37fb8531eaa6d..3f58effab908a 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-18 +date: 2023-02-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 0e33cb9cbdb5d..5fb53ac3d9351 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-18 +date: 2023-02-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 4a6c548d4eec5..1ddf46b5f40d8 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-18 +date: 2023-02-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 2bcf0f170f961..861e59c081fbe 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-18 +date: 2023-02-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 495509dc3a9d3..30cb0b6d6bb7b 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-18 +date: 2023-02-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 606b811e5260a..6ba2961ba689c 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-18 +date: 2023-02-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 6ecf8a42228c0..a9828813f97de 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-18 +date: 2023-02-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 51188152ac9e9..ae8d0564dbc6c 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-18 +date: 2023-02-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 ae3117c55b989..bbdfcebaff98d 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-18 +date: 2023-02-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 b3f2397a09eb0..e456e7345a4ed 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-18 +date: 2023-02-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 b36fc51eb8c87..3ac8ad092a142 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-18 +date: 2023-02-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 bf4d94181580d..e901b8864de08 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-18 +date: 2023-02-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 9ef48e8143f50..a95f9095fe91e 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-18 +date: 2023-02-19 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 5fa87c1378cfd..57df6932f8ec3 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-18 +date: 2023-02-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 c9c5f5639714b..5fade40db10cb 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-18 +date: 2023-02-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 19b06607368e3..f1aa805d6f44e 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-18 +date: 2023-02-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 66af743b1122b..d68a097e1958c 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-18 +date: 2023-02-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 c74de99f4eccd..0a5e6713d32a4 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-18 +date: 2023-02-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 1bcf285d05b66..b38362061cc1b 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-18 +date: 2023-02-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 15b63ab526aa0..5a308f4c6ac5f 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-18 +date: 2023-02-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 38f819c5edeb6..7f6c43cfa51ba 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 2c4de3cb938c5..1280cc2d85ac8 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-18 +date: 2023-02-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 eda62e845558a..f76acce8e4dae 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-18 +date: 2023-02-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 7e541b5d94dee..3125002158565 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 02d863dd5f62f..408d05bd7de2c 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index b5e6cdb9a8ccf..a560de3cad9ab 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index a0d30d1a11375..f600e9d2a5de2 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 1ba4e49e28887..86ea5279b6ff5 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-18 +date: 2023-02-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 fb47f927a40cc..76f91f73ecd43 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-18 +date: 2023-02-19 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 9a51e8e6a68ec..9142cc8179171 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index b4ffaef9d9710..9ce26d26ca9a0 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-18 +date: 2023-02-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 57180f38b9a59..c2da16cebb75a 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-18 +date: 2023-02-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 7fba5fcf37ba6..9b7a936ae1882 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-18 +date: 2023-02-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 426a432bd4627..b5c562828aecd 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-18 +date: 2023-02-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_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index ca87adca49775..56109df27bd9a 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 82e9680cdb04d..4059dc7cdbd13 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-18 +date: 2023-02-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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index d52546863f4a8..dae6c7c92a426 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-18 +date: 2023-02-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 135cb4e6c266a..7bbcf60108ecb 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-18 +date: 2023-02-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 863fa8ecfc8eb..71f978ac83646 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-18 +date: 2023-02-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 43cc2fa514486..4726035be062e 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 245a57c85783a..52c47793f4d17 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-18 +date: 2023-02-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 dc417e5baed28..3e7531452c544 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-18 +date: 2023-02-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 e8a496081e740..e295cd7591247 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-18 +date: 2023-02-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 f5217a0bff8c0..82df0b438a98d 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-18 +date: 2023-02-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 715cb696f49f7..2cd1eee5275d9 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-18 +date: 2023-02-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 ed6474f9d2369..8134dbeb8d04f 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-18 +date: 2023-02-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 6ce9e82355c8f..3124635bfcb40 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-18 +date: 2023-02-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 b7b9c47e005c6..62c9aee15a6af 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-18 +date: 2023-02-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 00bbada4986b3..3af62d847ea19 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-18 +date: 2023-02-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_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 18a5656fcf44b..15e5d40577e18 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 9fa1f368adaff..75c0780a5d168 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-18 +date: 2023-02-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 227c648fbbb46..7bf6af8f1f63d 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-18 +date: 2023-02-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 2c2a2db900ee4..1a717596141cc 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-18 +date: 2023-02-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 eddcd09d2dac7..34605844e2080 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-18 +date: 2023-02-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 90ba4b6ce451a..2666885d79858 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-18 +date: 2023-02-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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 6a958090b3d78..86733636fc7b0 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 3540904621e80..29ccb3e05d71a 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-18 +date: 2023-02-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 d32dab4dd7b1a..39ad160ebb126 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 47b8ca6cf91c0..bb524cac272ab 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 b3841cc013085..d7844ff4733f9 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-18 +date: 2023-02-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 f0370ed55caa5..c50d50267e01f 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 19332e96bbd5d..e8b64c64ebad1 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 a974e6e2f3d82..824c68b910096 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-18 +date: 2023-02-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 30c8eea14abb7..5e8f38b30978b 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 0c4a3ebabbb93..cd142dd925c15 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 c7012e408dd20..f95c43008760e 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-18 +date: 2023-02-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 ddcb9ddfc93af..994ac5635d449 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 73eb74f1e3d9c..9402377f06954 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 8a888eca9fa79..c087eaf2a708b 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 aff4634dc2188..07f2b5b20a4b5 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 6ec460555b2e3..a936ff5d4f6ee 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-18 +date: 2023-02-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 d4f0bf5e7f820..c3102c1468e9a 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 4e945fca6ef9f..582940a3cebcd 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 6b56067127809..f0a5ae0fc676c 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 291ac38bfb061..3b97dcb0fd4cb 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-18 +date: 2023-02-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 560a75d8cd578..d9b6626f1cd05 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-18 +date: 2023-02-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 c38eb2983238c..44190e4b01e90 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 facda2d8a9c4f..bb226b7eab1cd 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-18 +date: 2023-02-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 4c941739a3b3d..d4fa0089037f9 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 8eeb2443c3ee5..f8ba756626650 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 55e290d234ce8..6e035f0249549 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-18 +date: 2023-02-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 77017b9f2194c..775e3de2b8036 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 687907f355155..eef9d222b9017 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 789799e1789b8..92d91183e7e88 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-18 +date: 2023-02-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 30976bc98d6cf..2d14ca6b1e155 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-18 +date: 2023-02-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 05518ea7abc7e..fed7bbf94eba1 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 aa775006c036d..80a904e2e6bb2 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 d5d1c7e4043d0..079b3c6b2d225 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-18 +date: 2023-02-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 d103b9bdeb283..1281a9e4389c3 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 97c9569fe8bfd..03fe29b2fbd06 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 89a34979b532d..a7fb3ece73584 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-18 +date: 2023-02-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 c17b05c299ee3..69dcf1ffc2a96 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-18 +date: 2023-02-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 ff6eeaf9e63c2..1ecbdeff8ecf1 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 4c3a89e536f76..6be5ef13ad6af 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 d6be19744f534..d1cf47415dca6 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-18 +date: 2023-02-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 160fbfbc8df31..fb6d98567f187 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 5f50f250c9718..ef06754cd9207 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-18 +date: 2023-02-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 b1cf5de25955c..17a76ef917a3e 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 67053ed463390..bfad9bd84def5 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 dea1c39fd7cfd..503784aa2c18b 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 8ff46e91771f5..0f06bd1cd4c20 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-18 +date: 2023-02-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.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 96969ff2f26f1..c5505f962158c 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 18a2839bdd379..93339a166e743 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 f555b9ba69a6e..8b59976d8956b 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 a19e9c86b0bf1..7b7b0a129c3f6 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 9a587293b2653..683f47dfbf270 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-18 +date: 2023-02-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 1a41829d87c33..dc0fb98dd4db3 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 1ecdab637c6f0..158ea5b17a6f7 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 d2bbc7466310f..25ecc62fc7b31 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-18 +date: 2023-02-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 f65b58292e3f7..35288a0f35013 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-18 +date: 2023-02-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 8fab837842cde..24dcef7c32df9 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 2c285c2472f4b..b2aac44df3df2 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 e5cf573e717be..9192b4ea5bb4e 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-18 +date: 2023-02-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 c9a3e48a98082..86607dac31bed 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 0e143a1d2a742..190539f30ce8d 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-18 +date: 2023-02-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 5687e4372bf1d..cbd4f5a470995 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 0fb9f0a4547e0..2edfcd756812d 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 2b66142859825..fa25ee55d23cb 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-18 +date: 2023-02-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 b4d9047e16348..87a8aa3487a0a 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 9682cdbbd09bd..64ad0407d8d28 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-18 +date: 2023-02-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 3559f8642ca81..5f151e05a016b 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-18 +date: 2023-02-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 ca3ca4b3dbb6c..3d4bc5ca384b0 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 a5007957946d6..b9a9de2f09d20 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 f9d054ae745c4..fe09b036e7d3a 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 5a1ff4337c33a..717078bbf267b 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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.mdx b/api_docs/kbn_core_http_server.mdx index 8ecdb4df4ae83..f65ffe0a95d95 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-18 +date: 2023-02-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.mdx b/api_docs/kbn_core_http_server_internal.mdx index da93bb408a4a7..e2f5e6f2d69ed 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-18 +date: 2023-02-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.mdx b/api_docs/kbn_core_http_server_mocks.mdx index a6f112de60fb8..56b0bba440589 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 973a93417f222..2e352974b2fe4 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-18 +date: 2023-02-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 b6daf13664a1f..ba0373c4ab616 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 cccd3a7d94eff..d0c19912c8ead 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-18 +date: 2023-02-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 e87b6bad9e4b4..ebd743b463bbd 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 b323ee54d09a9..22b37584c7ecc 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 0a631f66da612..f2af53f2a4e97 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 c866108a4e0d1..2eaabd185ec34 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 dd252d49ee4ab..6746c157262b6 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 0ff226bca5333..bad0eeafad065 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-18 +date: 2023-02-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 3da0bcfc747f0..75a84858826fa 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 9871d7260ca63..ee4dfa34fd144 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-18 +date: 2023-02-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 61d135cae4f53..5d915ab795e30 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 94c663306a307..51f9a3470cdf1 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 ba75b5705d724..8b4aba222486a 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-18 +date: 2023-02-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 b7d2ba4fb0957..5d38f55bdc939 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-18 +date: 2023-02-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 c975be22a244a..1640a6cf5982d 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 f6a3b5fc587cc..9fe764a021559 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 839b6ec05de06..3bcd7cbfb839c 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 ea2de4b5a47cd..f9e80509d5e9d 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 1f595c89edb2b..125928f8d4eba 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-18 +date: 2023-02-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 600e4bb877fd5..ca4dd031c8700 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 4a9802eb95286..ab00cd98dd223 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 50f90838f6d67..017aa1e9d9175 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-18 +date: 2023-02-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 27a39edd67dc8..5446108064e16 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-18 +date: 2023-02-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 24480423b2050..a460f4b35ede6 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 5a9a8fc1190ad..707d7e6b2b912 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 da6ea2cc81ace..5835c31ee9faf 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-18 +date: 2023-02-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 63150f63c84fc..56ec17d6b0795 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 15784f496dcf6..7e8ff40d02d88 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 a7456bf24e5cf..7416264ed9f93 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-18 +date: 2023-02-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 ed3caa30394c9..fed9b4b697090 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 ced81d55af893..743aeacb7b59c 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 fb46b2e587c3f..ffc7e12067906 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-18 +date: 2023-02-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 01026039f4e1b..595b80c699ec8 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index f536e44cd7065..5f296d71fd81a 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-18 +date: 2023-02-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 dc8ec5e0239b6..28f1e7583013e 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 95ff3a5e66bc2..407837a6b2b30 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-18 +date: 2023-02-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 53d563b5bfd9e..e0c5aca9c701b 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 6984cdf41c0d6..7a1bf76483dac 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 d50bd3b2c4caa..85d044a5001cf 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 d6bba99a122a2..6641849897b35 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 a7fdd01277447..f8bd582f7407c 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 4eb9a568b8c0b..d0510e0f58650 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-18 +date: 2023-02-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 328847a7e3952..1ac5e45549cc7 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-18 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 06f73dbf323ff..cc0595b85983d 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 139224932dc33..c9fa1e3bcdf3c 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 49c442e0401f8..028ed08c58073 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-18 +date: 2023-02-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'; 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 4b5037c8d503c..cb0fda80973e0 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 4d462322e5aec..eeee60ad619c1 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-18 +date: 2023-02-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 08decfb64d664..b4b6aa20034f2 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 34c6d35aa8356..9b8715bbf634a 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 fba3223f297da..71fac5badb775 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-18 +date: 2023-02-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 dce2976b589d8..62f750d1327b3 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 cc4f286f62395..220187ce2d849 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 e7e223c6c7fb0..07bff40b9cc1c 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 9ff40062c8eac..2d71257c7c133 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 2832650d9cc74..8829857426941 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-18 +date: 2023-02-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 f8adb31643a4e..0577ceeccb828 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 b8a15fc7d1705..db125f8d2b531 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 7442ff0a56be4..44e51ea7201fc 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-18 +date: 2023-02-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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 5c9ecd16c6cd4..d7fd51d803509 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-18 +date: 2023-02-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 94253cca596fa..8f5506194dc32 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-18 +date: 2023-02-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 a4dbdad6f9f66..22d00f8e40494 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-18 +date: 2023-02-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 82986c80fceb9..7ab6ef0b24eae 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 98de7c90e1523..7eaf66a6c8b70 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 a648ea9991cff..1ef4dd8cf3aa5 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-18 +date: 2023-02-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 d9c850467ee50..214fdd267d2cc 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-18 +date: 2023-02-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.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 9a0c69376def8..7f94b63294098 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-18 +date: 2023-02-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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 3fc10bb04dd99..c11d9c1099e32 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-18 +date: 2023-02-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 ea0beb5ec582c..8e03151e3db74 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-18 +date: 2023-02-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 f34898398e433..229c1986f4ac2 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-18 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 58a1113a41e9a..9b81a93385818 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index e696f3f6bffc4..7c2d0da34a35a 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 2e44b956f5155..6b4257d452905 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-18 +date: 2023-02-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 6e2928c20f521..e9fb94b2439bf 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-18 +date: 2023-02-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 23d49ddea63df..89b6b26b0d9cf 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-18 +date: 2023-02-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 e3b04c269a12f..94eab93bb899a 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-18 +date: 2023-02-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 9397bf740e0b3..0795ad0a71df0 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-18 +date: 2023-02-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 0fc6da482bee9..feead06175d05 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 61d7cfa75a8fe..c743313ea3ddf 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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 e6afca43b1e65..50ddc5213b4fd 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-18 +date: 2023-02-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 1f8a42d77bf14..8d362dcb239c5 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-18 +date: 2023-02-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 ee3e5a634774a..39aec5aadc825 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-18 +date: 2023-02-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_crypto.mdx b/api_docs/kbn_crypto.mdx index 274ab42c5decb..f1d10875c798e 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-18 +date: 2023-02-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 cc6382bb31b5c..d66917a41a2a2 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index f6cbaa572a291..8114637b96203 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index e0e76c241d226..744f833724b65 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 992711ecf1404..84d707d6dfb0c 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-18 +date: 2023-02-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 8df2672cd7b5b..2b69471c2a77f 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-18 +date: 2023-02-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 a7813b5c8bf70..2da6528c5b562 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-18 +date: 2023-02-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 1cdd8047c0b88..0a737498a227e 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index b2a86a188f279..81c44845b363f 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-18 +date: 2023-02-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 7fee070b4e249..27547cfbcb80b 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index af393f6ec296d..7248b0e2978a4 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index f4ad0d3218160..fc0295dc79ced 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index fe80c23906989..15bd3afa61593 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-18 +date: 2023-02-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_es.mdx b/api_docs/kbn_es.mdx index 273809a355bda..2657cc8bc0fe0 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-18 +date: 2023-02-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 b38688f5d84ea..f9b2141838398 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-18 +date: 2023-02-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 1c5e1724e2099..240f13d5efff6 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-18 +date: 2023-02-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 85dddbccae62a..e3c43b292289d 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-18 +date: 2023-02-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 3544f73d8c24f..7860ea135ae04 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-18 +date: 2023-02-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 329c96821843a..00fc6f85d0748 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-18 +date: 2023-02-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_field_types.mdx b/api_docs/kbn_field_types.mdx index 27b204052e375..e6e4d31b69573 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index c91162634aa96..a4c8492a4a732 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-18 +date: 2023-02-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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 9e872991f3160..5d6c635a9b5dc 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-18 +date: 2023-02-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_generate.mdx b/api_docs/kbn_generate.mdx index 6490d976bfd6b..aa64b28320c4a 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 4c0e8b27b3deb..faa1cf4740436 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-18 +date: 2023-02-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 86e68187b71bc..827d06e7419e8 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-18 +date: 2023-02-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 d99cb4640c88b..907b4bd8dc8cd 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-18 +date: 2023-02-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 ed466533b349c..1fc6c0b341c58 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-18 +date: 2023-02-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 5920e775b7669..d1ac81bf0c146 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-18 +date: 2023-02-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 b5afc04d956b6..49630322f972d 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-18 +date: 2023-02-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 8e7fded4ce0ea..8dc8c6b551923 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-18 +date: 2023-02-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 d04b3e236cc30..b44d88b3ea66d 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-18 +date: 2023-02-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 785fa078627f9..85a84b94e6306 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 1ca5660ef26a6..af746cb652444 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-18 +date: 2023-02-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 81d93c8f4c7b9..3645d4383fb9a 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-18 +date: 2023-02-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_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 6f803adebcf03..eed5437f2c4de 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-18 +date: 2023-02-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 3e9a4e6385fc8..3100efd2e20fc 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-18 +date: 2023-02-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 9a611f9651ab4..d943b90a87cc7 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-18 +date: 2023-02-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 324bae801aaec..2f658d1aa2d55 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-18 +date: 2023-02-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 df5c23642e700..a3e7000070a6b 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-18 +date: 2023-02-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_logging.mdx b/api_docs/kbn_logging.mdx index 8e63e5ec04a22..7a90847e6cac2 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-18 +date: 2023-02-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 359590dce3b27..389158926a584 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index d65c6842fe9fb..847f2ec23a967 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-18 +date: 2023-02-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_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 48a5d3f9eeba8..0192f7685796c 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 410679ccff228..4c83dfb6f7aed 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-18 +date: 2023-02-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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 71cfbd9457c4d..294aed797f4dd 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-18 +date: 2023-02-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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 0a88f67f422fb..4615c0eb2a407 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-18 +date: 2023-02-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 98cdf050913fd..d7a30c54c727c 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-18 +date: 2023-02-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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index a996f192f5714..89e164fd43985 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-18 +date: 2023-02-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 6af393bf20ef8..1d595e05c66ec 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-18 +date: 2023-02-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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 1f083bc3b454c..19031632449c9 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-18 +date: 2023-02-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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 51b59b534f64e..449565335169f 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-18 +date: 2023-02-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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 59593e268b73b..ce2430112d496 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-18 +date: 2023-02-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_monaco.mdx b/api_docs/kbn_monaco.mdx index f27dc591c1ca5..a957768361916 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 9fbceff1ffb79..f78a59abe356c 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-18 +date: 2023-02-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 422f7009e3889..6ef0c19555748 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-18 +date: 2023-02-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 fa99c311a189d..5775aaabf0944 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-18 +date: 2023-02-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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 27c7211e8001f..ba6a561249169 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-18 +date: 2023-02-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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 429e83a6bc81b..1e3a4272ce53c 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-18 +date: 2023-02-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 bd6634cf2c61f..eeb6a0694839b 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index d45eb9861f5b9..134c390a272fc 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 0231cb701f391..83b1314148aa1 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-18 +date: 2023-02-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 1d8ef4448f076..95aeda00a5511 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-18 +date: 2023-02-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 39e5fd5e80ddf..d01a8fefd586a 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-18 +date: 2023-02-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 51f47d9eaabef..a71cbdb9628c9 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-18 +date: 2023-02-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_rison.mdx b/api_docs/kbn_rison.mdx index d9d23d786d30b..38d1d698825cb 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index b201e23dde09c..16d6bb8e051ee 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-18 +date: 2023-02-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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 4e1a8347e4c5e..ad7e4395bfa14 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 091ad9bbf3a00..ea044ac52de2b 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-18 +date: 2023-02-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 a939eaec60120..e3b544c0cfa4b 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-18 +date: 2023-02-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 a054dcb37dc86..8c32343562250 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-18 +date: 2023-02-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_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 6f5bf067940cd..0f89abf1ef0bd 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-18 +date: 2023-02-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 eefcfc3e07a13..87c26f18e3de8 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-18 +date: 2023-02-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 b7b802128dd1a..2d08ef56d0d14 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-18 +date: 2023-02-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 d2d52c6343fe5..f05ebc756cd65 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-18 +date: 2023-02-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 dd05eedd0cbe3..56378d6f8b7ea 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-18 +date: 2023-02-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 926da95db307d..daf6bb8e7dec3 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-18 +date: 2023-02-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 4bb8d5990f262..91e1b5f3f4153 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-18 +date: 2023-02-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 908e6716fda1d..f1e030e9ea672 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-18 +date: 2023-02-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 a8a69b9e2c8b2..3bacb4478fa66 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-18 +date: 2023-02-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 ef62c5d5a8ac4..c4d8b17061742 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-18 +date: 2023-02-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 a0e14c931ad75..da5c3c0499679 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-18 +date: 2023-02-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 e44f0bfd4c922..f2b31aad7ad35 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-18 +date: 2023-02-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 7f2546b64e919..816acddf6f254 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-18 +date: 2023-02-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 dd7e2e599fd21..c34d109733c1c 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-18 +date: 2023-02-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_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 7ad69ec702513..6904abc5cde06 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-18 +date: 2023-02-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 d4063fb672201..70edd97a4ccca 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-18 +date: 2023-02-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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index e824f9ec1139c..810308147695e 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 6c18d6afa10b7..ffd67a8bdbae2 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-18 +date: 2023-02-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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 7bfc4542d85e6..d3a9f2b6e7544 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 9e9122ca702d2..c33a45f33d91a 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-18 +date: 2023-02-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 5daf21afdc406..7197148183368 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-18 +date: 2023-02-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 df59e5b853770..7e7a34b2fdc03 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-18 +date: 2023-02-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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 67e717ae88176..d1fbf5166d26d 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-18 +date: 2023-02-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 982e09470d14a..09152c7c184e8 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-18 +date: 2023-02-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 ddf7da8008aaa..4fcaad599f089 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-18 +date: 2023-02-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 c39a3126cc5ee..ea8cbb288e5a1 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-18 +date: 2023-02-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 7792d1a5d39fc..bc4ff28614368 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-18 +date: 2023-02-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_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 1cb55f8157a00..98ec73c5f98bd 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-18 +date: 2023-02-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 663c5a4854884..12ebb3219f375 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-18 +date: 2023-02-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 304d904e2a7e9..f7e6d2b3a8ddb 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-18 +date: 2023-02-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 813820c733ae8..3fa3d3b167fc0 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-18 +date: 2023-02-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 75b0ed95e7189..233b9183ccff7 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-18 +date: 2023-02-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 bb728e12daf3a..3ef6994ed5220 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-18 +date: 2023-02-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 f306d00f89391..a5dbd9ced0d5b 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-18 +date: 2023-02-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 fcc2ac535d7e7..5536ad5ff2cf3 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-18 +date: 2023-02-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 23278617ad999..13ac2ad86378f 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-18 +date: 2023-02-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 b1ed96cd0fc8c..93926a39695a0 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-18 +date: 2023-02-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 916cb965462de..86f2649266e27 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-18 +date: 2023-02-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 a34c43a0f554b..03baafb3809f2 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-18 +date: 2023-02-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 96f0f683206bf..8de2a1a53f7a6 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-18 +date: 2023-02-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 e8a2d683552f2..950ad746e94ce 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-18 +date: 2023-02-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 8fe3e68b1994c..638b0c6706010 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-18 +date: 2023-02-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 befe0fdc76613..3349a62f769c6 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-18 +date: 2023-02-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 1f82881f13d93..ba07010a0e38c 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-18 +date: 2023-02-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 b708cba2d2319..dd89359eab6e1 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-18 +date: 2023-02-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 f0dd71a867757..f427bb44a6b5d 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-18 +date: 2023-02-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 692e9f4544a48..fc5b18dbd85a1 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-18 +date: 2023-02-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 01f71ca207c66..5215606ca8def 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-18 +date: 2023-02-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 96d7b77674840..dd3bd56d77895 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-18 +date: 2023-02-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 7b4ff7f457d5b..8ee3ec12ff03a 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-18 +date: 2023-02-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 9e285c5bf5052..c9d5fdb8c1852 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-18 +date: 2023-02-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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index c79823bafac6e..e38407f2105d2 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-18 +date: 2023-02-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 7ea669e44b0ed..45f8b69b4cac2 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 3465d0207937c..63c0b55ee7e0f 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-18 +date: 2023-02-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_std.mdx b/api_docs/kbn_std.mdx index 4e1c96efabc08..24516c50330c2 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-18 +date: 2023-02-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 1471d7ce1023c..15920e95e9b3f 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-18 +date: 2023-02-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 fbc5d4747893b..8098f4c9f629a 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-18 +date: 2023-02-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 1714a93d132f0..ff3e0308184f0 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-18 +date: 2023-02-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 5366c307fa9e0..526b60a5e627b 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index a0315e002184e..2e37ad8813619 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-18 +date: 2023-02-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 0dcf14e0f738d..8a04f281e9fdd 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-18 +date: 2023-02-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_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 552c8430289d2..39eb470ce4e0a 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 3a8c68aaf15be..777c77f92c0bb 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-18 +date: 2023-02-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 57abe26f2268e..63fdcd3c3e34d 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-18 +date: 2023-02-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 e172e3632f6b9..183833bfed798 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-18 +date: 2023-02-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 80a34529bc255..63c2496453207 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-18 +date: 2023-02-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 7bd34e1206df6..edb09aec7c8cd 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index adb625072fa23..a5e2ff0522b9a 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-18 +date: 2023-02-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 4a63c3e60e6e7..2df9cfd044235 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-18 +date: 2023-02-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 787a9843b8ec9..fdb8508b72adf 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-18 +date: 2023-02-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 bbba081165b8f..af46a13115438 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 08507d9b03aa0..860b2fd888752 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 0fcac33ef6316..7e96c1e43caf0 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-18 +date: 2023-02-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 b35cd1561f362..642e2c6fd314b 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-18 +date: 2023-02-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 cee4aa9fc82f4..3acaa8ce75de7 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-18 +date: 2023-02-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 b7ecfc501cda8..221801e8bdea9 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-18 +date: 2023-02-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 088e0ee40373d..faa018419c2cb 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-18 +date: 2023-02-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 66e1a4c78d637..589af13adfafd 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-18 +date: 2023-02-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 77239278c5c9b..0eb43ea872369 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-18 +date: 2023-02-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 2a51eefc2bbf4..da6533dc5f579 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 7dedccf5cbc05..f48e92a22dc20 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index df053c73a36fc..39fe1f94fb72b 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-18 +date: 2023-02-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 37b410b9bc645..0d5b56ea0d2ba 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-18 +date: 2023-02-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 d11ef688e9ec5..a621d49fe2620 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 8b8dc1731c7b6..84d30cc16c1fe 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 179108694cf94..bb8a4fbd13d28 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-18 +date: 2023-02-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 819e66de145d8..99ae818d79776 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-18 +date: 2023-02-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 10cc686ae29e2..ab0a17afc7e6b 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-18 +date: 2023-02-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 6dc2dd22c460b..0331e2fa9941e 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 1d1d708739523..4242150a6d431 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-18 +date: 2023-02-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 f78ef100e167d..a2bb45677a53b 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 8b93793915604..d900524e5c490 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index f1ddaec0984e7..33c62b702a52d 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index c383baab64140..3dd26e3a8b378 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-18 +date: 2023-02-19 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 0aa4a4ac6d84a..9a94b061a4ef1 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index eb38eb0ae1885..115f27d4f3341 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-18 +date: 2023-02-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 2fcf603e74211..08f92719703ff 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-18 +date: 2023-02-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 801eea65f7135..c5611e62f6461 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-18 +date: 2023-02-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 78db83619bf46..212ea8f688a4f 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-02-18 +date: 2023-02-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 fe53566b86916..79a6e53433a1b 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-02-18 +date: 2023-02-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 3f6752077aa60..d52ecde01b8ec 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-02-18 +date: 2023-02-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 587c4d4465b18..3119ac6166ab1 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-02-18 +date: 2023-02-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 837d6d08c47fb..2ac8db3dd6679 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-02-18 +date: 2023-02-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 26f98982bcba0..9078c8d16337f 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-02-18 +date: 2023-02-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 03ee80470e7d8..aaf416f3f1fbc 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-02-18 +date: 2023-02-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 68a81d7e61f0d..fd3c148ebd723 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-02-18 +date: 2023-02-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 fd908e6534771..748aec43bdd71 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-02-18 +date: 2023-02-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 966b16e2995b6..0cd6bf0ebecad 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 5f18ad6e68953..462d538bdf189 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-18 +date: 2023-02-19 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 033bcbb2b2de2..79cd10d49de5b 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index f2c39ab92d991..cd77ce5fbf76a 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-18 +date: 2023-02-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 e57e3c3bec8ac..78655b49930b1 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index b663cd6be2325..f524870ae1b2a 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-18 +date: 2023-02-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 f0058597d27d0..59b6e787b9a40 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-18 +date: 2023-02-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 8bf4714ff912e..d7a18bfbdb1d0 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-18 +date: 2023-02-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 a0028ea44556d..5a1a5938cbd35 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-18 +date: 2023-02-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 25fea79f7111f..52ccbd1c2cc23 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-18 +date: 2023-02-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 314a8a1018842..bb461e99989ff 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-18 +date: 2023-02-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 61b4143728085..99a6bd3b1c1e6 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-18 +date: 2023-02-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 1f4985e372c46..1893ec24f1e8c 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-18 +date: 2023-02-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 840218c2d1c3f..4aeeb9d3e213c 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 4e0e0a22e2b1e..77a5e450d2409 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-18 +date: 2023-02-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 7448f35cc3b7a..ec153c1fd8014 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-18 +date: 2023-02-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 f8039e2871248..27c0684cec4f5 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-18 +date: 2023-02-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 b5057f08b4b4e..ea8c6a1930e3f 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-18 +date: 2023-02-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 b8b1d60db394d..87449b8ef7ed8 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-18 +date: 2023-02-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 dc3e9ce66f675..92b2bc70898fe 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index 5830f3a170755..b5de963ad5b42 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 28d207ef93280..9edc62b69eeb1 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-18 +date: 2023-02-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 3f717c02e3c46..19fc5cd7f6ae5 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-18 +date: 2023-02-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 59d2654fbef58..b9c1936a806f8 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 43994a68b8700..bd5721720b472 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-18 +date: 2023-02-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 d8ee2c851b25c..53cfad5b1644d 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-18 +date: 2023-02-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 15e0d28836737..9678c13bee070 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-18 +date: 2023-02-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 e1834317fbb4d..abd6d0f796d00 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-18 +date: 2023-02-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 2911803c2c99a..0610cc98618df 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-18 +date: 2023-02-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 4cddb6f167673..edd51980b0a6d 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-18 +date: 2023-02-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 c77ca466fac0f..a0333b3edae1c 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-18 +date: 2023-02-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 18424d56ecd2a..6599cb3a01067 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-18 +date: 2023-02-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 1b2a5590c881b..3cbb30fe39a08 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-18 +date: 2023-02-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 c355596ee37e4..89e1c053dd7a3 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-18 +date: 2023-02-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 37963276df2a1..23b69ffb64399 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-18 +date: 2023-02-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 8e8c4306eb22b..72f25c1e002b8 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-18 +date: 2023-02-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 909abba2ff671..94ca890c2120e 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-18 +date: 2023-02-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 749f9d677c568..447f2df69dc3a 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-18 +date: 2023-02-19 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 3d41e386d8fe8257a1e4e56ed548aa81a2a9381e Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Mon, 20 Feb 2023 00:52:36 -0500 Subject: [PATCH 115/210] [api-docs] 2023-02-20 Daily api_docs build (#151580) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/254 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 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/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.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_shippers_elastic_v3_browser.mdx | 2 +- api_docs/kbn_analytics_shippers_elastic_v3_common.mdx | 2 +- api_docs/kbn_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- api_docs/kbn_content_management_content_editor.mdx | 2 +- api_docs/kbn_content_management_table_list.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- api_docs/kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- api_docs/kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- api_docs/kbn_core_application_browser_internal.mdx | 2 +- api_docs/kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- api_docs/kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- api_docs/kbn_core_custom_branding_browser_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- api_docs/kbn_core_custom_branding_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- api_docs/kbn_core_deprecations_browser_internal.mdx | 2 +- api_docs/kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- api_docs/kbn_core_deprecations_server_internal.mdx | 2 +- api_docs/kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_internal.mdx | 2 +- api_docs/kbn_core_elasticsearch_server_mocks.mdx | 2 +- api_docs/kbn_core_environment_server_internal.mdx | 2 +- api_docs/kbn_core_environment_server_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_browser.mdx | 2 +- api_docs/kbn_core_execution_context_browser_internal.mdx | 2 +- api_docs/kbn_core_execution_context_browser_mocks.mdx | 2 +- api_docs/kbn_core_execution_context_common.mdx | 2 +- api_docs/kbn_core_execution_context_server.mdx | 2 +- api_docs/kbn_core_execution_context_server_internal.mdx | 2 +- api_docs/kbn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- api_docs/kbn_core_http_context_server_mocks.mdx | 2 +- api_docs/kbn_core_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- api_docs/kbn_core_http_resources_server_internal.mdx | 2 +- api_docs/kbn_core_http_resources_server_mocks.mdx | 2 +- api_docs/kbn_core_http_router_server_internal.mdx | 2 +- api_docs/kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- api_docs/kbn_core_injected_metadata_browser_mocks.mdx | 2 +- api_docs/kbn_core_integrations_browser_internal.mdx | 2 +- api_docs/kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- api_docs/kbn_core_notifications_browser_internal.mdx | 2 +- api_docs/kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- api_docs/kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- api_docs/kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_api_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_api_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- .../kbn_core_saved_objects_import_export_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- api_docs/kbn_core_saved_objects_server_internal.mdx | 2 +- api_docs/kbn_core_saved_objects_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- api_docs/kbn_core_test_helpers_deprecations_getters.mdx | 2 +- api_docs/kbn_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- api_docs/kbn_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- api_docs/kbn_core_ui_settings_browser_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- api_docs/kbn_core_ui_settings_server_internal.mdx | 2 +- api_docs/kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- api_docs/kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.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_performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- api_docs/kbn_securitysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_alerting_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- api_docs/kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- api_docs/kbn_shared_ux_avatar_user_profile_components.mdx | 2 +- api_docs/kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template.mdx | 2 +- api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views.mdx | 2 +- api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/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_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 476 files changed, 476 insertions(+), 476 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 6a7af5b4d00cf..96933145bfd1a 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-19 +date: 2023-02-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 616f0fedb96c0..9245052c091e5 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 5551b24facb34..bb3492b0d47ac 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-19 +date: 2023-02-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 1bcac0e60cb59..499a7945a0076 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-19 +date: 2023-02-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 fa0ebba98d9d2..f3f795ff3c0c9 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 85841f8604a73..f17edc6e906a6 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-19 +date: 2023-02-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 3247182ee4dd6..dabb284b2e4a3 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-19 +date: 2023-02-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 e98add02f2506..a16c0af5f3459 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-19 +date: 2023-02-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 7579927392f59..144a098e2786f 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-19 +date: 2023-02-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 b3b8f47a96c33..69e52325ae810 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-19 +date: 2023-02-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 19d184e29f942..b527598cf8c46 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index cca2c4621f828..0dfe68156b3d7 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 45eb8c2a34bfe..0cf526dd9c85e 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-19 +date: 2023-02-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 3d05a5a098c9f..2c9fd613912e1 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-19 +date: 2023-02-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 8af1006f45f7d..9227acec97276 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-19 +date: 2023-02-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 e0503ecc36fbf..2241f950c24a7 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-19 +date: 2023-02-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 00289b2424534..4e03f66dd18a3 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-19 +date: 2023-02-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 44395166f20ef..86289b6f484fd 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-19 +date: 2023-02-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 3caefead60560..76767eafedcd5 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-19 +date: 2023-02-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 c81be30a6b86a..d078f40776bfe 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-19 +date: 2023-02-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 67e18ed35fa7a..c61f643760bca 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-19 +date: 2023-02-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 0613e61c2f8bf..2e1f0066d887e 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-19 +date: 2023-02-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 59e1b6a6d2ecc..36dd1ccf8c417 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-19 +date: 2023-02-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 37e36f42ce5a8..29cce7557e5d6 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-19 +date: 2023-02-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 cd712ed9badb4..c9601b08984ac 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-19 +date: 2023-02-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 207464a5d0d7c..75f656bafdee2 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-19 +date: 2023-02-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 36daf4cd259e2..e14e5e81de3db 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-19 +date: 2023-02-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 d7b1db63dc67a..839366c6a72f9 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-19 +date: 2023-02-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 7a8ebf09ebb86..07e8d8ea4d415 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-19 +date: 2023-02-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 13d727e5c4230..c5a3cb1916567 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 27be6f63a3b81..67da4dc09d388 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 791a7fcee0f44..7f1d78ce960de 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index dcd329ab7672a..b3fe11110da41 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index af8aa3ceb1205..3750aa0bbfca1 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-19 +date: 2023-02-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 d02cea3d760b7..731f54e4bae4a 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-19 +date: 2023-02-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 473f486365846..df26d7a3f63c4 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index f7ba98846b7bc..63ab8db054397 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 251569e4e9ae2..84f2732b4763f 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-19 +date: 2023-02-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 5294d76b99e4f..77c6ef1cc13ec 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-19 +date: 2023-02-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 68996d5bab7eb..3a95b8b4588f1 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-19 +date: 2023-02-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 9b3b2dcc3281e..ccdfb19bce93a 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-19 +date: 2023-02-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 d3b9bb5e1e876..66286c65b3b3e 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-19 +date: 2023-02-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 42722635c7baa..cf2fb6514cec1 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 632722b872c4d..b46b1c1673882 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 742fd6b81c4c1..b1bc04ed2298f 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-19 +date: 2023-02-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 fcf9ed9749cb5..7c50317ce6567 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-19 +date: 2023-02-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 e8e1c0d56048d..a1187dc6d0763 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-19 +date: 2023-02-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 6eb381384293d..30cd7104a45d2 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-19 +date: 2023-02-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 87c1f1e372dbc..66c30f6ca11c7 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-19 +date: 2023-02-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 bf2f5209940f2..da30a1490364d 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-19 +date: 2023-02-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 3f58effab908a..5ab21304bfdf2 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-19 +date: 2023-02-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 5fb53ac3d9351..4409df31e008a 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-19 +date: 2023-02-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 1ddf46b5f40d8..b04d38c25bac8 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-19 +date: 2023-02-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 861e59c081fbe..2e9e4de423103 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-19 +date: 2023-02-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 30cb0b6d6bb7b..f2d2619c6307a 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-19 +date: 2023-02-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 6ba2961ba689c..fc0f9235a1092 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-19 +date: 2023-02-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 a9828813f97de..fbe05b487dc39 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-19 +date: 2023-02-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 ae8d0564dbc6c..3732d359741c6 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-19 +date: 2023-02-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 bbdfcebaff98d..54edad3a62b9f 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-19 +date: 2023-02-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 e456e7345a4ed..6da5d6b4d1081 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-19 +date: 2023-02-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 3ac8ad092a142..a23f1cf26ae9e 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-19 +date: 2023-02-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 e901b8864de08..2f273447d4f9e 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-19 +date: 2023-02-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 a95f9095fe91e..79d63fdf97fda 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-19 +date: 2023-02-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 57df6932f8ec3..81812b8f19fe1 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-19 +date: 2023-02-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 5fade40db10cb..4eec34b4078f9 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-19 +date: 2023-02-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 f1aa805d6f44e..43101fedab1e6 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-19 +date: 2023-02-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 d68a097e1958c..d72e68287c1f7 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-19 +date: 2023-02-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 0a5e6713d32a4..b02019dc3934b 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-19 +date: 2023-02-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 b38362061cc1b..f5ce120f83aa2 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-19 +date: 2023-02-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 5a308f4c6ac5f..6de10fdb6beca 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-19 +date: 2023-02-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 7f6c43cfa51ba..d4f2769034149 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 1280cc2d85ac8..fe1dd4d34f93c 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-19 +date: 2023-02-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 f76acce8e4dae..1f006d364686b 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-19 +date: 2023-02-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 3125002158565..b4f7c361086e2 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 408d05bd7de2c..0d9c2c389305f 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index a560de3cad9ab..2e6a52dd1c380 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index f600e9d2a5de2..e248e80581a4e 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 86ea5279b6ff5..7c01647a92dbc 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-19 +date: 2023-02-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 76f91f73ecd43..fdd30a59099f1 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-19 +date: 2023-02-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 9142cc8179171..a4f582b1d6965 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 9ce26d26ca9a0..be53f47dcb664 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-19 +date: 2023-02-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 c2da16cebb75a..4b5bea9cb4236 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-19 +date: 2023-02-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 9b7a936ae1882..ba59066cca87f 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-19 +date: 2023-02-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 b5c562828aecd..59584a1b0465b 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-19 +date: 2023-02-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_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 56109df27bd9a..dd80a9e7fcd42 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 4059dc7cdbd13..2eaa5f30b8baa 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-19 +date: 2023-02-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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index dae6c7c92a426..a3993b93e2b2a 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-19 +date: 2023-02-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 7bbcf60108ecb..92c09d6e41661 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-19 +date: 2023-02-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 71f978ac83646..d220351e7a3c3 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-19 +date: 2023-02-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 4726035be062e..6e1cc62cab8bb 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 52c47793f4d17..a013a376ab233 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-19 +date: 2023-02-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 3e7531452c544..712ffeb923cd7 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-19 +date: 2023-02-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 e295cd7591247..31408f4502319 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-19 +date: 2023-02-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 82df0b438a98d..eba68b2697f4c 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-19 +date: 2023-02-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 2cd1eee5275d9..a14a8d64e13e8 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-19 +date: 2023-02-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 8134dbeb8d04f..61f64964d9119 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-19 +date: 2023-02-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 3124635bfcb40..73403609a9a24 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-19 +date: 2023-02-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 62c9aee15a6af..dcbedc12127d2 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-19 +date: 2023-02-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 3af62d847ea19..579a8c18fe3f7 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-19 +date: 2023-02-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_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 15e5d40577e18..10f9a1f8d1616 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 75c0780a5d168..0054f02b88b6d 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-19 +date: 2023-02-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 7bf6af8f1f63d..0a97b71138c1f 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-19 +date: 2023-02-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 1a717596141cc..d3d8c69026b6d 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-19 +date: 2023-02-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 34605844e2080..a0f1fa4a9d9a4 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-19 +date: 2023-02-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 2666885d79858..ba55373185863 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-19 +date: 2023-02-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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 86733636fc7b0..c056c6413ce0b 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 29ccb3e05d71a..6794d50e0747a 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-19 +date: 2023-02-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 39ad160ebb126..59cfea9ea1b89 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 bb524cac272ab..3b50ad6169b8b 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 d7844ff4733f9..2da32f7c1a6f4 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-19 +date: 2023-02-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 c50d50267e01f..3b7d5a3046b27 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 e8b64c64ebad1..f08cdd12d528e 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 824c68b910096..402c2297f236b 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-19 +date: 2023-02-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 5e8f38b30978b..385e097e709db 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 cd142dd925c15..4891aab4f86c7 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 f95c43008760e..0bee8677e8617 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-19 +date: 2023-02-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 994ac5635d449..8345bac27dd6e 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 9402377f06954..3397169accccf 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 c087eaf2a708b..585bb2ff41528 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 07f2b5b20a4b5..38f54791fed0d 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 a936ff5d4f6ee..e867b8416a9a6 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-19 +date: 2023-02-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 c3102c1468e9a..5fa1fc69984c3 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 582940a3cebcd..096e24ce4e432 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 f0a5ae0fc676c..13f21613ee0e8 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 3b97dcb0fd4cb..58b92d226f0ef 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-19 +date: 2023-02-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 d9b6626f1cd05..3db1299b5b4dd 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-19 +date: 2023-02-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 44190e4b01e90..340c1b66be40c 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 bb226b7eab1cd..923f0f68cef77 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-19 +date: 2023-02-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 d4fa0089037f9..72823e124ddda 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 f8ba756626650..8c76d4232bfbe 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 6e035f0249549..d5bfa74abb01e 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-19 +date: 2023-02-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 775e3de2b8036..4ee3d451240ea 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 eef9d222b9017..575e759e5795b 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 92d91183e7e88..c7b25a59588fc 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-19 +date: 2023-02-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 2d14ca6b1e155..a536f2e761c00 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-19 +date: 2023-02-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 fed7bbf94eba1..47a6e6b3ab8aa 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 80a904e2e6bb2..91cffaf9c59c8 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 079b3c6b2d225..df24e33e30631 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-19 +date: 2023-02-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 1281a9e4389c3..a4e7199abbab7 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 03fe29b2fbd06..91d5ef4e27505 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 a7fb3ece73584..feafe5f535402 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-19 +date: 2023-02-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 69dcf1ffc2a96..e4e584660a257 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-19 +date: 2023-02-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 1ecbdeff8ecf1..b2998949e2783 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 6be5ef13ad6af..d791f8dc091db 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 d1cf47415dca6..d7272b8702452 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-19 +date: 2023-02-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 fb6d98567f187..8cc9314588852 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 ef06754cd9207..c44141272426e 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-19 +date: 2023-02-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 17a76ef917a3e..f956481be6799 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 bfad9bd84def5..d4ea13c09b843 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 503784aa2c18b..d21e5a8fdbfbe 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 0f06bd1cd4c20..de4d748698836 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-19 +date: 2023-02-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 c5505f962158c..948c593757bfb 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 93339a166e743..d41844afd3667 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 8b59976d8956b..a82f0f9fb2423 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 7b7b0a129c3f6..47311134bd641 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 683f47dfbf270..4cebaebc37152 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-19 +date: 2023-02-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 dc0fb98dd4db3..11861857533ec 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 158ea5b17a6f7..6671aa66b6244 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 25ecc62fc7b31..0848747995860 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-19 +date: 2023-02-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 35288a0f35013..f1a3588ab5619 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-19 +date: 2023-02-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 24dcef7c32df9..49bc1e0fc5956 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 b2aac44df3df2..83470e1ce70bd 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 9192b4ea5bb4e..e7fe23a1f923d 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-19 +date: 2023-02-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 86607dac31bed..6050c6460c640 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 190539f30ce8d..ba0462eb73dd5 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-19 +date: 2023-02-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 cbd4f5a470995..1cc849bbacc6d 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 2edfcd756812d..5733e4c1b131f 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 fa25ee55d23cb..468e3ee8565da 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-19 +date: 2023-02-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 87a8aa3487a0a..881296bbabfa0 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 64ad0407d8d28..187fbc64a729f 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-19 +date: 2023-02-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 5f151e05a016b..8bbdf13209a8f 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-19 +date: 2023-02-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 3d4bc5ca384b0..37d4699472358 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 b9a9de2f09d20..34c5f35f98a46 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 fe09b036e7d3a..1f2b2f9a594ec 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 717078bbf267b..b2ba7568155f3 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 f65ffe0a95d95..8f8561a7aba19 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-19 +date: 2023-02-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 e2f5e6f2d69ed..fb8fb86f0b642 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 56b0bba440589..439a62eb454a8 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 2e352974b2fe4..254d6e4076e3a 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-19 +date: 2023-02-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 ba0373c4ab616..5bddf2b09444a 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 d0c19912c8ead..b66acca16e868 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-19 +date: 2023-02-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 ebd743b463bbd..a5e8f868ac9c9 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 22b37584c7ecc..27089b3d906c0 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 f2af53f2a4e97..e8cf6e6aae8bf 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 2eaabd185ec34..697a11b2eddbd 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 6746c157262b6..54f1ca99a5ad2 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 bad0eeafad065..c2014b28f71ee 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-19 +date: 2023-02-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 75a84858826fa..7c80bb07cb26c 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 ee4dfa34fd144..fad5102dbb5de 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-19 +date: 2023-02-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 5d915ab795e30..7dbd79ffb7ff8 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 51f9a3470cdf1..2db94746fdada 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 8b4aba222486a..206c465c9e888 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-19 +date: 2023-02-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 5d38f55bdc939..9c3ca307d4cd9 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-19 +date: 2023-02-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 1640a6cf5982d..c4716ff3b5e99 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 9fe764a021559..21ea3efb9569a 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 3bcd7cbfb839c..c8fefef62dc69 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 f9e80509d5e9d..b882b6e8b8d09 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 125928f8d4eba..d5409904bcc24 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-19 +date: 2023-02-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 ca4dd031c8700..41328cc8fbd85 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 ab00cd98dd223..7836063fa6cec 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 017aa1e9d9175..2337624574bc0 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-19 +date: 2023-02-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 5446108064e16..22a38393679d6 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-19 +date: 2023-02-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 a460f4b35ede6..a2007c5386244 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 707d7e6b2b912..c60b5c9c38a16 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 5835c31ee9faf..1ccd35eb88e8c 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-19 +date: 2023-02-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 56ec17d6b0795..2cdd40c239d7b 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 7e8ff40d02d88..f380380f53402 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 7416264ed9f93..2c00bd8dca498 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-19 +date: 2023-02-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 fed9b4b697090..28113ba2fe8ad 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 743aeacb7b59c..1fdbdce8c4a23 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 ffc7e12067906..e248aa8631ed6 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-19 +date: 2023-02-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 595b80c699ec8..9236ee535e234 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 5f296d71fd81a..ba32494cdb58f 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-19 +date: 2023-02-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 28f1e7583013e..506717032999a 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 407837a6b2b30..3cc348974e927 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-19 +date: 2023-02-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 e0c5aca9c701b..fa8262c2d3542 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 7a1bf76483dac..2069bb04969c7 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 85d044a5001cf..4243dc0cacebd 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 6641849897b35..70f8cf8840a44 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 f8bd582f7407c..e9839c3450547 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 d0510e0f58650..fc1934655900f 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-19 +date: 2023-02-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 1ac5e45549cc7..cd839fc3de5ef 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-19 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index cc0595b85983d..783344c8123bc 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 c9fa1e3bcdf3c..6dbad2dc6fd45 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 028ed08c58073..d4a63a654ffce 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 cb0fda80973e0..9b7180a6446b9 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 eeee60ad619c1..f863ae6c716aa 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-19 +date: 2023-02-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 b4b6aa20034f2..50e26a8049b8d 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 9b8715bbf634a..b28cbcc1b8df8 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 71fac5badb775..5f5d9c3d1521b 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-19 +date: 2023-02-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 62f750d1327b3..36929b9fb2dbe 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 220187ce2d849..90371d4dae687 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 07bff40b9cc1c..c806ca6d8d6b5 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 2d71257c7c133..c57db751a98be 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 8829857426941..32334fdaf08cc 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-19 +date: 2023-02-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 0577ceeccb828..5413f47fd6c2d 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 db125f8d2b531..4c73e2b6ed011 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 44e51ea7201fc..51df7a6ea6fd2 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-19 +date: 2023-02-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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index d7fd51d803509..be111450ce9a5 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-19 +date: 2023-02-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 8f5506194dc32..ac48c40ffd285 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-19 +date: 2023-02-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 22d00f8e40494..b9d3a17c1442a 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-19 +date: 2023-02-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 7ab6ef0b24eae..71104c5e2d289 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 7eaf66a6c8b70..263625bc6cfd0 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 1ef4dd8cf3aa5..90817a5473fc9 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-19 +date: 2023-02-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 214fdd267d2cc..e6009d0995990 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-19 +date: 2023-02-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 7f94b63294098..e43fd87bc9857 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-19 +date: 2023-02-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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index c11d9c1099e32..5c8fc8c91633a 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-19 +date: 2023-02-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 8e03151e3db74..9ee03c0b713a0 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-19 +date: 2023-02-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 229c1986f4ac2..c4fd5f82dd5fb 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-19 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 9b81a93385818..8d000ef75965c 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 7c2d0da34a35a..fe3f00483029d 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 6b4257d452905..f69ddbe2db500 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-19 +date: 2023-02-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 e9fb94b2439bf..743fc5026fd7c 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-19 +date: 2023-02-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 89b6b26b0d9cf..7a89d13887060 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-19 +date: 2023-02-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 94eab93bb899a..2685042c99ca3 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-19 +date: 2023-02-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 0795ad0a71df0..0b6d0ef4a8fd0 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-19 +date: 2023-02-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 feead06175d05..7a5541618570b 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 c743313ea3ddf..ed632bac6923d 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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 50ddc5213b4fd..cec5693f18e8c 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-19 +date: 2023-02-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 8d362dcb239c5..0f7563155a215 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-19 +date: 2023-02-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 39aec5aadc825..a9f2c6ec8ccd1 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-19 +date: 2023-02-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_crypto.mdx b/api_docs/kbn_crypto.mdx index f1d10875c798e..17c1f8bddcd13 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-19 +date: 2023-02-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 d66917a41a2a2..b87b7f5a394ff 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 8114637b96203..21fc0de49ac44 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 744f833724b65..016d420304c3c 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 84d707d6dfb0c..e8d91700308ab 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-19 +date: 2023-02-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 2b69471c2a77f..ed922c8ff936b 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-19 +date: 2023-02-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 2da6528c5b562..1ade2ba9083af 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-19 +date: 2023-02-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 0a737498a227e..e24854d638e66 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 81c44845b363f..1d4b2205eb970 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-19 +date: 2023-02-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 27547cfbcb80b..83d780b1c79a7 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 7248b0e2978a4..6f49285595010 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index fc0295dc79ced..233b7dfe75200 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 15bd3afa61593..38e09e65f8481 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-19 +date: 2023-02-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_es.mdx b/api_docs/kbn_es.mdx index 2657cc8bc0fe0..b330e06b57d90 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-19 +date: 2023-02-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 f9b2141838398..599019cc009fe 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-19 +date: 2023-02-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 240f13d5efff6..fd0f157c395f0 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-19 +date: 2023-02-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 e3c43b292289d..95ceda0aae49f 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-19 +date: 2023-02-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 7860ea135ae04..26cec9c4ab5d2 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-19 +date: 2023-02-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 00fc6f85d0748..53fcc95d2dff5 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-19 +date: 2023-02-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_field_types.mdx b/api_docs/kbn_field_types.mdx index e6e4d31b69573..226a8dacd1d5e 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index a4c8492a4a732..f27d225848341 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-19 +date: 2023-02-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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 5d6c635a9b5dc..7dd9c9efcbb07 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-19 +date: 2023-02-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_generate.mdx b/api_docs/kbn_generate.mdx index aa64b28320c4a..3f992668fc267 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index faa1cf4740436..d054c64b034df 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-19 +date: 2023-02-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 827d06e7419e8..a63a0044ee9ef 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-19 +date: 2023-02-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 907b4bd8dc8cd..363afd715ec82 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-19 +date: 2023-02-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 1fc6c0b341c58..5ce3a5a53cb4f 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-19 +date: 2023-02-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 d1ac81bf0c146..efb81282a2eb8 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-19 +date: 2023-02-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 49630322f972d..7bcfea3f992ba 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-19 +date: 2023-02-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 8dc8c6b551923..f7f0d79b51896 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-19 +date: 2023-02-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 b44d88b3ea66d..6cad7a308521e 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-19 +date: 2023-02-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 85a84b94e6306..ee11d3b98e916 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index af746cb652444..71acbdfceccde 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-19 +date: 2023-02-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 3645d4383fb9a..0732beddbe3d5 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-19 +date: 2023-02-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_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index eed5437f2c4de..1bdc744fda561 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-19 +date: 2023-02-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 3100efd2e20fc..04d6a5f8aea23 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-19 +date: 2023-02-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 d943b90a87cc7..a32ec42a31a58 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-19 +date: 2023-02-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 2f658d1aa2d55..ea5124de46380 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-19 +date: 2023-02-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 a3e7000070a6b..525debe3e59ba 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-19 +date: 2023-02-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_logging.mdx b/api_docs/kbn_logging.mdx index 7a90847e6cac2..58f742823501a 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-19 +date: 2023-02-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 389158926a584..ba54bee88a96c 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 847f2ec23a967..55a53849b7308 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-19 +date: 2023-02-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_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 0192f7685796c..ba4c25cde7863 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 4c83dfb6f7aed..d2d69b0da539f 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-19 +date: 2023-02-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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 294aed797f4dd..a430bf20343ef 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-19 +date: 2023-02-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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 4615c0eb2a407..70338f98822a5 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-19 +date: 2023-02-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 d7a30c54c727c..5105e44223eb5 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-19 +date: 2023-02-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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 89e164fd43985..a89a4551ddce1 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-19 +date: 2023-02-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 1d595e05c66ec..e1746a6af92c5 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-19 +date: 2023-02-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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 19031632449c9..ff82185705640 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-19 +date: 2023-02-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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 449565335169f..813472f4b7e1a 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-19 +date: 2023-02-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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index ce2430112d496..c08356c6aed9e 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-19 +date: 2023-02-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_monaco.mdx b/api_docs/kbn_monaco.mdx index a957768361916..cf5582c8a82b5 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index f78a59abe356c..7a6ab5045eeb3 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-19 +date: 2023-02-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 6ef0c19555748..e64a36bcb6aed 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-19 +date: 2023-02-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 5775aaabf0944..420e450af5048 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-19 +date: 2023-02-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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index ba6a561249169..4b85392dadaf9 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-19 +date: 2023-02-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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 1e3a4272ce53c..67793b2036afe 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-19 +date: 2023-02-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 eeb6a0694839b..af30584b14b70 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 134c390a272fc..c27921942567b 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 83b1314148aa1..2b66983b04631 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-19 +date: 2023-02-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 95aeda00a5511..a2ef5fb848975 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-19 +date: 2023-02-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 d01a8fefd586a..72baaba52cb39 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-19 +date: 2023-02-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 a71cbdb9628c9..62200ce2a6b29 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-19 +date: 2023-02-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_rison.mdx b/api_docs/kbn_rison.mdx index 38d1d698825cb..0216b143ac1a9 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 16d6bb8e051ee..30ad77ec97405 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-19 +date: 2023-02-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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index ad7e4395bfa14..40af692a950d0 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index ea044ac52de2b..4d94d4095eb5e 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-19 +date: 2023-02-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 e3b544c0cfa4b..a2fd7b4e0bc3d 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-19 +date: 2023-02-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 8c32343562250..82368f6a96acc 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-19 +date: 2023-02-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_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 0f89abf1ef0bd..804da6b8b59f1 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-19 +date: 2023-02-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 87c26f18e3de8..2f35df6a1d133 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-19 +date: 2023-02-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 2d08ef56d0d14..67e90cc95d773 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-19 +date: 2023-02-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 f05ebc756cd65..a5d651b4b73e5 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-19 +date: 2023-02-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 56378d6f8b7ea..8c2fd8fe460fe 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-19 +date: 2023-02-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 daf6bb8e7dec3..dfb5e1df613fe 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-19 +date: 2023-02-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 91e1b5f3f4153..b0e2d13e37dc1 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-19 +date: 2023-02-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 f1e030e9ea672..34e05a010e1eb 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-19 +date: 2023-02-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 3bacb4478fa66..e029f7d05eb0c 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-19 +date: 2023-02-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 c4d8b17061742..59dca2e61fd41 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-19 +date: 2023-02-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 da5c3c0499679..b9e30ed72e87d 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-19 +date: 2023-02-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 f2b31aad7ad35..4379fd7e5c371 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-19 +date: 2023-02-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 816acddf6f254..e8d800c098ac7 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-19 +date: 2023-02-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 c34d109733c1c..ca2e84fe82070 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-19 +date: 2023-02-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_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 6904abc5cde06..3d0c72ac5dc58 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-19 +date: 2023-02-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 70edd97a4ccca..abce5645028cc 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-19 +date: 2023-02-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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 810308147695e..5433748a7b71b 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index ffd67a8bdbae2..a91862543c204 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-19 +date: 2023-02-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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index d3a9f2b6e7544..ffe2da716ebe4 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index c33a45f33d91a..b26cd11051781 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-19 +date: 2023-02-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 7197148183368..f898b1e0b3578 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-19 +date: 2023-02-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 7e7a34b2fdc03..ccd74e7cf5a37 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-19 +date: 2023-02-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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index d1fbf5166d26d..f2743044d191c 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-19 +date: 2023-02-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 09152c7c184e8..5a91d401f37ef 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-19 +date: 2023-02-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 4fcaad599f089..c3a77f79eb091 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-19 +date: 2023-02-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 ea8cbb288e5a1..c2c6c39d6955c 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-19 +date: 2023-02-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 bc4ff28614368..9a5a45fc60559 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-19 +date: 2023-02-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_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 98ec73c5f98bd..188f080a22918 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-19 +date: 2023-02-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 12ebb3219f375..7b0295303f1ae 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-19 +date: 2023-02-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 f7e6d2b3a8ddb..00c5e6218d5fd 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-19 +date: 2023-02-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 3fa3d3b167fc0..a9a14665cb611 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-19 +date: 2023-02-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 233b9183ccff7..58ae69c930830 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-19 +date: 2023-02-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 3ef6994ed5220..f18eba3b6f0d2 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-19 +date: 2023-02-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 a5dbd9ced0d5b..a49324cf8ceac 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-19 +date: 2023-02-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 5536ad5ff2cf3..4740dfb66c8d7 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-19 +date: 2023-02-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 13ac2ad86378f..6c66d0ca50fa9 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-19 +date: 2023-02-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 93926a39695a0..8ef50a3f4ebfe 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-19 +date: 2023-02-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 86f2649266e27..9d048a043ca0e 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-19 +date: 2023-02-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 03baafb3809f2..880fc2a69fbfd 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-19 +date: 2023-02-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 8de2a1a53f7a6..2fe3dd235c3aa 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-19 +date: 2023-02-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 950ad746e94ce..11baa2035383a 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-19 +date: 2023-02-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 638b0c6706010..f6344bb78377b 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-19 +date: 2023-02-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 3349a62f769c6..5a745b342ee54 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-19 +date: 2023-02-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 ba07010a0e38c..5e6f0b6822a38 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-19 +date: 2023-02-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 dd89359eab6e1..cb9c14bd9d02d 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-19 +date: 2023-02-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 f427bb44a6b5d..c70969fe98c4d 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-19 +date: 2023-02-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 fc5b18dbd85a1..4b0b162f5581e 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-19 +date: 2023-02-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 5215606ca8def..8f8ab282de35f 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-19 +date: 2023-02-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 dd3bd56d77895..ccebdf6448785 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-19 +date: 2023-02-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 8ee3ec12ff03a..5d0b1207865c9 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-19 +date: 2023-02-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 c9d5fdb8c1852..435b73883ddd5 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-19 +date: 2023-02-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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index e38407f2105d2..59ed50b9dd653 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-19 +date: 2023-02-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 45f8b69b4cac2..868fa725e6fe8 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 63c0b55ee7e0f..e27aed6e01387 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-19 +date: 2023-02-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_std.mdx b/api_docs/kbn_std.mdx index 24516c50330c2..76f8a35a5297a 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-19 +date: 2023-02-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 15920e95e9b3f..426333f87db2b 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-19 +date: 2023-02-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 8098f4c9f629a..2e62629ecfcea 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-19 +date: 2023-02-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 ff3e0308184f0..5921d55260350 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-19 +date: 2023-02-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 526b60a5e627b..a50dd34fee731 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 2e37ad8813619..234fa0505f8a5 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-19 +date: 2023-02-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 8a04f281e9fdd..1e757612e0bc8 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-19 +date: 2023-02-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_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 39eb470ce4e0a..e5710c6b20438 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 777c77f92c0bb..a8dc0bf221cd9 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-19 +date: 2023-02-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 63fdcd3c3e34d..672262ec1bbf6 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-19 +date: 2023-02-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 183833bfed798..6701da7ac1271 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-19 +date: 2023-02-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 63c2496453207..e2442efde5d40 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-19 +date: 2023-02-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 edb09aec7c8cd..fcdb05e485bf1 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index a5e2ff0522b9a..1209a4e7d95cb 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-19 +date: 2023-02-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 2df9cfd044235..cd795d56fae98 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-19 +date: 2023-02-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 fdb8508b72adf..54965902c245f 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-19 +date: 2023-02-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 af46a13115438..521a0ce780a38 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 860b2fd888752..a6fdd0dab15f2 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 7e96c1e43caf0..57a85165c0966 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-19 +date: 2023-02-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 642e2c6fd314b..448b48f068ea7 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-19 +date: 2023-02-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 3acaa8ce75de7..1b5db05b11475 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-19 +date: 2023-02-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 221801e8bdea9..1942ccdb117a9 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-19 +date: 2023-02-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 faa018419c2cb..c09f062ed8156 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-19 +date: 2023-02-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 589af13adfafd..5d81f88672dac 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-19 +date: 2023-02-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 0eb43ea872369..40e68e76b0622 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-19 +date: 2023-02-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 da6533dc5f579..237cd7f685687 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index f48e92a22dc20..8628ea7da9c3c 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 39fe1f94fb72b..56fb05b98a355 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-19 +date: 2023-02-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 0d5b56ea0d2ba..ec16183e6ffcd 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-19 +date: 2023-02-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 a621d49fe2620..e4bb2ce719c9b 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 84d30cc16c1fe..37803bba12b4b 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index bb8a4fbd13d28..fcbd35d894f05 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-19 +date: 2023-02-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 99ae818d79776..e7de2e1022c2c 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-19 +date: 2023-02-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 ab0a17afc7e6b..51532d9b55306 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-19 +date: 2023-02-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 0331e2fa9941e..8e1508e041a0b 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 4242150a6d431..1d4520887d226 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-19 +date: 2023-02-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 a2bb45677a53b..6a6bb5fd855c3 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index d900524e5c490..e7d333db5a41d 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 33c62b702a52d..cfadf8f4aed06 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 3dd26e3a8b378..b7f4d8e01ee74 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-19 +date: 2023-02-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 9a94b061a4ef1..a723cb7c9f0f8 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 115f27d4f3341..0c8a768fb2076 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-19 +date: 2023-02-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 08f92719703ff..7a6482f49f79a 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-19 +date: 2023-02-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 c5611e62f6461..2318817871ec7 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-19 +date: 2023-02-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 212ea8f688a4f..dd24ee33abea2 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-02-19 +date: 2023-02-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 79a6e53433a1b..3f393b8162f13 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-02-19 +date: 2023-02-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 d52ecde01b8ec..69d2a95675288 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-02-19 +date: 2023-02-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 3119ac6166ab1..a50830e5d6427 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-02-19 +date: 2023-02-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 2ac8db3dd6679..3e6fdb23513c8 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-02-19 +date: 2023-02-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 9078c8d16337f..c5c98aa5fd26e 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-02-19 +date: 2023-02-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 aaf416f3f1fbc..c3dfdf396c4dd 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-02-19 +date: 2023-02-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 fd3c148ebd723..a071dfa95de2a 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-02-19 +date: 2023-02-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 748aec43bdd71..b9d468ad1e489 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-02-19 +date: 2023-02-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 0cd6bf0ebecad..524d3224bd97c 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 462d538bdf189..464007edd638c 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-19 +date: 2023-02-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 79cd10d49de5b..7da4fe95a9723 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index cd77ce5fbf76a..79c633e929cbe 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-19 +date: 2023-02-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 78655b49930b1..d65b70b25bee2 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index f524870ae1b2a..2065e157190ed 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-19 +date: 2023-02-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 59b6e787b9a40..3e6c947d7c190 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-19 +date: 2023-02-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 d7a18bfbdb1d0..2f77771cabddf 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-19 +date: 2023-02-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 5a1a5938cbd35..65d4034f1c4c7 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-19 +date: 2023-02-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 52ccbd1c2cc23..2b33c780b1dc8 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-19 +date: 2023-02-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 bb461e99989ff..4f1012c941b03 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-19 +date: 2023-02-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 99a6bd3b1c1e6..95f467111ce28 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-19 +date: 2023-02-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 1893ec24f1e8c..683cf622bea2e 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-19 +date: 2023-02-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 4aeeb9d3e213c..c833009c2b659 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 77a5e450d2409..6f55313cd5594 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-19 +date: 2023-02-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 ec153c1fd8014..e46738830f917 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-19 +date: 2023-02-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 27c0684cec4f5..9ef7ff44da039 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-19 +date: 2023-02-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 ea8c6a1930e3f..71aad35bb2d2d 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-19 +date: 2023-02-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 87449b8ef7ed8..4b0d58ddbbaba 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-19 +date: 2023-02-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 92b2bc70898fe..5efedf944a46b 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index b5de963ad5b42..411406ee78739 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 9edc62b69eeb1..ad91b5ff5c8eb 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-19 +date: 2023-02-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 19fc5cd7f6ae5..d59df28cf25fd 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-19 +date: 2023-02-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 b9c1936a806f8..bc7d7b7f6caec 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index bd5721720b472..51809fb7f2ba8 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-19 +date: 2023-02-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 53cfad5b1644d..de86a5db1a5b5 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-19 +date: 2023-02-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 9678c13bee070..24ee835704a01 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-19 +date: 2023-02-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 abd6d0f796d00..a0e7e6b0bf29e 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-19 +date: 2023-02-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 0610cc98618df..32ab661386964 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-19 +date: 2023-02-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 edd51980b0a6d..b3a96b9133305 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-19 +date: 2023-02-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 a0333b3edae1c..3370f0f1880a2 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-19 +date: 2023-02-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 6599cb3a01067..af0471e1a18be 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-19 +date: 2023-02-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 3cbb30fe39a08..c9bce3f960b76 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-19 +date: 2023-02-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 89e1c053dd7a3..3ce2e96e27a66 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-19 +date: 2023-02-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 23b69ffb64399..4f6cced591c3a 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-19 +date: 2023-02-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 72f25c1e002b8..44ed4f77a5bf0 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-19 +date: 2023-02-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 94ca890c2120e..d4b132c817135 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-19 +date: 2023-02-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 447f2df69dc3a..a1f81f986bf99 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-19 +date: 2023-02-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 6be491a12bf634f853a642db0527d4f277004284 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Mon, 20 Feb 2023 09:05:58 +0100 Subject: [PATCH 116/210] Replace remark-parse dependency with remark-parse-no-trim (#151431) --- package.json | 4 ++-- x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts | 2 +- .../server/routes/live_query/create_live_query_route.ts | 2 +- .../public/detection_engine/rule_response_actions/utils.tsx | 2 +- yarn.lock | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 3cce5bf6c7b47..29b9ab242452e 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "**/globule/minimatch": "^3.1.2", "**/hoist-non-react-statics": "^3.3.2", "**/isomorphic-fetch/node-fetch": "^2.6.7", - "**/trim": "1.0.1", + "**/remark-parse/trim": "1.0.1", "**/typescript": "4.6.3", "globby/fast-glob": "^3.2.11" }, @@ -885,7 +885,7 @@ "redux-thunk": "^2.4.1", "redux-thunks": "^1.0.0", "remark-gfm": "1.0.0", - "remark-parse": "^8.0.3", + "remark-parse-no-trim": "^8.0.4", "remark-stringify": "^8.0.3", "require-in-the-middle": "^6.0.0", "reselect": "^4.1.6", diff --git a/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts b/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts index 0d25bbd3a2765..0790c7fef7947 100644 --- a/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts +++ b/x-pack/plugins/cases/common/utils/markdown_plugins/utils.ts @@ -7,7 +7,7 @@ import { filter } from 'lodash'; import type { Node } from 'unist'; -import markdown from 'remark-parse'; +import markdown from 'remark-parse-no-trim'; import remarkStringify from 'remark-stringify'; import unified from 'unified'; diff --git a/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts b/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts index 91f3594c5b72a..92ebddf7642e7 100644 --- a/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts +++ b/x-pack/plugins/osquery/server/routes/live_query/create_live_query_route.ts @@ -7,7 +7,7 @@ import type { IRouter } from '@kbn/core/server'; import unified from 'unified'; -import markdown from 'remark-parse'; +import markdown from 'remark-parse-no-trim'; import { some, filter } from 'lodash'; import deepEqual from 'fast-deep-equal'; import type { ECSMappingOrUndefined } from '@kbn/osquery-io-ts-types'; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/utils.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/utils.tsx index 21beb2bf43a42..b19230668d416 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/utils.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_response_actions/utils.tsx @@ -6,7 +6,7 @@ */ import unified from 'unified'; -import markdown from 'remark-parse'; +import markdown from 'remark-parse-no-trim'; import { filter, reduce } from 'lodash'; import type { ECSMapping } from '@kbn/osquery-io-ts-types'; diff --git a/yarn.lock b/yarn.lock index f166a66a39668..b1924d5eff093 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24836,7 +24836,7 @@ remark-parse-no-trim@^8.0.4: vfile-location "^3.0.0" xtend "^4.0.1" -remark-parse@8.0.3, remark-parse@^8.0.3: +remark-parse@8.0.3: version "8.0.3" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== From ffb555d00ba85abb37883c26990a8e7ab3a21e7e Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Mon, 20 Feb 2023 09:34:40 +0100 Subject: [PATCH 117/210] [Lens] Fix localization smokescreen error tests (#151490) ## Summary Fixes #151484 and #151483 Set the window size to avoid tooltip occlusion. Flaky runner results: (100 fr-FR, 25 for ja-JP, 25 for zh-CN): https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/1925 ### 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 - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- x-pack/test/localization/tests/lens/smokescreen.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/test/localization/tests/lens/smokescreen.ts b/x-pack/test/localization/tests/lens/smokescreen.ts index 3414cc89bba65..fc8aba2131504 100644 --- a/x-pack/test/localization/tests/lens/smokescreen.ts +++ b/x-pack/test/localization/tests/lens/smokescreen.ts @@ -19,6 +19,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const retry = getService('retry'); const config = getService('config'); + const browser = getService('browser'); function getTranslationFr(term: string) { switch (term) { @@ -155,6 +156,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const serverArgs: string[] = config.get('kbnTestServer.serverArgs'); const kbnServerLocale = getI18nLocaleFromServerArgs(serverArgs); termTranslator = getExpectedI18nTranslator(kbnServerLocale); + await browser.setWindowSize(1600, 1000); }); it('should allow creation of lens xy chart', async () => { From eba0dc6eb55656a779b90434490109c1c20794b4 Mon Sep 17 00:00:00 2001 From: Kfir Peled <61654899+kfirpeled@users.noreply.github.com> Date: Mon, 20 Feb 2023 11:06:09 +0200 Subject: [PATCH 118/210] [Cloud Security] Plugin Initialize - Updating `logs-cloud_security_posture.findings_latest-default` index mappings (#151460) --- .../server/create_indices/create_indices.ts | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts index 5702cc79eba8a..93ea23a4e5b1e 100644 --- a/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts +++ b/x-pack/plugins/cloud_security_posture/server/create_indices/create_indices.ts @@ -6,6 +6,7 @@ */ import type { ElasticsearchClient, Logger } from '@kbn/core/server'; import { errors } from '@elastic/elasticsearch'; +import type { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types'; import { BENCHMARK_SCORE_INDEX_DEFAULT_NS, BENCHMARK_SCORE_INDEX_PATTERN, @@ -107,7 +108,21 @@ const createLatestFindingsIndex = async (esClient: ElasticsearchClient, logger: composed_of, }); - await createIndexSafe(esClient, logger, LATEST_FINDINGS_INDEX_DEFAULT_NS); + const result = await createIndexSafe(esClient, logger, LATEST_FINDINGS_INDEX_DEFAULT_NS); + + if (result === 'already-exists') { + // Make sure mappings are up-to-date + const simulateResponse = await esClient.indices.simulateTemplate({ + name: LATEST_FINDINGS_INDEX_TEMPLATE_NAME, + }); + + await updateIndexSafe( + esClient, + logger, + LATEST_FINDINGS_INDEX_DEFAULT_NS, + simulateResponse.template.mappings + ); + } } catch (e) { logger.error( `Failed to upsert index template [Template: ${LATEST_FINDINGS_INDEX_TEMPLATE_NAME}]` @@ -155,11 +170,32 @@ const createIndexSafe = async (esClient: ElasticsearchClient, logger: Logger, in }); logger.info(`Created index successfully [Name: ${index}]`); + return 'success'; } else { logger.trace(`Index already exists [Name: ${index}]`); + return 'already-exists'; } } catch (e) { logger.error(`Failed to create index [Name: ${index}]`); logger.error(e); + return 'fail'; + } +}; + +const updateIndexSafe = async ( + esClient: ElasticsearchClient, + logger: Logger, + index: string, + mappings: MappingTypeMapping +) => { + try { + await esClient.indices.putMapping({ + index, + properties: mappings.properties, + }); + logger.info(`Updated index successfully [Name: ${index}]`); + } catch (e) { + logger.error(`Failed to update index [Name: ${index}]`); + logger.error(e); } }; From f6bb0f4fccab76791ef292ebd90df581c3fbdac6 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Mon, 20 Feb 2023 09:41:14 +0000 Subject: [PATCH 119/210] [ML] Fixing ML saved object cache (#151122) PR https://github.com/elastic/kibana/pull/146155 introduced a cache of the ML saved objects to the `mlSavedObjectService` to improve performance. This can cause a problem for the module `setup` function when called more than once from an external plugin in a single request. A single instance of the `mlSavedObjectService` is used per request and so for each `setup` call the same cache is used. Any saved objects created, updated or removed in the first `setup` call are missing from the cache in subsequent calls. This means any jobs being created in the second call to `setup` cannot be opened as do not exist in the cache. This PR clears the cache after every write action to the saved object client causing it to be repopulated the next time it is read. --- .../ml/server/saved_objects/service.ts | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/ml/server/saved_objects/service.ts b/x-pack/plugins/ml/server/saved_objects/service.ts index 1c31b6d0d088d..d05972a1368ee 100644 --- a/x-pack/plugins/ml/server/saved_objects/service.ts +++ b/x-pack/plugins/ml/server/saved_objects/service.ts @@ -63,6 +63,12 @@ export function mlSavedObjectServiceFactory( (options: SavedObjectsFindOptions) => JSON.stringify(options) ); + function _clearSavedObjectsClientCache() { + if (_savedObjectsClientFindMemo.cache.clear) { + _savedObjectsClientFindMemo.cache.clear(); + } + } + async function _getJobObjects( jobType?: JobType, jobId?: string, @@ -118,6 +124,7 @@ export function mlSavedObjectServiceFactory( } else { // the saved object has no spaces, this is unexpected, attempt a normal delete await savedObjectsClient.delete(ML_JOB_SAVED_OBJECT_TYPE, id, { force: true }); + _clearSavedObjectsClientCache(); } } } catch (error) { @@ -128,11 +135,12 @@ export function mlSavedObjectServiceFactory( await savedObjectsClient.create(ML_JOB_SAVED_OBJECT_TYPE, job, { id, }); + _clearSavedObjectsClientCache(); } async function _bulkCreateJobs(jobs: Array<{ job: JobObject; namespaces: string[] }>) { await isMlReady(); - return await savedObjectsClient.bulkCreate( + const results = await savedObjectsClient.bulkCreate( jobs.map((j) => ({ type: ML_JOB_SAVED_OBJECT_TYPE, id: _jobSavedObjectId(j.job), @@ -140,6 +148,8 @@ export function mlSavedObjectServiceFactory( initialNamespaces: j.namespaces, })) ); + _clearSavedObjectsClientCache(); + return results; } function _jobSavedObjectId(job: JobObject) { @@ -154,6 +164,7 @@ export function mlSavedObjectServiceFactory( } await savedObjectsClient.delete(ML_JOB_SAVED_OBJECT_TYPE, job.id, { force: true }); + _clearSavedObjectsClientCache(); } async function _forceDeleteJob(jobType: JobType, jobId: string, namespace: string) { @@ -169,6 +180,7 @@ export function mlSavedObjectServiceFactory( namespace: namespace === '*' ? undefined : namespace, force: true, }); + _clearSavedObjectsClientCache(); } async function createAnomalyDetectionJob(jobId: string, datafeedId?: string) { @@ -250,6 +262,7 @@ export function mlSavedObjectServiceFactory( const jobObject = job.attributes; jobObject.datafeed_id = datafeedId; await savedObjectsClient.update(ML_JOB_SAVED_OBJECT_TYPE, job.id, jobObject); + _clearSavedObjectsClientCache(); } async function deleteDatafeed(datafeedId: string) { @@ -262,6 +275,7 @@ export function mlSavedObjectServiceFactory( const jobObject = job.attributes; jobObject.datafeed_id = null; await savedObjectsClient.update(ML_JOB_SAVED_OBJECT_TYPE, job.id, jobObject); + _clearSavedObjectsClientCache(); } async function _getIds(jobType: JobType, idType: keyof JobObject) { @@ -372,6 +386,8 @@ export function mlSavedObjectServiceFactory( spacesToAdd, spacesToRemove ); + _clearSavedObjectsClientCache(); + updateResult.objects.forEach(({ id: objectId, error }) => { const jobId = jobObjectIdMap.get(objectId)!; if (error) { @@ -492,6 +508,7 @@ export function mlSavedObjectServiceFactory( await savedObjectsClient.delete(ML_TRAINED_MODEL_SAVED_OBJECT_TYPE, modelId, { force: true, }); + _clearSavedObjectsClientCache(); } } } catch (error) { @@ -518,6 +535,7 @@ export function mlSavedObjectServiceFactory( ...(initialNamespaces ? { initialNamespaces } : {}), } ); + _clearSavedObjectsClientCache(); } async function _bulkCreateTrainedModel(models: TrainedModelObject[], namespaceFallback?: string) { @@ -528,7 +546,7 @@ export function mlSavedObjectServiceFactory( return acc; }, {} as Record); - return await savedObjectsClient.bulkCreate( + const results = await savedObjectsClient.bulkCreate( models.map((m) => { let initialNamespaces = m.job && namespacesPerJob[m.job.job_id]; if (!initialNamespaces?.length && namespaceFallback) { @@ -546,6 +564,8 @@ export function mlSavedObjectServiceFactory( }; }) ); + _clearSavedObjectsClientCache(); + return results; } async function getAllTrainedModelObjectsForAllSpaces(modelIds?: string[]) { @@ -577,6 +597,7 @@ export function mlSavedObjectServiceFactory( } await savedObjectsClient.delete(ML_TRAINED_MODEL_SAVED_OBJECT_TYPE, model.id, { force: true }); + _clearSavedObjectsClientCache(); } async function _forceDeleteTrainedModel(modelId: string, namespace: string) { @@ -586,6 +607,7 @@ export function mlSavedObjectServiceFactory( namespace: namespace === '*' ? undefined : namespace, force: true, }); + _clearSavedObjectsClientCache(); } async function filterTrainedModelsForSpace(list: T[], field: keyof T): Promise { @@ -729,6 +751,8 @@ export function mlSavedObjectServiceFactory( spacesToAdd, spacesToRemove ); + _clearSavedObjectsClientCache(); + updateResult.objects.forEach(({ id: objectId, error }) => { const model = trainedModelObjectIdMap.get(objectId)!; if (error) { From 82c0d6c234a4a9625eb5e43d02e5b32a14aa4b5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Mon, 20 Feb 2023 11:34:27 +0100 Subject: [PATCH 120/210] [APM] Move react component from /shared folder if only consumed once (#151288) Many components in `/shared` are not well suited for re-use and only consumed by a single component. In those cases it's better to move them back to where they are consumed to keep things co-located. --- .../dependencies_inventory_table/index.tsx | 2 +- .../app/dependencies_inventory/index.tsx | 2 +- .../detail_view_header/index.tsx | 0 .../index.tsx | 2 +- .../app/service_inventory/index.tsx | 2 +- .../components/app/service_map/index.tsx | 2 +- .../index.tsx | 2 +- .../components/app/storage_explorer/index.tsx | 2 +- .../app/top_traces_overview/index.tsx | 2 +- .../span_flyout/sticky_span_properties.tsx | 2 +- .../alerting_popover_flyout.tsx | 6 ++-- .../anomaly_detection_setup_link.test.tsx | 12 +++---- .../anomaly_detection_setup_link.tsx | 14 ++++---- .../apm_header_action_menu/index.tsx | 8 ++--- .../inspector_header_link.tsx | 2 +- .../apm_header_action_menu/labs/index.tsx | 0 .../labs/labs_flyout.tsx | 6 ++-- .../{app_root.tsx => app_root/index.tsx} | 34 +++++++++---------- ...dependencies_to_dependencies_inventory.tsx | 0 .../index.tsx | 6 ++-- .../index.test.tsx | 6 ++-- .../index.tsx | 2 +- .../redirect_with_offset/index.test.tsx | 6 ++-- .../app_root}/redirect_with_offset/index.tsx | 14 ++++---- .../scroll_to_top_on_path_change.tsx | 0 .../templates/apm_service_template/index.tsx | 2 +- .../templates/dependency_detail_template.tsx | 2 +- .../{ => links}/dependency_link.stories.tsx | 2 +- .../{ => links}/dependency_link.test.tsx | 0 .../shared/{ => links}/dependency_link.tsx | 8 ++--- .../{ => search_bar}/search_bar.test.tsx | 18 +++++----- .../shared/{ => search_bar}/search_bar.tsx | 14 ++++---- 32 files changed, 90 insertions(+), 90 deletions(-) rename x-pack/plugins/apm/public/components/{shared => app/dependency_operation_detail_view}/detail_view_header/index.tsx (100%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/alerting_popover_flyout.tsx (95%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/anomaly_detection_setup_link.test.tsx (91%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/anomaly_detection_setup_link.tsx (86%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/index.tsx (90%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/inspector_header_link.tsx (92%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/labs/index.tsx (100%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/apm_header_action_menu/labs/labs_flyout.tsx (94%) rename x-pack/plugins/apm/public/components/routing/{app_root.tsx => app_root/index.tsx} (75%) rename x-pack/plugins/apm/public/components/routing/{home => app_root}/redirect_dependencies_to_dependencies_inventory.tsx (100%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/redirect_with_default_date_range/index.tsx (83%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/redirect_with_default_environment/index.test.tsx (92%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/redirect_with_default_environment/index.tsx (92%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/redirect_with_offset/index.test.tsx (94%) rename x-pack/plugins/apm/public/components/{shared => routing/app_root}/redirect_with_offset/index.tsx (77%) rename x-pack/plugins/apm/public/components/{app/main => routing/app_root}/scroll_to_top_on_path_change.tsx (100%) rename x-pack/plugins/apm/public/components/shared/{ => links}/dependency_link.stories.tsx (91%) rename x-pack/plugins/apm/public/components/shared/{ => links}/dependency_link.test.tsx (100%) rename x-pack/plugins/apm/public/components/shared/{ => links}/dependency_link.tsx (86%) rename x-pack/plugins/apm/public/components/shared/{ => search_bar}/search_bar.test.tsx (84%) rename x-pack/plugins/apm/public/components/shared/{ => search_bar}/search_bar.tsx (85%) diff --git a/x-pack/plugins/apm/public/components/app/dependencies_inventory/dependencies_inventory_table/index.tsx b/x-pack/plugins/apm/public/components/app/dependencies_inventory/dependencies_inventory_table/index.tsx index 20d92bc5025d6..c04fb9211d91b 100644 --- a/x-pack/plugins/apm/public/components/app/dependencies_inventory/dependencies_inventory_table/index.tsx +++ b/x-pack/plugins/apm/public/components/app/dependencies_inventory/dependencies_inventory_table/index.tsx @@ -14,7 +14,7 @@ import { getNodeName, NodeType } from '../../../../../common/connections'; import { useApmParams } from '../../../../hooks/use_apm_params'; import { useFetcher } from '../../../../hooks/use_fetcher'; import { useTimeRange } from '../../../../hooks/use_time_range'; -import { DependencyLink } from '../../../shared/dependency_link'; +import { DependencyLink } from '../../../shared/links/dependency_link'; import { DependenciesTable } from '../../../shared/dependencies_table'; export function DependenciesInventoryTable() { diff --git a/x-pack/plugins/apm/public/components/app/dependencies_inventory/index.tsx b/x-pack/plugins/apm/public/components/app/dependencies_inventory/index.tsx index 0e999f7e9aa46..b4ae13619abb0 100644 --- a/x-pack/plugins/apm/public/components/app/dependencies_inventory/index.tsx +++ b/x-pack/plugins/apm/public/components/app/dependencies_inventory/index.tsx @@ -12,7 +12,7 @@ import { kueryBarPlaceholder, } from '../../../../common/dependencies'; import { useApmParams } from '../../../hooks/use_apm_params'; -import { SearchBar } from '../../shared/search_bar'; +import { SearchBar } from '../../shared/search_bar/search_bar'; import { DependenciesInventoryTable } from './dependencies_inventory_table'; export function DependenciesInventory() { diff --git a/x-pack/plugins/apm/public/components/shared/detail_view_header/index.tsx b/x-pack/plugins/apm/public/components/app/dependency_operation_detail_view/detail_view_header/index.tsx similarity index 100% rename from x-pack/plugins/apm/public/components/shared/detail_view_header/index.tsx rename to x-pack/plugins/apm/public/components/app/dependency_operation_detail_view/detail_view_header/index.tsx diff --git a/x-pack/plugins/apm/public/components/app/dependency_operation_detail_view/index.tsx b/x-pack/plugins/apm/public/components/app/dependency_operation_detail_view/index.tsx index 1a43cbda91773..9aeff02dff4f3 100644 --- a/x-pack/plugins/apm/public/components/app/dependency_operation_detail_view/index.tsx +++ b/x-pack/plugins/apm/public/components/app/dependency_operation_detail_view/index.tsx @@ -17,7 +17,7 @@ import { useDependencyDetailOperationsBreadcrumb } from '../../../hooks/use_depe import { FETCH_STATUS, useFetcher } from '../../../hooks/use_fetcher'; import { useTimeRange } from '../../../hooks/use_time_range'; import { DependencyMetricCharts } from '../../shared/dependency_metric_charts'; -import { DetailViewHeader } from '../../shared/detail_view_header'; +import { DetailViewHeader } from './detail_view_header'; import { ResettingHeightRetainer } from '../../shared/height_retainer/resetting_height_container'; import { push, replace } from '../../shared/links/url_helpers'; import { SortFunction } from '../../shared/managed_table'; diff --git a/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx b/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx index 9c4db624edb73..197a24051b2b2 100644 --- a/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_inventory/index.tsx @@ -26,7 +26,7 @@ import { usePreferredDataSourceAndBucketSize } from '../../../hooks/use_preferre import { useProgressiveFetcher } from '../../../hooks/use_progressive_fetcher'; import { useTimeRange } from '../../../hooks/use_time_range'; import { MLCallout, shouldDisplayMlCallout } from '../../shared/ml_callout'; -import { SearchBar } from '../../shared/search_bar'; +import { SearchBar } from '../../shared/search_bar/search_bar'; import { isTimeComparison } from '../../shared/time_comparison/get_comparison_options'; import { ServiceList } from './service_list'; import { orderServiceItems } from './service_list/order_service_items'; diff --git a/x-pack/plugins/apm/public/components/app/service_map/index.tsx b/x-pack/plugins/apm/public/components/app/service_map/index.tsx index d1be9af798dd7..bc75102fa7d67 100644 --- a/x-pack/plugins/apm/public/components/app/service_map/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_map/index.tsx @@ -29,7 +29,7 @@ import { EmptyPrompt } from './empty_prompt'; import { Popover } from './popover'; import { TimeoutPrompt } from './timeout_prompt'; import { useRefDimensions } from './use_ref_dimensions'; -import { SearchBar } from '../../shared/search_bar'; +import { SearchBar } from '../../shared/search_bar/search_bar'; import { useServiceName } from '../../../hooks/use_service_name'; import { useApmParams, useAnyOfApmParams } from '../../../hooks/use_apm_params'; import { Environment } from '../../../../common/environment_rt'; diff --git a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx index 439adb4c5e413..ca39fb50fb7b8 100644 --- a/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx +++ b/x-pack/plugins/apm/public/components/app/service_overview/service_overview_dependencies_table/index.tsx @@ -16,7 +16,7 @@ import { useApmServiceContext } from '../../../../context/apm_service/use_apm_se import { useApmParams } from '../../../../hooks/use_apm_params'; import { useFetcher } from '../../../../hooks/use_fetcher'; import { useTimeRange } from '../../../../hooks/use_time_range'; -import { DependencyLink } from '../../../shared/dependency_link'; +import { DependencyLink } from '../../../shared/links/dependency_link'; import { DependenciesTable } from '../../../shared/dependencies_table'; import { ServiceLink } from '../../../shared/links/apm/service_link'; diff --git a/x-pack/plugins/apm/public/components/app/storage_explorer/index.tsx b/x-pack/plugins/apm/public/components/app/storage_explorer/index.tsx index 060c8c00da6e7..98992e97988f5 100644 --- a/x-pack/plugins/apm/public/components/app/storage_explorer/index.tsx +++ b/x-pack/plugins/apm/public/components/app/storage_explorer/index.tsx @@ -22,7 +22,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; import { IndexLifecyclePhaseSelect } from './index_lifecycle_phase_select'; import { ServicesTable } from './services_table'; -import { SearchBar } from '../../shared/search_bar'; +import { SearchBar } from '../../shared/search_bar/search_bar'; import { StorageChart } from './storage_chart'; import { PermissionDenied } from './prompts/permission_denied'; import { useFetcher, FETCH_STATUS } from '../../../hooks/use_fetcher'; diff --git a/x-pack/plugins/apm/public/components/app/top_traces_overview/index.tsx b/x-pack/plugins/apm/public/components/app/top_traces_overview/index.tsx index 685074155c380..486a54b400098 100644 --- a/x-pack/plugins/apm/public/components/app/top_traces_overview/index.tsx +++ b/x-pack/plugins/apm/public/components/app/top_traces_overview/index.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { useApmParams } from '../../../hooks/use_apm_params'; -import { SearchBar } from '../../shared/search_bar'; +import { SearchBar } from '../../shared/search_bar/search_bar'; import { TraceList } from './trace_list'; import { useFallbackToTransactionsFetcher } from '../../../hooks/use_fallback_to_transactions_fetcher'; import { AggregatedTransactionsBadge } from '../../shared/aggregated_transactions_badge'; diff --git a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/sticky_span_properties.tsx b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/sticky_span_properties.tsx index 8866f62ae0454..bb942a735792c 100644 --- a/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/sticky_span_properties.tsx +++ b/x-pack/plugins/apm/public/components/app/transaction_details/waterfall_with_summary/waterfall_container/waterfall/span_flyout/sticky_span_properties.tsx @@ -19,7 +19,7 @@ import { NOT_AVAILABLE_LABEL } from '../../../../../../../../common/i18n'; import { Span } from '../../../../../../../../typings/es_schemas/ui/span'; import { Transaction } from '../../../../../../../../typings/es_schemas/ui/transaction'; import { useAnyOfApmParams } from '../../../../../../../hooks/use_apm_params'; -import { DependencyLink } from '../../../../../../shared/dependency_link'; +import { DependencyLink } from '../../../../../../shared/links/dependency_link'; import { TransactionDetailLink } from '../../../../../../shared/links/apm/transaction_detail_link'; import { ServiceLink } from '../../../../../../shared/links/apm/service_link'; import { StickyProperties } from '../../../../../../shared/sticky_properties'; diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/alerting_popover_flyout.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/alerting_popover_flyout.tsx similarity index 95% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/alerting_popover_flyout.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/alerting_popover_flyout.tsx index 115c7019be611..7b4b56bace928 100644 --- a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/alerting_popover_flyout.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/alerting_popover_flyout.tsx @@ -14,9 +14,9 @@ import { import { i18n } from '@kbn/i18n'; import React, { useState } from 'react'; import { IBasePath } from '@kbn/core/public'; -import { ApmRuleType } from '../../../../common/rules/apm_rule_types'; -import { AlertingFlyout } from '../../alerting/ui_components/alerting_flyout'; -import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; +import { ApmRuleType } from '../../../../../common/rules/apm_rule_types'; +import { AlertingFlyout } from '../../../alerting/ui_components/alerting_flyout'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; const alertLabel = i18n.translate('xpack.apm.home.alertsMenu.alerts', { defaultMessage: 'Alerts and rules', diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/anomaly_detection_setup_link.test.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/anomaly_detection_setup_link.test.tsx similarity index 91% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/anomaly_detection_setup_link.test.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/anomaly_detection_setup_link.test.tsx index 4de3536d61593..5e8a59fc3739c 100644 --- a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/anomaly_detection_setup_link.test.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/anomaly_detection_setup_link.test.tsx @@ -9,12 +9,12 @@ import { fireEvent, render, waitFor } from '@testing-library/react'; import { createMemoryHistory } from 'history'; import React from 'react'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; -import { ApmMlJob } from '../../../../common/anomaly_detection/apm_ml_job'; -import { getAnomalyDetectionSetupState } from '../../../../common/anomaly_detection/get_anomaly_detection_setup_state'; -import { ENVIRONMENT_ALL } from '../../../../common/environment_filter_values'; -import * as hooks from '../../../context/anomaly_detection_jobs/use_anomaly_detection_jobs_context'; -import { MockApmPluginContextWrapper } from '../../../context/apm_plugin/mock_apm_plugin_context'; -import { FETCH_STATUS } from '../../../hooks/use_fetcher'; +import { ApmMlJob } from '../../../../../common/anomaly_detection/apm_ml_job'; +import { getAnomalyDetectionSetupState } from '../../../../../common/anomaly_detection/get_anomaly_detection_setup_state'; +import { ENVIRONMENT_ALL } from '../../../../../common/environment_filter_values'; +import * as hooks from '../../../../context/anomaly_detection_jobs/use_anomaly_detection_jobs_context'; +import { MockApmPluginContextWrapper } from '../../../../context/apm_plugin/mock_apm_plugin_context'; +import { FETCH_STATUS } from '../../../../hooks/use_fetcher'; import { AnomalyDetectionSetupLink } from './anomaly_detection_setup_link'; async function renderTooltipAnchor({ diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/anomaly_detection_setup_link.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/anomaly_detection_setup_link.tsx similarity index 86% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/anomaly_detection_setup_link.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/anomaly_detection_setup_link.tsx index 74757fb5fd2c2..e6201c312d098 100644 --- a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/anomaly_detection_setup_link.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/anomaly_detection_setup_link.tsx @@ -10,16 +10,16 @@ import { IconType } from '@elastic/eui'; import { EuiHeaderLink, EuiIcon, EuiToolTip } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; -import { AnomalyDetectionSetupState } from '../../../../common/anomaly_detection/get_anomaly_detection_setup_state'; +import { AnomalyDetectionSetupState } from '../../../../../common/anomaly_detection/get_anomaly_detection_setup_state'; import { ENVIRONMENT_ALL, getEnvironmentLabel, -} from '../../../../common/environment_filter_values'; -import { useAnomalyDetectionJobsContext } from '../../../context/anomaly_detection_jobs/use_anomaly_detection_jobs_context'; -import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; -import { useApmParams } from '../../../hooks/use_apm_params'; -import { useTheme } from '../../../hooks/use_theme'; -import { getLegacyApmHref } from '../links/apm/apm_link'; +} from '../../../../../common/environment_filter_values'; +import { useAnomalyDetectionJobsContext } from '../../../../context/anomaly_detection_jobs/use_anomaly_detection_jobs_context'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; +import { useApmParams } from '../../../../hooks/use_apm_params'; +import { useTheme } from '../../../../hooks/use_theme'; +import { getLegacyApmHref } from '../../../shared/links/apm/apm_link'; export function AnomalyDetectionSetupLink() { const { query } = useApmParams('/*'); diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/index.tsx similarity index 90% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/index.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/index.tsx index db5ab8786c23b..1db19ff3833d9 100644 --- a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/index.tsx @@ -14,12 +14,12 @@ import { import { apmLabsButton } from '@kbn/observability-plugin/common'; import { i18n } from '@kbn/i18n'; import React from 'react'; -import { getAlertingCapabilities } from '../../alerting/utils/get_alerting_capabilities'; -import { getLegacyApmHref } from '../links/apm/apm_link'; -import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; +import { getAlertingCapabilities } from '../../../alerting/utils/get_alerting_capabilities'; +import { getLegacyApmHref } from '../../../shared/links/apm/apm_link'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; import { AlertingPopoverAndFlyout } from './alerting_popover_flyout'; import { AnomalyDetectionSetupLink } from './anomaly_detection_setup_link'; -import { useServiceName } from '../../../hooks/use_service_name'; +import { useServiceName } from '../../../../hooks/use_service_name'; import { InspectorHeaderLink } from './inspector_header_link'; import { Labs } from './labs'; diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/inspector_header_link.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/inspector_header_link.tsx similarity index 92% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/inspector_header_link.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/inspector_header_link.tsx index c4effa76c854c..7d4abd62de334 100644 --- a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/inspector_header_link.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/inspector_header_link.tsx @@ -13,7 +13,7 @@ import { enableInspectEsQueries, useInspectorContext, } from '@kbn/observability-plugin/public'; -import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; export function InspectorHeaderLink() { const { inspector } = useApmPluginContext(); diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/labs/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/labs/index.tsx similarity index 100% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/labs/index.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/labs/index.tsx diff --git a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/labs/labs_flyout.tsx b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/labs/labs_flyout.tsx similarity index 94% rename from x-pack/plugins/apm/public/components/shared/apm_header_action_menu/labs/labs_flyout.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/labs/labs_flyout.tsx index 6c5d38d0f1f7d..cda57400b5999 100644 --- a/x-pack/plugins/apm/public/components/shared/apm_header_action_menu/labs/labs_flyout.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/apm_header_action_menu/labs/labs_flyout.tsx @@ -24,9 +24,9 @@ import { import { LazyField } from '@kbn/advanced-settings-plugin/public'; import { i18n } from '@kbn/i18n'; import React from 'react'; -import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; -import { useApmEditableSettings } from '../../../../hooks/use_apm_editable_settings'; -import { useFetcher, isPending } from '../../../../hooks/use_fetcher'; +import { useApmPluginContext } from '../../../../../context/apm_plugin/use_apm_plugin_context'; +import { useApmEditableSettings } from '../../../../../hooks/use_apm_editable_settings'; +import { useFetcher, isPending } from '../../../../../hooks/use_fetcher'; interface Props { onClose: () => void; diff --git a/x-pack/plugins/apm/public/components/routing/app_root.tsx b/x-pack/plugins/apm/public/components/routing/app_root/index.tsx similarity index 75% rename from x-pack/plugins/apm/public/components/routing/app_root.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/index.tsx index 57fbc70143a97..40309dacfa934 100644 --- a/x-pack/plugins/apm/public/components/routing/app_root.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/index.tsx @@ -21,26 +21,26 @@ import { euiDarkVars, euiLightVars } from '@kbn/ui-theme'; import React from 'react'; import { Route } from '@kbn/shared-ux-router'; import { DefaultTheme, ThemeProvider } from 'styled-components'; -import { AnomalyDetectionJobsContextProvider } from '../../context/anomaly_detection_jobs/anomaly_detection_jobs_context'; +import { AnomalyDetectionJobsContextProvider } from '../../../context/anomaly_detection_jobs/anomaly_detection_jobs_context'; import { ApmPluginContext, ApmPluginContextValue, -} from '../../context/apm_plugin/apm_plugin_context'; -import { useApmPluginContext } from '../../context/apm_plugin/use_apm_plugin_context'; -import { BreadcrumbsContextProvider } from '../../context/breadcrumbs/context'; -import { LicenseProvider } from '../../context/license/license_context'; -import { TimeRangeIdContextProvider } from '../../context/time_range_id/time_range_id_context'; -import { UrlParamsProvider } from '../../context/url_params_context/url_params_context'; -import { ApmPluginStartDeps } from '../../plugin'; -import { ScrollToTopOnPathChange } from '../app/main/scroll_to_top_on_path_change'; -import { ApmHeaderActionMenu } from '../shared/apm_header_action_menu'; -import { RedirectWithDefaultDateRange } from '../shared/redirect_with_default_date_range'; -import { RedirectWithDefaultEnvironment } from '../shared/redirect_with_default_environment'; -import { RedirectWithOffset } from '../shared/redirect_with_offset'; -import { ApmErrorBoundary } from './apm_error_boundary'; -import { apmRouter } from './apm_route_config'; -import { RedirectDependenciesToDependenciesInventory } from './home/redirect_dependencies_to_dependencies_inventory'; -import { TrackPageview } from './track_pageview'; +} from '../../../context/apm_plugin/apm_plugin_context'; +import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; +import { BreadcrumbsContextProvider } from '../../../context/breadcrumbs/context'; +import { LicenseProvider } from '../../../context/license/license_context'; +import { TimeRangeIdContextProvider } from '../../../context/time_range_id/time_range_id_context'; +import { UrlParamsProvider } from '../../../context/url_params_context/url_params_context'; +import { ApmPluginStartDeps } from '../../../plugin'; +import { ScrollToTopOnPathChange } from './scroll_to_top_on_path_change'; +import { ApmHeaderActionMenu } from './apm_header_action_menu'; +import { RedirectWithDefaultDateRange } from './redirect_with_default_date_range'; +import { RedirectWithDefaultEnvironment } from './redirect_with_default_environment'; +import { RedirectWithOffset } from './redirect_with_offset'; +import { ApmErrorBoundary } from '../apm_error_boundary'; +import { apmRouter } from '../apm_route_config'; +import { RedirectDependenciesToDependenciesInventory } from './redirect_dependencies_to_dependencies_inventory'; +import { TrackPageview } from '../track_pageview'; const storage = new Storage(localStorage); diff --git a/x-pack/plugins/apm/public/components/routing/home/redirect_dependencies_to_dependencies_inventory.tsx b/x-pack/plugins/apm/public/components/routing/app_root/redirect_dependencies_to_dependencies_inventory.tsx similarity index 100% rename from x-pack/plugins/apm/public/components/routing/home/redirect_dependencies_to_dependencies_inventory.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/redirect_dependencies_to_dependencies_inventory.tsx diff --git a/x-pack/plugins/apm/public/components/shared/redirect_with_default_date_range/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_date_range/index.tsx similarity index 83% rename from x-pack/plugins/apm/public/components/shared/redirect_with_default_date_range/index.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_date_range/index.tsx index dd8393934d561..66da40d649095 100644 --- a/x-pack/plugins/apm/public/components/shared/redirect_with_default_date_range/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_date_range/index.tsx @@ -6,9 +6,9 @@ */ import { ReactElement } from 'react'; import { useLocation } from 'react-router-dom'; -import { useApmRouter } from '../../../hooks/use_apm_router'; -import { useDateRangeRedirect } from '../../../hooks/use_date_range_redirect'; -import { isRouteWithTimeRange } from '../is_route_with_time_range'; +import { useApmRouter } from '../../../../hooks/use_apm_router'; +import { useDateRangeRedirect } from '../../../../hooks/use_date_range_redirect'; +import { isRouteWithTimeRange } from '../../../shared/is_route_with_time_range'; // This is a top-level component that blocks rendering of the routes // if there is no valid date range, and redirects to one if needed. diff --git a/x-pack/plugins/apm/public/components/shared/redirect_with_default_environment/index.test.tsx b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_environment/index.test.tsx similarity index 92% rename from x-pack/plugins/apm/public/components/shared/redirect_with_default_environment/index.test.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_environment/index.test.tsx index fb6dd69128200..86e641418b7df 100644 --- a/x-pack/plugins/apm/public/components/shared/redirect_with_default_environment/index.test.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_environment/index.test.tsx @@ -10,9 +10,9 @@ import { render } from '@testing-library/react'; import { createMemoryHistory, Location, MemoryHistory } from 'history'; import qs from 'query-string'; import { RedirectWithDefaultEnvironment } from '.'; -import { apmRouter } from '../../routing/apm_route_config'; -import * as useApmPluginContextExports from '../../../context/apm_plugin/use_apm_plugin_context'; -import { ENVIRONMENT_ALL } from '../../../../common/environment_filter_values'; +import { apmRouter } from '../../apm_route_config'; +import * as useApmPluginContextExports from '../../../../context/apm_plugin/use_apm_plugin_context'; +import { ENVIRONMENT_ALL } from '../../../../../common/environment_filter_values'; describe('RedirectWithDefaultEnvironment', () => { let history: MemoryHistory; diff --git a/x-pack/plugins/apm/public/components/shared/redirect_with_default_environment/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_environment/index.tsx similarity index 92% rename from x-pack/plugins/apm/public/components/shared/redirect_with_default_environment/index.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_environment/index.tsx index 860b8f5df230b..54997abf35dcc 100644 --- a/x-pack/plugins/apm/public/components/shared/redirect_with_default_environment/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_default_environment/index.tsx @@ -8,7 +8,7 @@ import { useLocation, Redirect } from 'react-router-dom'; import qs from 'query-string'; import React from 'react'; -import { useDefaultEnvironment } from '../../../hooks/use_default_environment'; +import { useDefaultEnvironment } from '../../../../hooks/use_default_environment'; export function RedirectWithDefaultEnvironment({ children, diff --git a/x-pack/plugins/apm/public/components/shared/redirect_with_offset/index.test.tsx b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_offset/index.test.tsx similarity index 94% rename from x-pack/plugins/apm/public/components/shared/redirect_with_offset/index.test.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/redirect_with_offset/index.test.tsx index 2a04856a7a1c4..1d099584e8cbc 100644 --- a/x-pack/plugins/apm/public/components/shared/redirect_with_offset/index.test.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_offset/index.test.tsx @@ -10,9 +10,9 @@ import { render } from '@testing-library/react'; import { createMemoryHistory, Location, MemoryHistory } from 'history'; import qs from 'query-string'; import { RedirectWithOffset } from '.'; -import { apmRouter } from '../../routing/apm_route_config'; -import * as useApmPluginContextExports from '../../../context/apm_plugin/use_apm_plugin_context'; -import { TimeRangeComparisonEnum } from '../time_comparison/get_comparison_options'; +import { apmRouter } from '../../apm_route_config'; +import * as useApmPluginContextExports from '../../../../context/apm_plugin/use_apm_plugin_context'; +import { TimeRangeComparisonEnum } from '../../../shared/time_comparison/get_comparison_options'; describe('RedirectWithOffset', () => { let history: MemoryHistory; diff --git a/x-pack/plugins/apm/public/components/shared/redirect_with_offset/index.tsx b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_offset/index.tsx similarity index 77% rename from x-pack/plugins/apm/public/components/shared/redirect_with_offset/index.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/redirect_with_offset/index.tsx index 268735128659d..3c9a92b3c8402 100644 --- a/x-pack/plugins/apm/public/components/shared/redirect_with_offset/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/app_root/redirect_with_offset/index.tsx @@ -8,16 +8,16 @@ import { useLocation } from 'react-router-dom'; import qs from 'query-string'; import React from 'react'; -import { useApmRouter } from '../../../hooks/use_apm_router'; -import { isRouteWithComparison } from '../is_route_with_time_range'; +import { useApmRouter } from '../../../../hooks/use_apm_router'; +import { isRouteWithComparison } from '../../../shared/is_route_with_time_range'; import { TimeRangeComparisonEnum, dayAndWeekBeforeToOffset, -} from '../time_comparison/get_comparison_options'; -import { useApmPluginContext } from '../../../context/apm_plugin/use_apm_plugin_context'; -import { getComparisonEnabled } from '../time_comparison/get_comparison_enabled'; -import { toBoolean } from '../../../context/url_params_context/helpers'; -import { RenderRedirectTo } from '../../routing/redirect_to'; +} from '../../../shared/time_comparison/get_comparison_options'; +import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context'; +import { getComparisonEnabled } from '../../../shared/time_comparison/get_comparison_enabled'; +import { toBoolean } from '../../../../context/url_params_context/helpers'; +import { RenderRedirectTo } from '../../redirect_to'; export function RedirectWithOffset({ children, diff --git a/x-pack/plugins/apm/public/components/app/main/scroll_to_top_on_path_change.tsx b/x-pack/plugins/apm/public/components/routing/app_root/scroll_to_top_on_path_change.tsx similarity index 100% rename from x-pack/plugins/apm/public/components/app/main/scroll_to_top_on_path_change.tsx rename to x-pack/plugins/apm/public/components/routing/app_root/scroll_to_top_on_path_change.tsx diff --git a/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx b/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx index 02929c63e2e59..156ebac930dbd 100644 --- a/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx +++ b/x-pack/plugins/apm/public/components/routing/templates/apm_service_template/index.tsx @@ -40,7 +40,7 @@ import { useTimeRange } from '../../../../hooks/use_time_range'; import { getAlertingCapabilities } from '../../../alerting/utils/get_alerting_capabilities'; import { BetaBadge } from '../../../shared/beta_badge'; import { replace } from '../../../shared/links/url_helpers'; -import { SearchBar } from '../../../shared/search_bar'; +import { SearchBar } from '../../../shared/search_bar/search_bar'; import { ServiceIcons } from '../../../shared/service_icons'; import { TechnicalPreviewBadge } from '../../../shared/technical_preview_badge'; import { ApmMainTemplate } from '../apm_main_template'; diff --git a/x-pack/plugins/apm/public/components/routing/templates/dependency_detail_template.tsx b/x-pack/plugins/apm/public/components/routing/templates/dependency_detail_template.tsx index 605936dd57944..7b57dbade2216 100644 --- a/x-pack/plugins/apm/public/components/routing/templates/dependency_detail_template.tsx +++ b/x-pack/plugins/apm/public/components/routing/templates/dependency_detail_template.tsx @@ -18,7 +18,7 @@ import { useApmRoutePath } from '../../../hooks/use_apm_route_path'; import { useFetcher } from '../../../hooks/use_fetcher'; import { useTimeRange } from '../../../hooks/use_time_range'; import { BetaBadge } from '../../shared/beta_badge'; -import { SearchBar } from '../../shared/search_bar'; +import { SearchBar } from '../../shared/search_bar/search_bar'; import { SpanIcon } from '../../shared/span_icon'; import { ApmMainTemplate } from './apm_main_template'; diff --git a/x-pack/plugins/apm/public/components/shared/dependency_link.stories.tsx b/x-pack/plugins/apm/public/components/shared/links/dependency_link.stories.tsx similarity index 91% rename from x-pack/plugins/apm/public/components/shared/dependency_link.stories.tsx rename to x-pack/plugins/apm/public/components/shared/links/dependency_link.stories.tsx index e4652caed9ddd..b240cafb20ed2 100644 --- a/x-pack/plugins/apm/public/components/shared/dependency_link.stories.tsx +++ b/x-pack/plugins/apm/public/components/shared/links/dependency_link.stories.tsx @@ -7,7 +7,7 @@ import { Story } from '@storybook/react'; import React, { ComponentProps, ComponentType } from 'react'; -import { MockApmPluginStorybook } from '../../context/apm_plugin/mock_apm_plugin_storybook'; +import { MockApmPluginStorybook } from '../../../context/apm_plugin/mock_apm_plugin_storybook'; import { DependencyLink } from './dependency_link'; type Args = ComponentProps; diff --git a/x-pack/plugins/apm/public/components/shared/dependency_link.test.tsx b/x-pack/plugins/apm/public/components/shared/links/dependency_link.test.tsx similarity index 100% rename from x-pack/plugins/apm/public/components/shared/dependency_link.test.tsx rename to x-pack/plugins/apm/public/components/shared/links/dependency_link.test.tsx diff --git a/x-pack/plugins/apm/public/components/shared/dependency_link.tsx b/x-pack/plugins/apm/public/components/shared/links/dependency_link.tsx similarity index 86% rename from x-pack/plugins/apm/public/components/shared/dependency_link.tsx rename to x-pack/plugins/apm/public/components/shared/links/dependency_link.tsx index 77901974e81d2..824e08752e095 100644 --- a/x-pack/plugins/apm/public/components/shared/dependency_link.tsx +++ b/x-pack/plugins/apm/public/components/shared/links/dependency_link.tsx @@ -9,10 +9,10 @@ import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; import { TypeOf } from '@kbn/typed-react-router-config'; import React from 'react'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; -import { useApmRouter } from '../../hooks/use_apm_router'; -import { truncate } from '../../utils/style'; -import { ApmRoutes } from '../routing/apm_route_config'; -import { SpanIcon } from './span_icon'; +import { useApmRouter } from '../../../hooks/use_apm_router'; +import { truncate } from '../../../utils/style'; +import { ApmRoutes } from '../../routing/apm_route_config'; +import { SpanIcon } from '../span_icon'; const StyledLink = euiStyled(EuiLink)`${truncate('100%')};`; diff --git a/x-pack/plugins/apm/public/components/shared/search_bar.test.tsx b/x-pack/plugins/apm/public/components/shared/search_bar/search_bar.test.tsx similarity index 84% rename from x-pack/plugins/apm/public/components/shared/search_bar.test.tsx rename to x-pack/plugins/apm/public/components/shared/search_bar/search_bar.test.tsx index 1fb1e15a26ee6..f07fc415eaf7d 100644 --- a/x-pack/plugins/apm/public/components/shared/search_bar.test.tsx +++ b/x-pack/plugins/apm/public/components/shared/search_bar/search_bar.test.tsx @@ -10,15 +10,15 @@ import { createMemoryHistory, MemoryHistory } from 'history'; import React from 'react'; import { Router } from 'react-router-dom'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; -import { MockApmPluginContextWrapper } from '../../context/apm_plugin/mock_apm_plugin_context'; -import { ApmServiceContextProvider } from '../../context/apm_service/apm_service_context'; -import { UrlParamsProvider } from '../../context/url_params_context/url_params_context'; -import type { ApmUrlParams } from '../../context/url_params_context/types'; -import * as useFetcherHook from '../../hooks/use_fetcher'; -import * as useApmDataViewHook from '../../hooks/use_apm_data_view'; -import * as useServiceTransactionTypesHook from '../../context/apm_service/use_service_transaction_types_fetcher'; -import { renderWithTheme } from '../../utils/test_helpers'; -import { fromQuery } from './links/url_helpers'; +import { MockApmPluginContextWrapper } from '../../../context/apm_plugin/mock_apm_plugin_context'; +import { ApmServiceContextProvider } from '../../../context/apm_service/apm_service_context'; +import { UrlParamsProvider } from '../../../context/url_params_context/url_params_context'; +import type { ApmUrlParams } from '../../../context/url_params_context/types'; +import * as useFetcherHook from '../../../hooks/use_fetcher'; +import * as useApmDataViewHook from '../../../hooks/use_apm_data_view'; +import * as useServiceTransactionTypesHook from '../../../context/apm_service/use_service_transaction_types_fetcher'; +import { renderWithTheme } from '../../../utils/test_helpers'; +import { fromQuery } from '../links/url_helpers'; import { CoreStart } from '@kbn/core/public'; import { SearchBar } from './search_bar'; diff --git a/x-pack/plugins/apm/public/components/shared/search_bar.tsx b/x-pack/plugins/apm/public/components/shared/search_bar/search_bar.tsx similarity index 85% rename from x-pack/plugins/apm/public/components/shared/search_bar.tsx rename to x-pack/plugins/apm/public/components/shared/search_bar/search_bar.tsx index 1a46ca2e87568..edff90281b9ec 100644 --- a/x-pack/plugins/apm/public/components/shared/search_bar.tsx +++ b/x-pack/plugins/apm/public/components/shared/search_bar/search_bar.tsx @@ -13,13 +13,13 @@ import { EuiSpacer, } from '@elastic/eui'; import React from 'react'; -import { isMobileAgentName } from '../../../common/agent_name'; -import { useApmServiceContext } from '../../context/apm_service/use_apm_service_context'; -import { useBreakpoints } from '../../hooks/use_breakpoints'; -import { ApmDatePicker } from './date_picker/apm_date_picker'; -import { KueryBar } from './kuery_bar'; -import { TimeComparison } from './time_comparison'; -import { TransactionTypeSelect } from './transaction_type_select'; +import { isMobileAgentName } from '../../../../common/agent_name'; +import { useApmServiceContext } from '../../../context/apm_service/use_apm_service_context'; +import { useBreakpoints } from '../../../hooks/use_breakpoints'; +import { ApmDatePicker } from '../date_picker/apm_date_picker'; +import { KueryBar } from '../kuery_bar'; +import { TimeComparison } from '../time_comparison'; +import { TransactionTypeSelect } from '../transaction_type_select'; interface Props { hidden?: boolean; From cb03bb67c1f98fc5e13dba80d194808917c6e0ba Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Mon, 20 Feb 2023 13:04:31 +0200 Subject: [PATCH 121/210] [Convert2Lens] Carry vis filters to the converted Vis (#151255) ## Summary Closes https://github.com/elastic/kibana/issues/151234 Solves the bug described in the issue. If the visualization has filters/query, when converted the filters are carried to the converted viz (unreleased bug) ### 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> --- .../public/actions/edit_in_lens_action.tsx | 7 ++++-- .../lens/open_in_lens/dashboard/dashboard.ts | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx index 16977cdcfac17..dad2efbdedfc2 100644 --- a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx +++ b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx @@ -71,9 +71,12 @@ export class EditInLensAction implements Action { if (isVisualizeEmbeddable(embeddable)) { const vis = embeddable.getVis(); const navigateToLensConfig = await vis.type.navigateToLens?.(vis, this.timefilter); + // Filters and query set on the visualization level + const visFilters = vis.data.searchSource?.getField('filter'); + const visQuery = vis.data.searchSource?.getField('query'); const parentSearchSource = vis.data.searchSource?.getParent(); - const searchFilters = parentSearchSource?.getField('filter'); - const searchQuery = parentSearchSource?.getField('query'); + const searchFilters = parentSearchSource?.getField('filter') ?? visFilters; + const searchQuery = parentSearchSource?.getField('query') ?? visQuery; const title = vis.title || embeddable.getOutput().title; const updatedWithMeta = { ...navigateToLensConfig, diff --git a/x-pack/test/functional/apps/lens/open_in_lens/dashboard/dashboard.ts b/x-pack/test/functional/apps/lens/open_in_lens/dashboard/dashboard.ts index 47846ba3641a6..7fa3fb49a5588 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/dashboard/dashboard.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/dashboard/dashboard.ts @@ -75,5 +75,28 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); expect(await dashboard.isNotificationExists(1)).to.be(false); }); + + it('should carry the visualizations filters to Lens', async () => { + await dashboardAddPanel.clickEditorMenuButton(); + await dashboardAddPanel.clickAggBasedVisualizations(); + await dashboardAddPanel.clickVisType('histogram'); + await testSubjects.click('savedObjectTitlelogstash-*'); + await filterBar.addFilter({ field: 'geo.src', operation: 'is', value: 'CN' }); + await testSubjects.exists('visualizesaveAndReturnButton'); + await testSubjects.click('visualizesaveAndReturnButton'); + await dashboard.waitForRenderComplete(); + + expect(await dashboard.isNotificationExists(2)).to.be(true); + const panel = (await dashboard.getDashboardPanels())[2]; + await panelActions.convertToLens(panel); + await lens.waitForVisualization('xyVisChart'); + + const filterCount = await filterBar.getFilterCount(); + expect(filterCount).to.equal(1); + await lens.replaceInDashboard(); + await dashboard.waitForRenderComplete(); + + expect(await dashboard.isNotificationExists(2)).to.be(false); + }); }); } From 9109fd5afed8197b328a8b21d1c8e241873c4b68 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Mon, 20 Feb 2023 12:22:28 +0100 Subject: [PATCH 122/210] [Defend Workflows] Live queries with parameters on timelines' events (#151317) Closes https://github.com/elastic/security-team/issues/5999 ![test](https://user-images.githubusercontent.com/29123534/219058689-f2c423b8-b239-4ec0-b946-7b2e350749e3.gif) **BUG*** "Take action" > "Run osquery" on timeline event that is not an alert won't substitute params. **CAUSE** Lack of context connection in the component that carries `alertData` --- .../public/live_queries/form/index.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/osquery/public/live_queries/form/index.tsx b/x-pack/plugins/osquery/public/live_queries/form/index.tsx index 2449195300910..7868c1bb3a471 100644 --- a/x-pack/plugins/osquery/public/live_queries/form/index.tsx +++ b/x-pack/plugins/osquery/public/live_queries/form/index.tsx @@ -8,10 +8,14 @@ import { EuiButton, EuiButtonEmpty, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import type { ECSMapping } from '@kbn/osquery-io-ts-types'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'; import { useForm as useHookForm, FormProvider } from 'react-hook-form'; import { isEmpty, find, pickBy } from 'lodash'; +import { + containsDynamicQuery, + replaceParamsQuery, +} from '../../../common/utils/replace_params_query'; import { PLUGIN_NAME as OSQUERY_PLUGIN_NAME } from '../../../common'; import { QueryPackSelectable } from './query_pack_selectable'; import type { SavedQuerySOFormData } from '../../saved_queries/form/use_saved_query_form'; @@ -26,6 +30,7 @@ import { LiveQueryQueryField } from './live_query_query_field'; import { AgentsTableField } from './agents_table_field'; import { savedQueryDataSerializer } from '../../saved_queries/form/use_saved_query_form'; import { PackFieldWrapper } from '../../shared_components/osquery_response_action_type/pack_field_wrapper'; +import { AlertAttachmentContext } from '../../common/contexts'; export interface LiveQueryFormFields { alertIds?: string[]; @@ -66,6 +71,8 @@ const LiveQueryFormComponent: React.FC = ({ enabled = true, hideAgentsField = false, }) => { + const alertAttachmentContext = useContext(AlertAttachmentContext); + const { application, appName } = useKibana().services; const permissions = application.capabilities.osquery; const canRunPacks = useMemo( @@ -138,11 +145,17 @@ const LiveQueryFormComponent: React.FC = ({ const onSubmit = useCallback( async (values: LiveQueryFormFields) => { + // Temporary, frontend solution for params substitution. To be removed once alert_ids refactored in create_live_query_route + const query = + values.query && containsDynamicQuery(values.query) && alertAttachmentContext + ? replaceParamsQuery(values.query, alertAttachmentContext).result + : values.query; + const serializedData = pickBy( { agentSelection: values.agentSelection, saved_query_id: values.savedQueryId, - query: values.query, + query, alert_ids: values.alertIds, pack_id: values?.packId?.length ? values?.packId[0] : undefined, ecs_mapping: values.ecs_mapping, @@ -152,7 +165,7 @@ const LiveQueryFormComponent: React.FC = ({ await mutateAsync(serializedData); }, - [mutateAsync] + [alertAttachmentContext, mutateAsync] ); const serializedData: SavedQuerySOFormData = useMemo( From 6f4cbe21ccabf80b08e27acd54d82bdbd2d2ddb0 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Mon, 20 Feb 2023 04:29:39 -0800 Subject: [PATCH 123/210] [DOCS] Automate transform rule screenshots (#151087) --- .../functional/services/transform/alerting.ts | 59 ++++++++++++++++ .../functional/services/transform/index.ts | 3 + .../services/transform/navigation.ts | 9 ++- x-pack/test/screenshot_creation/apps/index.ts | 1 + .../apps/transform_docs/index.ts | 36 ++++++++++ .../apps/transform_docs/transform_alerts.ts | 67 +++++++++++++++++++ 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 x-pack/test/functional/services/transform/alerting.ts create mode 100644 x-pack/test/screenshot_creation/apps/transform_docs/index.ts create mode 100644 x-pack/test/screenshot_creation/apps/transform_docs/transform_alerts.ts diff --git a/x-pack/test/functional/services/transform/alerting.ts b/x-pack/test/functional/services/transform/alerting.ts new file mode 100644 index 0000000000000..2c6443a73c533 --- /dev/null +++ b/x-pack/test/functional/services/transform/alerting.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export function TransformAlertingProvider({ getService }: FtrProviderContext) { + const retry = getService('retry'); + const testSubjects = getService('testSubjects'); + const comboBox = getService('comboBox'); + return { + async selectTransformAlertType() { + await retry.tryForTime(5000, async () => { + await testSubjects.click('transform_health-SelectOption'); + await testSubjects.existOrFail(`transformHealthAlertingRuleForm`, { timeout: 1000 }); + }); + }, + + async selectTransforms(transformIds: string[]) { + for (const transformId of transformIds) { + await comboBox.set('transformSelection > comboBoxInput', transformId); + } + await this.assertTransformSelection(transformIds); + }, + + async assertTransformSelection(expectedTransformIds: string[]) { + const comboBoxSelectedOptions = await comboBox.getComboBoxSelectedOptions( + 'transformSelection > comboBoxInput' + ); + expect(comboBoxSelectedOptions).to.eql( + expectedTransformIds, + `Expected job selection to be '${expectedTransformIds}' (got '${comboBoxSelectedOptions}')` + ); + }, + + async openAddRuleVariable() { + await retry.tryForTime(5000, async () => { + await testSubjects.click('messageAddVariableButton'); + await testSubjects.existOrFail('variableMenuButton-alert.actionGroup', { timeout: 1000 }); + }); + }, + + async setRuleName(rulename: string) { + await testSubjects.setValue('ruleNameInput', rulename); + }, + + async clickCancelSaveRuleButton() { + await retry.tryForTime(5000, async () => { + await testSubjects.click('cancelSaveRuleButton'); + await testSubjects.existOrFail('confirmModalTitleText', { timeout: 1000 }); + await testSubjects.click('confirmModalConfirmButton'); + }); + }, + }; +} diff --git a/x-pack/test/functional/services/transform/index.ts b/x-pack/test/functional/services/transform/index.ts index 61461bafe34b5..6cd3903251399 100644 --- a/x-pack/test/functional/services/transform/index.ts +++ b/x-pack/test/functional/services/transform/index.ts @@ -19,6 +19,7 @@ import { TransformSourceSelectionProvider } from './source_selection'; import { TransformTableProvider } from './transform_table'; import { TransformTestExecutionProvider } from './test_execution'; import { TransformWizardProvider } from './wizard'; +import { TransformAlertingProvider } from './alerting'; import { MachineLearningAPIProvider } from '../ml/api'; import { MachineLearningTestResourcesProvider } from '../ml/test_resources'; @@ -38,8 +39,10 @@ export function TransformProvider(context: FtrProviderContext) { const testExecution = TransformTestExecutionProvider(context); const testResources = MachineLearningTestResourcesProvider(context, mlApi); const wizard = TransformWizardProvider(context); + const alerting = TransformAlertingProvider(context); return { + alerting, api, datePicker, discover, diff --git a/x-pack/test/functional/services/transform/navigation.ts b/x-pack/test/functional/services/transform/navigation.ts index be579cdc0fb42..8ec9d3f069d6c 100644 --- a/x-pack/test/functional/services/transform/navigation.ts +++ b/x-pack/test/functional/services/transform/navigation.ts @@ -7,12 +7,19 @@ import { FtrProviderContext } from '../../ftr_provider_context'; -export function TransformNavigationProvider({ getPageObjects }: FtrProviderContext) { +export function TransformNavigationProvider({ getPageObjects, getService }: FtrProviderContext) { const pageObjects = getPageObjects(['common']); + const testSubjects = getService('testSubjects'); return { async navigateTo() { return await pageObjects.common.navigateToApp('transform'); }, + + async navigateToRules() { + await pageObjects.common.navigateToApp('triggersActions'); + await testSubjects.click('rulesTab'); + await testSubjects.existOrFail('rulesList'); + }, }; } diff --git a/x-pack/test/screenshot_creation/apps/index.ts b/x-pack/test/screenshot_creation/apps/index.ts index 2fde79a733ccd..763fe31c9d9e0 100644 --- a/x-pack/test/screenshot_creation/apps/index.ts +++ b/x-pack/test/screenshot_creation/apps/index.ts @@ -11,5 +11,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('apps', function () { loadTestFile(require.resolve('./ml_docs')); loadTestFile(require.resolve('./response_ops_docs')); + loadTestFile(require.resolve('./transform_docs')); }); } diff --git a/x-pack/test/screenshot_creation/apps/transform_docs/index.ts b/x-pack/test/screenshot_creation/apps/transform_docs/index.ts new file mode 100644 index 0000000000000..a544ffe9932d8 --- /dev/null +++ b/x-pack/test/screenshot_creation/apps/transform_docs/index.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 { esTestConfig } from '@kbn/test'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getPageObject, getService, loadTestFile }: FtrProviderContext) { + const browser = getService('browser'); + const ml = getService('ml'); + const securityPage = getPageObject('security'); + + describe('transform docs', function () { + this.tags(['transforms']); + + before(async () => { + await ml.testResources.setKibanaTimeZoneToUTC(); + await ml.testResources.disableKibanaAnnouncements(); + await browser.setWindowSize(1920, 1080); + await securityPage.login( + esTestConfig.getUrlParts().username, + esTestConfig.getUrlParts().password + ); + }); + + after(async () => { + await securityPage.forceLogout(); + await ml.testResources.resetKibanaTimeZone(); + await ml.testResources.resetKibanaAnnouncements(); + }); + + loadTestFile(require.resolve('./transform_alerts')); + }); +} diff --git a/x-pack/test/screenshot_creation/apps/transform_docs/transform_alerts.ts b/x-pack/test/screenshot_creation/apps/transform_docs/transform_alerts.ts new file mode 100644 index 0000000000000..e5485423a9308 --- /dev/null +++ b/x-pack/test/screenshot_creation/apps/transform_docs/transform_alerts.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 { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const actions = getService('actions'); + const browser = getService('browser'); + const commonScreenshots = getService('commonScreenshots'); + const testSubjects = getService('testSubjects'); + const transform = getService('transform'); + const screenshotDirectories = ['transform_docs']; + const pageObjects = getPageObjects(['triggersActionsUI']); + + let testTransformId = ''; + + describe('transform alerts', function () { + before(async () => { + await browser.setWindowSize(1920, 1080); + await actions.api.createConnector({ + name: 'server-log-connector', + config: {}, + secrets: {}, + connectorTypeId: '.server-log', + }); + }); + + after(async () => { + await actions.api.deleteAllConnectors(); + }); + + it('transform rule screenshot', async () => { + await transform.testExecution.logTestStep('navigate to stack management rules'); + await transform.navigation.navigateToRules(); + await pageObjects.triggersActionsUI.clickCreateAlertButton(); + await transform.alerting.setRuleName('transform-health-rule'); + + await transform.testExecution.logTestStep( + 'search for transform rule type and take screenshot' + ); + const searchBox = await testSubjects.find('ruleSearchField'); + await searchBox.click(); + await searchBox.clearValue(); + await searchBox.type('transform'); + await searchBox.pressKeys(browser.keys.ENTER); + await commonScreenshots.takeScreenshot('transform-rule', screenshotDirectories); + + await transform.testExecution.logTestStep('select transform details and take screenshot'); + await transform.alerting.selectTransformAlertType(); + testTransformId = '*'; + await transform.alerting.selectTransforms([testTransformId]); + await commonScreenshots.takeScreenshot('transform-check-config', screenshotDirectories); + + await transform.testExecution.logTestStep( + 'add server log connector and take action variable screenshot' + ); + await testSubjects.click('.server-log-alerting-ActionTypeSelectOption'); + await transform.alerting.openAddRuleVariable(); + await commonScreenshots.takeScreenshot('transform-alert-actions', screenshotDirectories); + await transform.alerting.clickCancelSaveRuleButton(); + }); + }); +} From 77067f14245c33d84531044a23804f96c70a6c59 Mon Sep 17 00:00:00 2001 From: Jill Guyonnet Date: Mon, 20 Feb 2023 15:10:26 +0100 Subject: [PATCH 124/210] Update Fleet guide link in Agent enrollment (#151454) Rename Fleet User Guide to Fleet and Elastic User Guide in the Fleet -> Add Agent -> Enroll in Fleet panel. --- .../components/enrollment_recommendation.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/components/enrollment_recommendation.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/components/enrollment_recommendation.tsx index 409a259f934dd..9ad6cc482fb1a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/components/enrollment_recommendation.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/components/enrollment_recommendation.tsx @@ -66,7 +66,7 @@ export const EnrollmentRecommendation: React.FunctionComponent<{ ), From 0e18843e03317d737cd1255338afb751cd950562 Mon Sep 17 00:00:00 2001 From: Tre Date: Mon, 20 Feb 2023 14:52:15 +0000 Subject: [PATCH 125/210] [qa] Reorg name changes in CODEOWNERS (#151298) ## Summary Search and replace of @elastic/kibana-qa to @elastic/appex-qa --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 49205649178b0..cb102baab4b49 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -881,13 +881,13 @@ packages/kbn-yarn-lock-validator @elastic/kibana-operations /kbn_pm/ @elastic/kibana-operations # Quality Assurance -/src/dev/code_coverage @elastic/kibana-qa -/vars/*Coverage.groovy @elastic/kibana-qa -/test/functional/services/common @elastic/kibana-qa -/test/functional/services/lib @elastic/kibana-qa -/test/functional/services/remote @elastic/kibana-qa -/test/visual_regression @elastic/kibana-qa -/x-pack/test/visual_regression @elastic/kibana-qa +/src/dev/code_coverage @elastic/appex-qa +/vars/*Coverage.groovy @elastic/appex-qa +/test/functional/services/common @elastic/appex-qa +/test/functional/services/lib @elastic/appex-qa +/test/functional/services/remote @elastic/appex-qa +/test/visual_regression @elastic/appex-qa +/x-pack/test/visual_regression @elastic/appex-qa # Core /config/kibana.yml @elastic/kibana-core From 4f06dc0258b88ef31eb8ea5b04afd2520550644e Mon Sep 17 00:00:00 2001 From: Yan Savitski Date: Mon, 20 Feb 2023 16:05:42 +0100 Subject: [PATCH 126/210] Behavioral analytics add collection modal (#151612) Fixing issue 3974 --- .../add_analytics_collection_api_logic.ts | 3 +- .../add_analytics_collection.test.tsx | 15 ++- .../add_analytics_collection.tsx | 33 +++-- .../add_analytics_collection_form.test.tsx | 51 ++++--- .../add_analytics_collection_form.tsx | 127 +++++------------- .../add_analytics_collection_logic.test.ts | 100 ++++++++++++-- .../add_analytics_collection_logic.ts | 62 +++++++-- .../add_analytics_collection_modal.test.tsx | 79 +++++++++++ .../add_analytics_collection_modal.tsx | 105 +++++++++++++++ .../analytics_collection_view.tsx | 24 +--- .../analytics_overview/analytics_overview.tsx | 18 +-- .../public/applications/analytics/index.tsx | 7 +- .../public/applications/analytics/routes.ts | 1 - .../routes/enterprise_search/analytics.ts | 2 +- .../translations/translations/fr-FR.json | 3 - .../translations/translations/ja-JP.json | 3 - .../translations/translations/zh-CN.json | 3 - 17 files changed, 432 insertions(+), 204 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.tsx diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/api/add_analytics_collection/add_analytics_collection_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/api/add_analytics_collection/add_analytics_collection_api_logic.ts index 6b5e17b188d0f..2aee9c0feb26b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/api/add_analytics_collection/add_analytics_collection_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/api/add_analytics_collection/add_analytics_collection_api_logic.ts @@ -30,5 +30,6 @@ export const createAnalyticsCollection = async ({ export const AddAnalyticsCollectionsAPILogic = createApiLogic( ['analytics', 'add_analytics_collections_api_logic'], - createAnalyticsCollection + createAnalyticsCollection, + { showErrorFlash: false } ); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.test.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.test.tsx index f635b0699e0bb..fed4e0d539d8f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.test.tsx @@ -11,8 +11,10 @@ import React from 'react'; import { shallow } from 'enzyme'; +import { EuiButton } from '@elastic/eui'; + import { AddAnalyticsCollection } from './add_analytics_collection'; -import { AddAnalyticsCollectionForm } from './add_analytics_collection_form'; +import { AddAnalyticsCollectionModal } from './add_analytics_collection_modal'; describe('AddAnalyticsCollection', () => { beforeEach(() => { @@ -21,6 +23,15 @@ describe('AddAnalyticsCollection', () => { it('renders', () => { const wrapper = shallow(); - expect(wrapper.find(AddAnalyticsCollectionForm)).toHaveLength(1); + + expect(wrapper.find(EuiButton)).toHaveLength(1); + expect(wrapper.find(AddAnalyticsCollectionModal)).toHaveLength(0); + }); + + it('show render modal after click on button', () => { + const wrapper = shallow(); + + (wrapper.find(EuiButton).prop('onClick') as Function)?.(); + expect(wrapper.find(AddAnalyticsCollectionModal)).toHaveLength(1); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.tsx index 0a6a7891a782a..52fe8ed486dbb 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection.tsx @@ -5,28 +5,27 @@ * 2.0. */ -import React from 'react'; +import React, { useState } from 'react'; -import { i18n } from '@kbn/i18n'; - -import { EnterpriseSearchAnalyticsPageTemplate } from '../layout/page_template'; +import { EuiButton } from '@elastic/eui'; -import { AddAnalyticsCollectionForm } from './add_analytics_collection_form'; +import { i18n } from '@kbn/i18n'; -export const collectionsCreateBreadcrumbs = [ - i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.breadcrumb', { - defaultMessage: 'Create collection', - }), -]; +import { AddAnalyticsCollectionModal } from './add_analytics_collection_modal'; export const AddAnalyticsCollection: React.FC = () => { + const [isModalVisible, setIsModalVisible] = useState(false); + const closeModal = () => setIsModalVisible(false); + const showModal = () => setIsModalVisible(true); + return ( - - - + <> + + {i18n.translate('xpack.enterpriseSearch.analytics.collections.create.buttonTitle', { + defaultMessage: 'Create collection', + })} + + {isModalVisible && } + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.test.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.test.tsx index 3bf3cf0d4f721..0f8d3a66c66cf 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.test.tsx @@ -7,19 +7,18 @@ import '../../../__mocks__/shallow_useeffect.mock'; -import { setMockValues, setMockActions, mockKibanaValues } from '../../../__mocks__/kea_logic'; +import { setMockValues, setMockActions } from '../../../__mocks__/kea_logic'; import React from 'react'; import { shallow } from 'enzyme'; -import { EuiButtonEmpty, EuiFieldText, EuiForm } from '@elastic/eui'; +import { EuiFieldText, EuiForm, EuiFormRow } from '@elastic/eui'; import { AddAnalyticsCollectionForm } from './add_analytics_collection_form'; const mockValues = { canSubmit: true, - hasInputError: false, inputError: false, isLoading: false, name: 'test', @@ -31,7 +30,8 @@ const mockActions = { }; describe('AddAnalyticsCollectionForm', () => { - const { navigateToUrl } = mockKibanaValues; + const formId = 'addAnalyticsCollectionFormId'; + const collectionNameField = 'collectionNameField'; beforeEach(() => { jest.clearAllMocks(); @@ -41,25 +41,19 @@ describe('AddAnalyticsCollectionForm', () => { setMockValues(mockValues); setMockActions(mockActions); - const wrapper = shallow(); + const wrapper = shallow( + + ); expect(wrapper.find(EuiForm)).toHaveLength(1); }); - it('navigates back to root when cancel is clicked', () => { - setMockValues(mockValues); - setMockActions(mockActions); - - const wrapper = shallow(); - - wrapper.find(EuiButtonEmpty).simulate('click'); - expect(navigateToUrl).toHaveBeenCalledWith('/'); - }); - it('submit form will call create analytics collection action', () => { setMockValues(mockValues); setMockActions(mockActions); - const wrapper = shallow(); + const wrapper = shallow( + + ); wrapper.find(EuiForm).simulate('submit', { preventDefault: jest.fn() }); expect(mockActions.createAnalyticsCollection).toHaveBeenCalled(); @@ -69,11 +63,12 @@ describe('AddAnalyticsCollectionForm', () => { setMockValues({ ...mockValues, canSubmit: false, - hasInputError: true, }); setMockActions(mockActions); - const wrapper = shallow(); + const wrapper = shallow( + + ); wrapper.find(EuiForm).simulate('submit', { preventDefault: jest.fn() }); expect(mockActions.createAnalyticsCollection).not.toHaveBeenCalled(); @@ -83,9 +78,27 @@ describe('AddAnalyticsCollectionForm', () => { setMockValues(mockValues); setMockActions(mockActions); - const wrapper = shallow(); + const wrapper = shallow( + + ); wrapper.find(EuiFieldText).simulate('change', { target: { value: 'test' } }); expect(mockActions.setNameValue).toHaveBeenCalledWith('test'); }); + + it('should show error when input error exists', () => { + const inputErrorMock = 'Already exists'; + setMockValues({ + ...mockValues, + inputError: inputErrorMock, + }); + setMockActions(mockActions); + + const wrapper = shallow( + + ); + expect(wrapper.find(EuiFormRow).prop('error')).toEqual(inputErrorMock); + expect(wrapper.find(EuiFormRow).prop('isInvalid')).toBeTruthy(); + expect(wrapper.find(EuiFieldText).prop('isInvalid')).toBeTruthy(); + }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx index 86356275f5a3b..34a04d2470e62 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx @@ -9,103 +9,46 @@ import React from 'react'; import { useActions, useValues } from 'kea'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiPanel, - EuiTitle, - EuiSpacer, - EuiText, - EuiButtonEmpty, - EuiFormRow, - EuiFieldText, - EuiForm, - EuiButton, -} from '@elastic/eui'; - -import { i18n } from '@kbn/i18n'; - -import { KibanaLogic } from '../../../shared/kibana'; -import { ROOT_PATH } from '../../routes'; +import { EuiFormRow, EuiFieldText, EuiForm } from '@elastic/eui'; import { AddAnalyticsCollectionLogic } from './add_analytics_collection_logic'; -export const AddAnalyticsCollectionForm = () => { +interface AddAnalyticsCollectionForm { + collectionNameField: string; + formId: string; +} + +export const AddAnalyticsCollectionForm: React.FC = ({ + formId, + collectionNameField, +}) => { const { createAnalyticsCollection, setNameValue } = useActions(AddAnalyticsCollectionLogic); - const { name, isLoading, canSubmit } = useValues(AddAnalyticsCollectionLogic); - const { navigateToUrl } = useValues(KibanaLogic); + const { name, isLoading, canSubmit, inputError } = useValues(AddAnalyticsCollectionLogic); return ( - - - - -

- {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.title', { - defaultMessage: 'Create an analytics collection', - })} -

-
- - -

- {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle', { - defaultMessage: - 'An analytics collection provides a place to store the analytics events for any given search application you are building. Give it a memorable name below.', - })} -

-
- - { - e.preventDefault(); - if (canSubmit) { - createAnalyticsCollection(); - } - }} - > - - { - setNameValue(e.target.value); - }} - /> - - - - - { - navigateToUrl(ROOT_PATH); - }} - > - {i18n.translate( - 'xpack.enterpriseSearch.analytics.collectionsCreate.form.cancelButton', - { - defaultMessage: 'Cancel', - } - )} - - - - - {i18n.translate( - 'xpack.enterpriseSearch.analytics.collectionsCreate.form.continueButton', - { - defaultMessage: 'Continue', - } - )} - - - - -
-
-
+ { + e.preventDefault(); + if (canSubmit) { + createAnalyticsCollection(); + } + }} + > + + { + setNameValue(e.target.value); + }} + /> + + ); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.test.ts index 3c313c895adbb..16e77b0ae84e1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.test.ts @@ -8,6 +8,7 @@ import { LogicMounter, mockFlashMessageHelpers, + mockFlashMessagesActions, mockHttpValues, mockKibanaValues, } from '../../../__mocks__/kea_logic'; @@ -22,6 +23,7 @@ import { AddAnalyticsCollectionLogic } from './add_analytics_collection_logic'; describe('addAnalyticsCollectionLogic', () => { const { mount } = new LogicMounter(AddAnalyticsCollectionLogic); const { flashSuccessToast, flashAPIErrors } = mockFlashMessageHelpers; + const { setFlashMessages } = mockFlashMessagesActions; const { http } = mockHttpValues; beforeEach(() => { @@ -32,7 +34,11 @@ describe('addAnalyticsCollectionLogic', () => { it('has expected default values', () => { expect(AddAnalyticsCollectionLogic.values).toEqual({ canSubmit: false, + error: undefined, + inputError: null, isLoading: false, + isSuccess: false, + isSystemError: false, name: '', status: Status.IDLE, }); @@ -42,12 +48,14 @@ describe('addAnalyticsCollectionLogic', () => { describe('setNameValue', () => { it('should set name', () => { AddAnalyticsCollectionLogic.actions.setNameValue('valid'); - expect(AddAnalyticsCollectionLogic.values).toEqual({ - canSubmit: true, - isLoading: false, - name: 'valid', - status: Status.IDLE, - }); + expect(AddAnalyticsCollectionLogic.values.name).toEqual('valid'); + }); + }); + + describe('setInputError', () => { + it('should set error', () => { + AddAnalyticsCollectionLogic.actions.setInputError('invalid name'); + expect(AddAnalyticsCollectionLogic.values.inputError).toEqual('invalid name'); }); }); }); @@ -75,11 +83,33 @@ describe('addAnalyticsCollectionLogic', () => { }); describe('onApiError', () => { - it('should flash an error toast', () => { + it('should call setFlashMessages with an error when system error with message', () => { const httpError: HttpError = { body: { - error: 'Bad Request', - statusCode: 400, + error: 'Bad Gateway', + message: 'Something went wrong', + statusCode: 502, + }, + fetchOptions: {}, + request: {}, + } as HttpError; + AddAnalyticsCollectionLogic.actions.apiError(httpError); + + expect(flashAPIErrors).not.toHaveBeenCalled(); + expect(setFlashMessages).toHaveBeenCalledWith([ + { + description: 'Something went wrong', + message: 'Sorry, there was an error creating your collection.', + type: 'error', + }, + ]); + }); + + it('should flash a default error toast when system error without message', () => { + const httpError: HttpError = { + body: { + error: 'Bad Gateway', + statusCode: 502, }, fetchOptions: {}, request: {}, @@ -88,6 +118,25 @@ describe('addAnalyticsCollectionLogic', () => { expect(flashAPIErrors).toHaveBeenCalledWith(httpError); }); + + it('should set input error when is client error', () => { + const errorMessage = 'Collection already exists'; + const httpError: HttpError = { + body: { + error: 'Conflict', + message: errorMessage, + statusCode: 409, + }, + fetchOptions: {}, + request: {}, + } as HttpError; + AddAnalyticsCollectionLogic.actions.setInputError = jest.fn(); + AddAnalyticsCollectionLogic.actions.apiError(httpError); + + expect(AddAnalyticsCollectionLogic.actions.setInputError).toHaveBeenCalledWith( + errorMessage + ); + }); }); describe('createAnalyticsCollection', () => { @@ -105,7 +154,7 @@ describe('addAnalyticsCollectionLogic', () => { }); describe('selectors', () => { - describe('loading & status', () => { + describe('status', () => { it('updates when makeRequest triggered', () => { const promise = Promise.resolve({ name: 'result' }); http.post.mockReturnValue(promise); @@ -123,9 +172,38 @@ describe('addAnalyticsCollectionLogic', () => { name: 'test', }); - expect(AddAnalyticsCollectionLogic.values.isLoading).toBe(true); + expect(AddAnalyticsCollectionLogic.values.isSuccess).toBe(true); expect(AddAnalyticsCollectionLogic.values.status).toBe(Status.SUCCESS); }); }); + + describe('isSystemError', () => { + it('set true when error is 50x', () => { + expect(AddAnalyticsCollectionLogic.values.isSystemError).toBe(false); + AddAnalyticsCollectionLogic.actions.apiError({ + body: { + error: 'Bad Gateway', + message: 'Something went wrong', + statusCode: 502, + }, + } as HttpError); + + expect(AddAnalyticsCollectionLogic.values.isSystemError).toBe(true); + expect(AddAnalyticsCollectionLogic.values.status).toBe(Status.ERROR); + }); + + it('keep false if error code is 40x', () => { + AddAnalyticsCollectionLogic.actions.apiError({ + body: { + error: 'Conflict', + message: 'Something went wrong', + statusCode: 409, + }, + } as HttpError); + + expect(AddAnalyticsCollectionLogic.values.isSystemError).toBe(false); + expect(AddAnalyticsCollectionLogic.values.status).toBe(Status.ERROR); + }); + }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.ts index 1e97b48975d68..95614426e2941 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_logic.ts @@ -9,11 +9,15 @@ import { kea, MakeLogicType } from 'kea'; import { i18n } from '@kbn/i18n'; -import { Status } from '../../../../../common/types/api'; +import { HttpError, Status } from '../../../../../common/types/api'; import { Actions } from '../../../shared/api_logic/create_api_logic'; import { generateEncodedPath } from '../../../shared/encode_path_params'; -import { flashSuccessToast } from '../../../shared/flash_messages'; +import { + flashAPIErrors, + FlashMessagesLogic, + flashSuccessToast, +} from '../../../shared/flash_messages'; import { KibanaLogic } from '../../../shared/kibana'; import { AddAnalyticsCollectionsAPILogic, @@ -22,6 +26,8 @@ import { } from '../../api/add_analytics_collection/add_analytics_collection_api_logic'; import { COLLECTION_VIEW_PATH } from '../../routes'; +const SERVER_ERROR_CODE = 500; + export interface AddAnalyticsCollectionsActions { apiError: Actions< AddAnalyticsCollectionApiLogicArgs, @@ -36,12 +42,17 @@ export interface AddAnalyticsCollectionsActions { AddAnalyticsCollectionApiLogicArgs, AddAnalyticsCollectionApiLogicResponse >['makeRequest']; + setInputError: (inputError: string | null) => { inputError: string | null }; setNameValue(name: string): { name: string }; } interface AddAnalyticsCollectionValues { canSubmit: boolean; + error: HttpError | undefined; + inputError: string | null; isLoading: boolean; + isSuccess: boolean; + isSystemError: boolean; name: string; status: Status; } @@ -51,16 +62,37 @@ export const AddAnalyticsCollectionLogic = kea< >({ actions: { createAnalyticsCollection: () => {}, - setInputError: (inputError: string | boolean) => ({ inputError }), + setInputError: (inputError) => ({ inputError }), setNameValue: (name: string) => ({ name }), }, connect: { actions: [AddAnalyticsCollectionsAPILogic, ['apiError', 'apiSuccess', 'makeRequest']], - values: [AddAnalyticsCollectionsAPILogic, ['status']], + values: [AddAnalyticsCollectionsAPILogic, ['status', 'error']], }, listeners: ({ values, actions }) => ({ - apiSuccess: async ({ name, id }, breakpoint) => { - // Wait for propagation of the new collection + apiError: async (error) => { + if (values.isSystemError) { + if (error?.body?.message) { + FlashMessagesLogic.actions.setFlashMessages([ + { + description: error.body.message, + message: i18n.translate( + 'xpack.enterpriseSearch.analytics.collectionsCreate.action.systemErrorMessage', + { + defaultMessage: 'Sorry, there was an error creating your collection.', + } + ), + type: 'error', + }, + ]); + } else { + flashAPIErrors(error); + } + } else { + actions.setInputError(error?.body?.message || null); + } + }, + apiSuccess: async ({ name, id }) => { flashSuccessToast( i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.action.successMessage', { defaultMessage: "Successfully added collection '{name}'", @@ -69,7 +101,6 @@ export const AddAnalyticsCollectionLogic = kea< }, }) ); - await breakpoint(1000); KibanaLogic.values.navigateToUrl( generateEncodedPath(COLLECTION_VIEW_PATH, { id, @@ -84,6 +115,13 @@ export const AddAnalyticsCollectionLogic = kea< }), path: ['enterprise_search', 'analytics', 'add_analytics_collection'], reducers: { + inputError: [ + null, + { + setInputError: (_, { inputError }) => inputError, + setNameValue: () => null, + }, + ], name: [ '', { @@ -96,10 +134,12 @@ export const AddAnalyticsCollectionLogic = kea< () => [selectors.isLoading, selectors.name], (isLoading, name) => !isLoading && name.length > 0, ], - isLoading: [ - () => [selectors.status], - // includes success to include the redirect wait time - (status: Status) => [Status.LOADING, Status.SUCCESS].includes(status), + isLoading: [() => [selectors.status], (status: Status) => status === Status.LOADING], + isSuccess: [() => [selectors.status], (status: Status) => status === Status.SUCCESS], + isSystemError: [ + () => [selectors.status, selectors.error], + (status: Status, error?: HttpError) => + Boolean(status === Status.ERROR && (error?.body?.statusCode || 0) >= SERVER_ERROR_CODE), ], }), }); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.test.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.test.tsx new file mode 100644 index 0000000000000..7744df7432060 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.test.tsx @@ -0,0 +1,79 @@ +/* + * Copyright 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 '../../../__mocks__/shallow_useeffect.mock'; + +import { setMockValues, setMockActions } from '../../../__mocks__/kea_logic'; + +import React from 'react'; + +import { shallow } from 'enzyme'; + +import { EuiButton, EuiModal } from '@elastic/eui'; + +import { AddAnalyticsCollectionForm } from './add_analytics_collection_form'; + +import { AddAnalyticsCollectionModal } from './add_analytics_collection_modal'; + +const mockValues = { + canSubmit: true, + isLoading: false, + isSuccess: false, + isSystemError: false, +}; + +const mockActions = { + createAnalyticsCollection: jest.fn(), + setNameValue: jest.fn(), +}; + +describe('AddAnalyticsCollectionModal', () => { + const mockOnClose = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders', () => { + setMockValues(mockValues); + setMockActions(mockActions); + + const wrapper = shallow(); + expect(wrapper.find(EuiModal)).toHaveLength(1); + expect(wrapper.find(AddAnalyticsCollectionForm)).toHaveLength(1); + }); + + it('successful creation will call onClose action', () => { + setMockValues({ ...mockValues, isSuccess: true }); + setMockActions(mockActions); + + shallow(); + + expect(mockOnClose).toHaveBeenCalled(); + }); + + it('system error will call onClose action', () => { + setMockValues({ ...mockValues, isSystemError: true }); + setMockActions(mockActions); + + shallow(); + + expect(mockOnClose).toHaveBeenCalled(); + }); + + it('disabled confirmed button when canSubmit is false', () => { + setMockValues({ + ...mockValues, + canSubmit: false, + }); + setMockActions(mockActions); + + const wrapper = shallow(); + + expect(wrapper.find(EuiButton).prop('isDisabled')).toBeTruthy(); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.tsx new file mode 100644 index 0000000000000..a13fd20760c11 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_modal.tsx @@ -0,0 +1,105 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect } from 'react'; + +import { useValues } from 'kea'; + +import { + EuiButton, + EuiButtonEmpty, + EuiFlexItem, + EuiModal, + EuiModalBody, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, + EuiSpacer, + EuiText, + useGeneratedHtmlId, +} from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import { AddAnalyticsCollectionForm } from './add_analytics_collection_form'; + +import { AddAnalyticsCollectionLogic } from './add_analytics_collection_logic'; + +const collectionNameField = 'collection-name'; +const minModalWidth = 400; + +interface AddAnalyticsCollectionModalProps { + onClose: () => void; +} + +export const AddAnalyticsCollectionModal: React.FC = ({ + onClose, +}) => { + const { isLoading, isSuccess, isSystemError, canSubmit } = useValues(AddAnalyticsCollectionLogic); + const modalFormId = useGeneratedHtmlId({ prefix: 'createAnalyticsCollection' }); + + useEffect(() => { + if (isSuccess || isSystemError) { + onClose(); + } + }, [isSuccess, isSystemError]); + + return ( + + + + + {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.title', { + defaultMessage: 'Name your Collection', + })} + + + +

+ {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle', { + defaultMessage: + "Consider carefully what you want to name your Collection. You can't rename it later.", + })} +

+
+
+
+ + + + + + + + {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.cancelButton', { + defaultMessage: 'Cancel', + })} + + + + {i18n.translate('xpack.enterpriseSearch.analytics.collectionsCreate.form.createButton', { + defaultMessage: 'Create', + })} + + +
+ ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx index 17e89d97195a2..a91bc4a9db079 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_collection_view/analytics_collection_view.tsx @@ -26,8 +26,8 @@ import { RedirectAppLinks } from '@kbn/kibana-react-plugin/public'; import { generateEncodedPath } from '../../../shared/encode_path_params'; import { KibanaLogic } from '../../../shared/kibana'; -import { EuiButtonTo } from '../../../shared/react_router_helpers'; -import { COLLECTION_CREATION_PATH, COLLECTION_VIEW_PATH } from '../../routes'; +import { COLLECTION_VIEW_PATH } from '../../routes'; +import { AddAnalyticsCollection } from '../add_analytics_collections/add_analytics_collection'; import { EnterpriseSearchAnalyticsPageTemplate } from '../layout/page_template'; @@ -157,14 +157,7 @@ export const AnalyticsCollectionView: React.FC = () => { - - {i18n.translate( - 'xpack.enterpriseSearch.analytics.collections.collectionsView.create.buttonTitle', - { - defaultMessage: 'Create new collection', - } - )} - + )} @@ -204,16 +197,7 @@ export const AnalyticsCollectionView: React.FC = () => { )}

} - actions={[ - - {i18n.translate( - 'xpack.enterpriseSearch.analytics.collections.collectionsView.create.buttonTitle', - { - defaultMessage: 'Create new collection', - } - )} - , - ]} + actions={[]} /> )} diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview.tsx index 39ab22a675c42..9fb7bfa4b7623 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview.tsx @@ -10,10 +10,10 @@ import React, { useEffect } from 'react'; import { useActions, useValues } from 'kea'; import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiTitle } from '@elastic/eui'; + import { i18n } from '@kbn/i18n'; -import { EuiButtonTo } from '../../../shared/react_router_helpers'; -import { COLLECTION_CREATION_PATH } from '../../routes'; +import { AddAnalyticsCollection } from '../add_analytics_collections/add_analytics_collection'; import { EnterpriseSearchAnalyticsPageTemplate } from '../layout/page_template'; @@ -60,11 +60,7 @@ export const AnalyticsOverview: React.FC = () => { - - {i18n.translate('xpack.enterpriseSearch.analytics.collections.create.buttonTitle', { - defaultMessage: 'Create new collection', - })} - + )} @@ -94,13 +90,7 @@ export const AnalyticsOverview: React.FC = () => { )}

} - actions={[ - - {i18n.translate('xpack.enterpriseSearch.analytics.collections.create.buttonTitle', { - defaultMessage: 'Create new collection', - })} - , - ]} + actions={[]} /> ) : ( diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/index.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/index.tsx index 092129e17dd24..5e4ffd15d2aa7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/index.tsx @@ -14,12 +14,10 @@ import { isVersionMismatch } from '../../../common/is_version_mismatch'; import { InitialAppData } from '../../../common/types'; import { VersionMismatchPage } from '../shared/version_mismatch'; -import { AddAnalyticsCollection } from './components/add_analytics_collections/add_analytics_collection'; - import { AnalyticsCollectionView } from './components/analytics_collection_view/analytics_collection_view'; import { AnalyticsOverview } from './components/analytics_overview/analytics_overview'; -import { ROOT_PATH, COLLECTION_CREATION_PATH, COLLECTION_VIEW_PATH } from './routes'; +import { ROOT_PATH, COLLECTION_VIEW_PATH } from './routes'; export const Analytics: React.FC = (props) => { const { enterpriseSearchVersion, kibanaVersion } = props; @@ -37,9 +35,6 @@ export const Analytics: React.FC = (props) => { )} - - - diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/routes.ts b/x-pack/plugins/enterprise_search/public/applications/analytics/routes.ts index f21f3de52f086..b213203c574e1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/routes.ts +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/routes.ts @@ -7,5 +7,4 @@ export const ROOT_PATH = '/'; export const COLLECTIONS_PATH = '/collections'; -export const COLLECTION_CREATION_PATH = `${COLLECTIONS_PATH}/new`; export const COLLECTION_VIEW_PATH = `${COLLECTIONS_PATH}/:id/:section`; diff --git a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts index 9306a1958956a..724e159618df6 100644 --- a/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts +++ b/x-pack/plugins/enterprise_search/server/routes/enterprise_search/analytics.ts @@ -124,7 +124,7 @@ export function registerAnalyticsRoutes({ message: i18n.translate( 'xpack.enterpriseSearch.server.routes.addAnalyticsCollection.analyticsCollectionExistsError', { - defaultMessage: 'Analytics collection already exists', + defaultMessage: 'Collection name already exists. Choose another name.', } ), response, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 554eb0c4071b4..53ee33d6e9e93 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10734,7 +10734,6 @@ "xpack.enterpriseSearch.analytics.collections.actions.columnTitle": "Actions", "xpack.enterpriseSearch.analytics.collections.collectionsView.collectionNotFoundState.headingTitle": "Vous avez peut-être supprimé cette collection d'analyses", "xpack.enterpriseSearch.analytics.collections.collectionsView.collectionNotFoundState.subHeading": "Une collection d'analyse permet de stocker les événements d'analyse pour toute application de recherche que vous créez. Créez une nouvelle collection pour commencer.", - "xpack.enterpriseSearch.analytics.collections.collectionsView.create.buttonTitle": "Créer une nouvelle collection", "xpack.enterpriseSearch.analytics.collections.collectionsView.eventsTab.columns.eventName": "Nom de l'événement", "xpack.enterpriseSearch.analytics.collections.collectionsView.eventsTab.columns.userUuid": "UUID d'utilisateur", "xpack.enterpriseSearch.analytics.collections.collectionsView.headingTitle": "Collections", @@ -10748,9 +10747,7 @@ "xpack.enterpriseSearch.analytics.collections.pageDescription": "Tableaux de bord et outils permettant de visualiser le comportement des utilisateurs finaux et de mesurer les performances de vos applications de recherche. Suivez les tendances sur la durée, identifier et examinez les anomalies, et effectuez des optimisations.", "xpack.enterpriseSearch.analytics.collections.pageTitle": "Analyse comportementale", "xpack.enterpriseSearch.analytics.collectionsCreate.action.successMessage": "Collection \"{name}\" ajoutée avec succès", - "xpack.enterpriseSearch.analytics.collectionsCreate.breadcrumb": "Créer une collection", "xpack.enterpriseSearch.analytics.collectionsCreate.form.cancelButton": "Annuler", - "xpack.enterpriseSearch.analytics.collectionsCreate.form.continueButton": "Continuer", "xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle": "Une collection d'analyse permet de stocker les événements d'analyse pour toute application de recherche que vous créez. Affectez-lui un nom facile à retenir ci-dessous.", "xpack.enterpriseSearch.analytics.collectionsCreate.form.title": "Créer une collection d'analyses", "xpack.enterpriseSearch.analytics.collectionsDelete.action.successMessage": "La collection a été supprimée avec succès", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 360023ce62df0..defeb701bde1c 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10721,7 +10721,6 @@ "xpack.enterpriseSearch.analytics.collections.actions.columnTitle": "アクション", "xpack.enterpriseSearch.analytics.collections.collectionsView.collectionNotFoundState.headingTitle": "この分析コレクションを削除した可能性があります", "xpack.enterpriseSearch.analytics.collections.collectionsView.collectionNotFoundState.subHeading": "分析コレクションには、構築している特定の検索アプリケーションの分析イベントを格納できます。開始するには、新しいコレクションを作成してください。", - "xpack.enterpriseSearch.analytics.collections.collectionsView.create.buttonTitle": "新しいコレクションを作成", "xpack.enterpriseSearch.analytics.collections.collectionsView.eventsTab.columns.eventName": "イベント名", "xpack.enterpriseSearch.analytics.collections.collectionsView.eventsTab.columns.userUuid": "ユーザーUUID", "xpack.enterpriseSearch.analytics.collections.collectionsView.headingTitle": "コレクション", @@ -10735,9 +10734,7 @@ "xpack.enterpriseSearch.analytics.collections.pageDescription": "エンドユーザーの行動を可視化し、検索アプリケーションのパフォーマンスを測定するためのダッシュボードとツール。経時的な傾向を追跡し、異常を特定して調査し、最適化を行います。", "xpack.enterpriseSearch.analytics.collections.pageTitle": "行動分析", "xpack.enterpriseSearch.analytics.collectionsCreate.action.successMessage": "コレクション'{name}'が正常に追加されました", - "xpack.enterpriseSearch.analytics.collectionsCreate.breadcrumb": "コレクションの作成", "xpack.enterpriseSearch.analytics.collectionsCreate.form.cancelButton": "キャンセル", - "xpack.enterpriseSearch.analytics.collectionsCreate.form.continueButton": "続行", "xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle": "分析コレクションには、構築している特定の検索アプリケーションの分析イベントを格納できます。以下で覚えやすい名前を指定してください。", "xpack.enterpriseSearch.analytics.collectionsCreate.form.title": "分析コレクションを作成", "xpack.enterpriseSearch.analytics.collectionsDelete.action.successMessage": "コレクションが正常に削除されました", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a9fba2ef87953..b400c48ab649b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10738,7 +10738,6 @@ "xpack.enterpriseSearch.analytics.collections.actions.columnTitle": "操作", "xpack.enterpriseSearch.analytics.collections.collectionsView.collectionNotFoundState.headingTitle": "您可能已删除此分析集合", "xpack.enterpriseSearch.analytics.collections.collectionsView.collectionNotFoundState.subHeading": "分析集合为您正在构建的任何给定搜索应用程序提供了一个用于存储分析事件的位置。创建新集合以开始。", - "xpack.enterpriseSearch.analytics.collections.collectionsView.create.buttonTitle": "创建新集合", "xpack.enterpriseSearch.analytics.collections.collectionsView.eventsTab.columns.eventName": "事件名称", "xpack.enterpriseSearch.analytics.collections.collectionsView.eventsTab.columns.userUuid": "用户 UUID", "xpack.enterpriseSearch.analytics.collections.collectionsView.headingTitle": "集合", @@ -10752,9 +10751,7 @@ "xpack.enterpriseSearch.analytics.collections.pageDescription": "用于对最终用户行为进行可视化并评估搜索应用程序性能的仪表板和工具。跟踪一段时间的趋势,识别和调查异常,并进行优化。", "xpack.enterpriseSearch.analytics.collections.pageTitle": "行为分析", "xpack.enterpriseSearch.analytics.collectionsCreate.action.successMessage": "已成功添加集合“{name}”", - "xpack.enterpriseSearch.analytics.collectionsCreate.breadcrumb": "创建集合", "xpack.enterpriseSearch.analytics.collectionsCreate.form.cancelButton": "取消", - "xpack.enterpriseSearch.analytics.collectionsCreate.form.continueButton": "继续", "xpack.enterpriseSearch.analytics.collectionsCreate.form.subtitle": "分析集合为您正在构建的任何给定搜索应用程序提供了一个用于存储分析事件的位置。在下面为其提供好记的名称。", "xpack.enterpriseSearch.analytics.collectionsCreate.form.title": "创建分析集合", "xpack.enterpriseSearch.analytics.collectionsDelete.action.successMessage": "已成功删除此集合", From 170dadeb56cfba5578f930e92245bb154a6a5e4c Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Mon, 20 Feb 2023 16:30:13 +0100 Subject: [PATCH 127/210] [ML] Fix trained model stats layout (#151606) ## Summary Fixes the expanded row layout for trained model stats. Before: image After: image --- .../model_management/expanded_row.tsx | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx b/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx index 99dc3f687a7e0..4d6a3c744408a 100644 --- a/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx +++ b/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx @@ -313,23 +313,25 @@ export const ExpandedRow: FC = ({ item }) => {
+ {!!modelItems?.length ? ( + <> + + +
+ +
+
+ + +
+ + + ) : null} + - {!!modelItems?.length ? ( - - - -
- -
-
- - -
-
- ) : null} {stats.inference_stats ? ( From 45c00c6141c5a447dd7bb4f6b31930d00bc02374 Mon Sep 17 00:00:00 2001 From: Justin Kambic Date: Mon, 20 Feb 2023 10:37:49 -0500 Subject: [PATCH 128/210] [Synthetics] Add exponential backoff to screenshot image API call (#150494) Co-authored-by: Shahzad --- .../browser_steps_list.tsx | 4 +- .../use_retrieve_step_image.ts | 2 +- .../journey_step_screenshot_container.tsx | 4 +- .../hooks/use_browser_run_once_monitors.ts | 4 +- .../hooks/use_simple_run_once_monitors.ts | 2 +- .../test_now_mode/hooks/use_tick_tick.ts | 10 +- .../state/browser_journey/api.test.ts | 153 ++++++++++++++++++ .../synthetics/state/browser_journey/api.ts | 20 ++- 8 files changed, 178 insertions(+), 21 deletions(-) create mode 100644 x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx index a343a67021f0b..c90a00710f32f 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/browser_steps_list.tsx @@ -119,8 +119,8 @@ export const BrowserStepsList = ({ checkGroup={step.monitor.check_group} initialStepNumber={step.synthetics?.step?.index} stepStatus={step.synthetics.payload?.status} - allStepsLoaded={true} - retryFetchOnRevisit={false} + allStepsLoaded={!loading} + retryFetchOnRevisit={true} size={screenshotImageSize} /> ), diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts index 98d532b279a8c..d2a6d19355617 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/monitor_test_result/use_retrieve_step_image.ts @@ -42,7 +42,7 @@ export const useRetrieveStepImage = ({ /** * Whether to retry screenshot image fetch on revisit (when intersection change triggers). * Will only re-fetch if an image fetch wasn't successful in previous attempts. - * Set this to `true` fro "Run Once" / "Test Now" modes + * Set this to `true` from "Run Once" / "Test Now" modes * */ retryFetchOnRevisit: boolean; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx index 0527b6ad8c67a..57533e14ab7ad 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/screenshot/journey_step_screenshot_container.tsx @@ -46,11 +46,11 @@ export const JourneyStepScreenshotContainer = ({ const intersection = useIntersection(intersectionRef, { root: null, rootMargin: '0px', - threshold: 1, + threshold: 0.1, }); const imageResult = useRetrieveStepImage({ - hasIntersected: Boolean(intersection && intersection.intersectionRatio === 1), + hasIntersected: Boolean(intersection && intersection.intersectionRatio > 0), stepStatus, imgPath, retryFetchOnRevisit, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts index cc45ef79db905..4daea98b4e923 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_browser_run_once_monitors.ts @@ -66,15 +66,13 @@ export const useBrowserEsResults = ({ export const useBrowserRunOnceMonitors = ({ testRunId, skipDetails = false, - refresh = true, expectSummaryDocs, }: { testRunId: string; - refresh?: boolean; skipDetails?: boolean; expectSummaryDocs: number; }) => { - const { refreshTimer, lastRefresh } = useTickTick(5 * 1000, refresh); + const { refreshTimer, lastRefresh } = useTickTick(5 * 1000); const [checkGroupResults, setCheckGroupResults] = useState(() => { return new Array(expectSummaryDocs) diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts index e6cb731c605de..46d619798b8f7 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_simple_run_once_monitors.ts @@ -19,7 +19,7 @@ export const useSimpleRunOnceMonitors = ({ expectSummaryDocs: number; testRunId: string; }) => { - const { refreshTimer, lastRefresh } = useTickTick(2 * 1000, false); + const { refreshTimer, lastRefresh } = useTickTick(2 * 1000); const { data, loading } = useEsSearch( createEsParams({ diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts index c0e19e2450a71..de67aee828c91 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/test_now_mode/hooks/use_tick_tick.ts @@ -5,19 +5,13 @@ * 2.0. */ -import { useEffect, useState, useContext } from 'react'; -import { SyntheticsRefreshContext } from '../../../contexts'; - -export function useTickTick(interval?: number, refresh = true) { - const { refreshApp } = useContext(SyntheticsRefreshContext); +import { useEffect, useState } from 'react'; +export function useTickTick(interval?: number) { const [nextTick, setNextTick] = useState(Date.now()); const [tickTick] = useState(() => setInterval(() => { - if (refresh) { - refreshApp(); - } setNextTick(Date.now()); }, interval ?? 5 * 1000) ); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts new file mode 100644 index 0000000000000..7e5fd5aa8de05 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.test.ts @@ -0,0 +1,153 @@ +/* + * Copyright 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 { getJourneyScreenshot } from './api'; + +describe('getJourneyScreenshot', () => { + const url = 'http://localhost:5601/internal/uptime/journey/screenshot/checkgroup/step'; + it('returns null if the response status is not 200', async () => { + const mockFetch = jest.fn().mockRejectedValueOnce({ status: 404 }); + (global as any).fetch = mockFetch; + + const result = await getJourneyScreenshot(url); + expect(result).toBeNull(); + }); + + it('returns a ref if `content-type` is application/json', async () => { + const mockResponse = { + headers: { + get: jest.fn().mockImplementation((header) => { + if (header === 'content-type') return 'application/json'; + if (header === 'caption-name') return 'stepName'; + if (header === 'max-steps') return '0'; + }), + }, + json: jest.fn().mockResolvedValue({}), + status: 200, + }; + + const mockFetch = jest.fn().mockResolvedValue(mockResponse); + global.fetch = mockFetch; + + const result = await getJourneyScreenshot('imgSrc'); + expect(result).toEqual({ + ref: {}, + stepName: 'stepName', + maxSteps: 0, + }); + }); + + it('returns a blob when `content-type` is not application/json', async () => { + const mockResponse = { + headers: { + get: jest.fn().mockImplementation((header) => { + if (header === 'content-type') return 'image/jpeg'; + if (header === 'caption-name') return 'stepName'; + if (header === 'max-steps') return '0'; + }), + }, + blob: jest.fn().mockResolvedValue(new Blob()), + status: 200, + }; + + const mockFetch = jest.fn().mockResolvedValue(mockResponse); + global.fetch = mockFetch; + + const result = await getJourneyScreenshot(url); + expect(result).toEqual({ + src: expect.any(String), + stepName: 'stepName', + maxSteps: 0, + }); + }); + + it('does not retry if `shouldBackoff` is false', async () => { + const mockResponse = { + headers: { + get: jest.fn().mockImplementation((header) => { + if (header === 'content-type') return 'image/jpeg'; + if (header === 'caption-name') return 'stepName'; + if (header === 'max-steps') return '0'; + }), + }, + blob: jest.fn().mockResolvedValue(new Blob()), + status: 404, + }; + + const mockFetch = jest.fn().mockResolvedValue(mockResponse); + global.fetch = mockFetch; + + const result = await getJourneyScreenshot(url, false); + expect(result).toBeNull(); + expect(mockFetch).toHaveBeenCalledTimes(1); + }); + + it('will retry `n` times', async () => { + const mockFailResponse = { + headers: { + get: jest.fn().mockImplementation((header) => { + if (header === 'content-type') return 'image/jpeg'; + if (header === 'caption-name') return 'stepName'; + if (header === 'max-steps') return '0'; + }), + }, + blob: jest.fn().mockResolvedValue(new Blob()), + status: 404, + }; + const mockSuccessResponse = { + headers: { + get: jest.fn().mockImplementation((header) => { + if (header === 'content-type') return 'application/json'; + if (header === 'caption-name') return 'stepName'; + if (header === 'max-steps') return '0'; + }), + }, + json: jest.fn().mockResolvedValue({}), + status: 200, + }; + let fetchCount = 0; + + const mockFetch = jest.fn().mockImplementation(() => { + fetchCount++; + if (fetchCount > 4) { + return mockSuccessResponse; + } + return mockFailResponse; + }); + global.fetch = mockFetch; + + const result = await getJourneyScreenshot(url); + expect(result).toEqual({ + ref: {}, + stepName: 'stepName', + maxSteps: 0, + }); + }); + + it('will return null when retry is exhausted', async () => { + const maxRetry = 3; + const initialBackoff = 10; + const mockResponse = { + headers: { + get: jest.fn().mockImplementation((header) => { + if (header === 'content-type') return 'image/jpeg'; + if (header === 'caption-name') return 'stepName'; + if (header === 'max-steps') return '0'; + }), + }, + blob: jest.fn().mockResolvedValue(new Blob()), + status: 404, + }; + + const mockFetch = jest.fn().mockReturnValue(mockResponse); + global.fetch = mockFetch; + + const result = await getJourneyScreenshot(url, true, maxRetry, initialBackoff); + expect(result).toBeNull(); + expect(mockFetch).toBeCalledTimes(maxRetry + 1); + }); +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts index 6759bee3b1fe3..33ed12db4b5d3 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/state/browser_journey/api.ts @@ -72,14 +72,26 @@ export async function fetchLastSuccessfulCheck({ } export async function getJourneyScreenshot( - imgSrc: string + imgSrc: string, + shouldBackoff = true, + maxRetry = 15, + initialBackoff = 100 ): Promise { try { - const imgRequest = new Request(imgSrc); + let retryCount = 0; - const response = await fetch(imgRequest); + let response: Response | null = null; + let backoff = initialBackoff; + while (response?.status !== 200) { + const imgRequest = new Request(imgSrc); - if (response.status !== 200) { + response = await fetch(imgRequest); + if (!shouldBackoff || retryCount >= maxRetry || response.status !== 404) break; + await new Promise((r) => setTimeout(r, (backoff *= 2))); + retryCount++; + } + + if (response?.status !== 200) { return null; } From c5b4e6dad41eee8ac99c8b85fd107260ff7072a8 Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Mon, 20 Feb 2023 15:43:25 +0000 Subject: [PATCH 129/210] [Fleet][Bugfix] Fix "dataset cannot be modified" error when editing input package policy (#151618) ## Summary Originally reported by @ishleenk17, when editing a package policy we were always getting "Dataset cannot be modified". The issue was the prepare function wasn't being called for the edit page, I have added some debug logs. Skipping release ntoes as this bug was introduced in 8.7: https://github.com/elastic/kibana/pull/148772 --- .../edit_package_policy_page/hooks/use_package_policy.tsx | 5 ++++- x-pack/plugins/fleet/server/services/package_policy.ts | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx index 34f30e169cd97..240c09c7777eb 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy.tsx @@ -36,6 +36,7 @@ import { } from '../../create_package_policy_page/services'; import type { PackagePolicyFormState } from '../../create_package_policy_page/types'; import { fixApmDurationVars, hasUpgradeAvailable } from '../utils'; +import { prepareInputPackagePolicyDataset } from '../../create_package_policy_page/services/prepare_input_pkg_policy_dataset'; function mergeVars( packageVars?: PackagePolicyConfigRecord, @@ -94,7 +95,9 @@ export function usePackagePolicyWithRelatedData( const savePackagePolicy = async () => { setFormState('LOADING'); - const { elasticsearch, ...restPackagePolicy } = packagePolicy; // ignore 'elasticsearch' property since it fails route validation + const { + policy: { elasticsearch, ...restPackagePolicy }, + } = await prepareInputPackagePolicyDataset(packagePolicy); const result = await sendUpdatePackagePolicy(packagePolicyId, restPackagePolicy); setFormState('SUBMITTED'); return result; diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index 5eacf8dd0c3a8..282cb85b2b895 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -2151,6 +2151,14 @@ export function _validateRestrictedFieldsNotModifiedOrThrow(opts: { oldStream?.vars['data_stream.dataset']?.value !== stream?.vars?.['data_stream.dataset']?.value ) { + // seeing this error in dev? Package policy must be called with prepareInputPackagePolicyDataset function first in UI code + appContextService + .getLogger() + .debug( + `Rejecting package policy update due to dataset change, old val '${ + oldStream?.vars['data_stream.dataset']?.value + }, new val '${JSON.stringify(stream?.vars?.['data_stream.dataset']?.value)}'` + ); throw new PackagePolicyValidationError( i18n.translate('xpack.fleet.updatePackagePolicy.datasetCannotBeModified', { defaultMessage: From ffd607295e0e6afb429692e703aab4085dabbdc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Mon, 20 Feb 2023 16:07:14 +0000 Subject: [PATCH 130/210] =?UTF-8?q?[Content=20management]=C2=A0RPC=20layer?= =?UTF-8?q?=20(#151264)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content_management/common/index.ts | 7 +- src/plugins/content_management/common/rpc.ts | 148 ----------- .../common/rpc/constants.ts | 11 + .../content_management/common/rpc/create.ts | 33 +++ .../content_management/common/rpc/delete.ts | 28 +++ .../content_management/common/rpc/get.ts | 29 +++ .../content_management/common/rpc/index.ts | 18 ++ .../content_management/common/rpc/rpc.ts | 25 ++ .../content_management/common/rpc/search.ts | 33 +++ .../content_management/common/rpc/types.ts | 13 + .../content_management/common/rpc/update.ts | 35 +++ .../content_client/content_client.test.ts | 20 +- .../public/content_client/content_client.tsx | 24 +- .../content_client_mutation_hooks.test.tsx | 6 +- .../content_client_query_hooks.test.tsx | 8 +- .../content_client_query_hooks.tsx | 7 +- .../public/crud_client/crud_client.ts | 4 +- .../public/rpc_client/rpc_client.ts | 14 +- .../server/core/core.test.ts | 45 ++-- .../content_management/server/core/index.ts | 4 +- .../server/core/mocks/in_memory_storage.ts | 20 +- .../server/core/mocks/index.ts | 4 +- .../content_management/server/core/types.ts | 54 +++- .../content_management/server/plugin.test.ts | 185 ++++++++++++++ .../content_management/server/plugin.ts | 20 +- .../content_management/server/rpc/index.ts | 17 ++ .../server/rpc/procedures/all_procedures.ts | 20 ++ .../server/rpc/procedures/create.test.ts | 238 ++++++++++++++++++ .../server/rpc/procedures/create.ts | 66 +++++ .../server/rpc/procedures/get.test.ts | 200 +++++++++++++++ .../server/rpc/procedures/get.ts | 53 ++++ .../server/rpc/procedures/index.ts | 25 ++ .../server/rpc/routes/error_wrapper.ts | 25 ++ .../server/rpc/routes/index.ts | 9 + .../server/rpc/routes/routes.ts | 69 +++++ .../server/rpc/rpc_service.test.ts | 105 ++++++++ .../server/rpc/rpc_service.ts | 60 +++++ .../content_management/server/rpc/types.ts | 14 ++ .../content_management/server/utils.ts | 18 ++ 39 files changed, 1486 insertions(+), 228 deletions(-) delete mode 100644 src/plugins/content_management/common/rpc.ts create mode 100644 src/plugins/content_management/common/rpc/constants.ts create mode 100644 src/plugins/content_management/common/rpc/create.ts create mode 100644 src/plugins/content_management/common/rpc/delete.ts create mode 100644 src/plugins/content_management/common/rpc/get.ts create mode 100644 src/plugins/content_management/common/rpc/index.ts create mode 100644 src/plugins/content_management/common/rpc/rpc.ts create mode 100644 src/plugins/content_management/common/rpc/search.ts create mode 100644 src/plugins/content_management/common/rpc/types.ts create mode 100644 src/plugins/content_management/common/rpc/update.ts create mode 100644 src/plugins/content_management/server/plugin.test.ts create mode 100644 src/plugins/content_management/server/rpc/index.ts create mode 100644 src/plugins/content_management/server/rpc/procedures/all_procedures.ts create mode 100644 src/plugins/content_management/server/rpc/procedures/create.test.ts create mode 100644 src/plugins/content_management/server/rpc/procedures/create.ts create mode 100644 src/plugins/content_management/server/rpc/procedures/get.test.ts create mode 100644 src/plugins/content_management/server/rpc/procedures/get.ts create mode 100644 src/plugins/content_management/server/rpc/procedures/index.ts create mode 100644 src/plugins/content_management/server/rpc/routes/error_wrapper.ts create mode 100644 src/plugins/content_management/server/rpc/routes/index.ts create mode 100644 src/plugins/content_management/server/rpc/routes/routes.ts create mode 100644 src/plugins/content_management/server/rpc/rpc_service.test.ts create mode 100644 src/plugins/content_management/server/rpc/rpc_service.ts create mode 100644 src/plugins/content_management/server/rpc/types.ts create mode 100644 src/plugins/content_management/server/utils.ts diff --git a/src/plugins/content_management/common/index.ts b/src/plugins/content_management/common/index.ts index 1670078ae8d79..ab127d4691fb0 100644 --- a/src/plugins/content_management/common/index.ts +++ b/src/plugins/content_management/common/index.ts @@ -7,14 +7,15 @@ */ export { PLUGIN_ID, API_ENDPOINT } from './constants'; + export type { ProcedureSchemas, ProcedureName, GetIn, CreateIn, - SearchIn, - SearchOut, - DeleteIn, UpdateIn, + DeleteIn, + SearchIn, } from './rpc'; + export { procedureNames, schemas as rpcSchemas } from './rpc'; diff --git a/src/plugins/content_management/common/rpc.ts b/src/plugins/content_management/common/rpc.ts deleted file mode 100644 index aa0d6a3b2e2c8..0000000000000 --- a/src/plugins/content_management/common/rpc.ts +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { schema, Type } from '@kbn/config-schema'; - -export interface ProcedureSchemas { - in?: Type | false; - out?: Type | false; -} - -export const procedureNames = ['get', 'create', 'update', 'delete', 'search'] as const; - -export type ProcedureName = typeof procedureNames[number]; - -// --------------------------------- -// API -// --------------------------------- - -// ------- GET -------- -const getSchemas: ProcedureSchemas = { - in: schema.object( - { - contentType: schema.string(), - id: schema.string(), - options: schema.maybe(schema.object({}, { unknowns: 'allow' })), - }, - { unknowns: 'forbid' } - ), - // --> "out" will be specified by each storage layer - out: schema.maybe(schema.object({}, { unknowns: 'allow' })), -}; - -export interface GetIn { - id: string; - contentType: string; - options?: Options; -} - -// -- Create content -const createSchemas: ProcedureSchemas = { - in: schema.object( - { - contentType: schema.string(), - data: schema.object({}, { unknowns: 'allow' }), - options: schema.maybe(schema.object({}, { unknowns: 'allow' })), - }, - { unknowns: 'forbid' } - ), - // Here we could enforce that an "id" field is returned - out: schema.maybe(schema.object({}, { unknowns: 'allow' })), -}; - -export interface CreateIn< - T extends string = string, - Data extends object = Record, - Options extends object = any -> { - contentType: T; - data: Data; - options?: Options; -} - -// -- Update content -const updateSchemas: ProcedureSchemas = { - in: schema.object( - { - contentType: schema.string(), - data: schema.object({}, { unknowns: 'allow' }), - options: schema.maybe(schema.object({}, { unknowns: 'allow' })), - }, - { unknowns: 'forbid' } - ), - out: schema.maybe(schema.object({}, { unknowns: 'allow' })), -}; - -export interface UpdateIn< - T extends string = string, - Data extends object = Record, - Options extends object = any -> { - contentType: T; - data: Data; - options?: Options; -} - -// -- Delete content -const deleteSchemas: ProcedureSchemas = { - in: schema.object( - { - contentType: schema.string(), - data: schema.object({}, { unknowns: 'allow' }), - options: schema.maybe(schema.object({}, { unknowns: 'allow' })), - }, - { unknowns: 'forbid' } - ), - out: schema.maybe(schema.object({}, { unknowns: 'allow' })), -}; - -export interface DeleteIn< - T extends string = string, - Data extends object = Record, - Options extends object = any -> { - contentType: T; - data: Data; - options?: Options; -} - -// -- Search content -const searchSchemas: ProcedureSchemas = { - in: schema.object( - { - contentType: schema.string(), - data: schema.object({}, { unknowns: 'allow' }), - options: schema.maybe(schema.object({}, { unknowns: 'allow' })), - }, - { unknowns: 'forbid' } - ), - out: schema.object({ hits: schema.arrayOf(schema.object({}, { unknowns: 'allow' })) }), -}; - -export interface SearchIn< - T extends string = string, - Params extends object = Record, - Options extends object = any -> { - contentType: T; - params: Params; - options?: Options; -} - -export interface SearchOut> { - hits: Data[]; -} - -export const schemas: { - [key in ProcedureName]: ProcedureSchemas; -} = { - get: getSchemas, - create: createSchemas, - update: updateSchemas, - delete: deleteSchemas, - search: searchSchemas, -}; diff --git a/src/plugins/content_management/common/rpc/constants.ts b/src/plugins/content_management/common/rpc/constants.ts new file mode 100644 index 0000000000000..98d110ada127f --- /dev/null +++ b/src/plugins/content_management/common/rpc/constants.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 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 procedureNames = ['get', 'create', 'update', 'delete', 'search'] as const; + +export type ProcedureName = typeof procedureNames[number]; diff --git a/src/plugins/content_management/common/rpc/create.ts b/src/plugins/content_management/common/rpc/create.ts new file mode 100644 index 0000000000000..b5a7cfa7cd0e8 --- /dev/null +++ b/src/plugins/content_management/common/rpc/create.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 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 { schema } from '@kbn/config-schema'; + +import type { ProcedureSchemas } from './types'; + +export const createSchemas: ProcedureSchemas = { + in: schema.object( + { + contentTypeId: schema.string(), + // --> "data" to create a content will be defined by each content type + data: schema.recordOf(schema.string(), schema.any()), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface CreateIn< + T extends string = string, + Data extends object = object, + Options extends object = object +> { + contentTypeId: T; + data: Data; + options?: Options; +} diff --git a/src/plugins/content_management/common/rpc/delete.ts b/src/plugins/content_management/common/rpc/delete.ts new file mode 100644 index 0000000000000..261c6397ab578 --- /dev/null +++ b/src/plugins/content_management/common/rpc/delete.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { schema } from '@kbn/config-schema'; + +import type { ProcedureSchemas } from './types'; + +export const deleteSchemas: ProcedureSchemas = { + in: schema.object( + { + contentTypeId: schema.string(), + id: schema.string({ minLength: 1 }), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface DeleteIn { + contentTypeId: T; + id: string; + options?: Options; +} diff --git a/src/plugins/content_management/common/rpc/get.ts b/src/plugins/content_management/common/rpc/get.ts new file mode 100644 index 0000000000000..a408a5f1afe83 --- /dev/null +++ b/src/plugins/content_management/common/rpc/get.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 { schema } from '@kbn/config-schema'; + +import type { ProcedureSchemas } from './types'; + +export const getSchemas: ProcedureSchemas = { + in: schema.object( + { + contentTypeId: schema.string(), + id: schema.string({ minLength: 1 }), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + // --> "out" will be (optionally) specified by each storage layer + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface GetIn { + id: string; + contentTypeId: T; + options?: Options; +} diff --git a/src/plugins/content_management/common/rpc/index.ts b/src/plugins/content_management/common/rpc/index.ts new file mode 100644 index 0000000000000..961eecae0c1d3 --- /dev/null +++ b/src/plugins/content_management/common/rpc/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { schemas } from './rpc'; +export { procedureNames } from './constants'; + +export type { GetIn } from './get'; +export type { CreateIn } from './create'; +export type { UpdateIn } from './update'; +export type { DeleteIn } from './delete'; +export type { SearchIn } from './search'; +export type { ProcedureSchemas } from './types'; +export type { ProcedureName } from './constants'; diff --git a/src/plugins/content_management/common/rpc/rpc.ts b/src/plugins/content_management/common/rpc/rpc.ts new file mode 100644 index 0000000000000..7c763afe9a716 --- /dev/null +++ b/src/plugins/content_management/common/rpc/rpc.ts @@ -0,0 +1,25 @@ +/* + * Copyright 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 { ProcedureName } from './constants'; +import type { ProcedureSchemas } from './types'; +import { getSchemas } from './get'; +import { createSchemas } from './create'; +import { updateSchemas } from './update'; +import { deleteSchemas } from './delete'; +import { searchSchemas } from './search'; + +export const schemas: { + [key in ProcedureName]: ProcedureSchemas; +} = { + get: getSchemas, + create: createSchemas, + update: updateSchemas, + delete: deleteSchemas, + search: searchSchemas, +}; diff --git a/src/plugins/content_management/common/rpc/search.ts b/src/plugins/content_management/common/rpc/search.ts new file mode 100644 index 0000000000000..904784aa93e8a --- /dev/null +++ b/src/plugins/content_management/common/rpc/search.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 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 { schema } from '@kbn/config-schema'; + +import type { ProcedureSchemas } from './types'; + +export const searchSchemas: ProcedureSchemas = { + in: schema.object( + { + contentTypeId: schema.string(), + // --> "query" that can be executed will be defined by each content type + query: schema.recordOf(schema.string(), schema.any()), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface SearchIn< + T extends string = string, + Query extends object = object, + Options extends object = object +> { + contentTypeId: T; + query: Query; + options?: Options; +} diff --git a/src/plugins/content_management/common/rpc/types.ts b/src/plugins/content_management/common/rpc/types.ts new file mode 100644 index 0000000000000..6a19a80956708 --- /dev/null +++ b/src/plugins/content_management/common/rpc/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import type { Type } from '@kbn/config-schema'; + +export interface ProcedureSchemas { + in: Type | false; + out: Type | false; +} diff --git a/src/plugins/content_management/common/rpc/update.ts b/src/plugins/content_management/common/rpc/update.ts new file mode 100644 index 0000000000000..a523822377eb3 --- /dev/null +++ b/src/plugins/content_management/common/rpc/update.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 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 { schema } from '@kbn/config-schema'; + +import type { ProcedureSchemas } from './types'; + +export const updateSchemas: ProcedureSchemas = { + in: schema.object( + { + contentTypeId: schema.string(), + id: schema.string({ minLength: 1 }), + // --> "data" to update a content will be defined by each content type + data: schema.recordOf(schema.string(), schema.any()), + options: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + { unknowns: 'forbid' } + ), + out: schema.maybe(schema.object({}, { unknowns: 'allow' })), +}; + +export interface UpdateIn< + T extends string = string, + Data extends object = object, + Options extends object = object +> { + contentTypeId: T; + id: string; + data: Data; + options?: Options; +} diff --git a/src/plugins/content_management/public/content_client/content_client.test.ts b/src/plugins/content_management/public/content_client/content_client.test.ts index 02bd67a1da8da..238570aeb3f49 100644 --- a/src/plugins/content_management/public/content_client/content_client.test.ts +++ b/src/plugins/content_management/public/content_client/content_client.test.ts @@ -10,7 +10,7 @@ import { lastValueFrom } from 'rxjs'; import { takeWhile, toArray } from 'rxjs/operators'; import { createCrudClientMock } from '../crud_client/crud_client.mock'; import { ContentClient } from './content_client'; -import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common'; +import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn } from '../../common'; const setup = () => { const crudClient = createCrudClientMock(); @@ -21,7 +21,7 @@ const setup = () => { describe('#get', () => { it('calls rpcClient.get with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: GetIn = { id: 'test', contentType: 'testType' }; + const input: GetIn = { id: 'test', contentTypeId: 'testType' }; const output = { test: 'test' }; crudClient.get.mockResolvedValueOnce(output); expect(await contentClient.get(input)).toEqual(output); @@ -30,7 +30,7 @@ describe('#get', () => { it('calls rpcClient.get$ with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: GetIn = { id: 'test', contentType: 'testType' }; + const input: GetIn = { id: 'test', contentTypeId: 'testType' }; const output = { test: 'test' }; crudClient.get.mockResolvedValueOnce(output); const get$ = contentClient.get$(input).pipe( @@ -53,7 +53,7 @@ describe('#get', () => { describe('#create', () => { it('calls rpcClient.create with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: CreateIn = { contentType: 'testType', data: { foo: 'bar' } }; + const input: CreateIn = { contentTypeId: 'testType', data: { foo: 'bar' } }; const output = { test: 'test' }; crudClient.create.mockResolvedValueOnce(output); @@ -65,7 +65,7 @@ describe('#create', () => { describe('#update', () => { it('calls rpcClient.update with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: UpdateIn = { contentType: 'testType', data: { id: 'test', foo: 'bar' } }; + const input: UpdateIn = { contentTypeId: 'testType', id: 'test', data: { foo: 'bar' } }; const output = { test: 'test' }; crudClient.update.mockResolvedValueOnce(output); @@ -77,7 +77,7 @@ describe('#update', () => { describe('#delete', () => { it('calls rpcClient.delete with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: DeleteIn = { contentType: 'testType', data: { id: 'test' } }; + const input: DeleteIn = { contentTypeId: 'testType', id: 'test' }; const output = { test: 'test' }; crudClient.delete.mockResolvedValueOnce(output); @@ -89,8 +89,8 @@ describe('#delete', () => { describe('#search', () => { it('calls rpcClient.search with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: SearchIn = { contentType: 'testType', params: {} }; - const output: SearchOut = { hits: [{ test: 'test' }] }; + const input: SearchIn = { contentTypeId: 'testType', query: {} }; + const output = { hits: [{ id: 'test' }] }; crudClient.search.mockResolvedValueOnce(output); expect(await contentClient.search(input)).toEqual(output); expect(crudClient.search).toBeCalledWith(input); @@ -98,8 +98,8 @@ describe('#search', () => { it('calls rpcClient.search$ with input and returns output', async () => { const { crudClient, contentClient } = setup(); - const input: SearchIn = { contentType: 'testType', params: {} }; - const output: SearchOut = { hits: [{ test: 'test' }] }; + const input: SearchIn = { contentTypeId: 'testType', query: {} }; + const output = { hits: [{ id: 'test' }] }; crudClient.search.mockResolvedValueOnce(output); const search$ = contentClient.search$(input).pipe( takeWhile((result) => { diff --git a/src/plugins/content_management/public/content_client/content_client.tsx b/src/plugins/content_management/public/content_client/content_client.tsx index 4a4952a082060..149e509ae9510 100644 --- a/src/plugins/content_management/public/content_client/content_client.tsx +++ b/src/plugins/content_management/public/content_client/content_client.tsx @@ -9,7 +9,7 @@ import { QueryClient } from '@tanstack/react-query'; import { createQueryObservable } from './query_observable'; import type { CrudClient } from '../crud_client'; -import type { CreateIn, GetIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common'; +import type { CreateIn, GetIn, UpdateIn, DeleteIn, SearchIn } from '../../common'; const queryKeyBuilder = { all: (type: string) => [type] as const, @@ -29,14 +29,14 @@ const createQueryOptionBuilder = ({ return { get: (input: I) => { return { - queryKey: queryKeyBuilder.item(input.contentType, input.id), - queryFn: () => crudClientProvider(input.contentType).get(input), + queryKey: queryKeyBuilder.item(input.contentTypeId, input.id), + queryFn: () => crudClientProvider(input.contentTypeId).get(input), }; }, - search: (input: I) => { + search: (input: I) => { return { - queryKey: queryKeyBuilder.search(input.contentType, input.params), - queryFn: () => crudClientProvider(input.contentType).search(input), + queryKey: queryKeyBuilder.search(input.contentTypeId, input.query), + queryFn: () => crudClientProvider(input.contentTypeId).search(input), }; }, }; @@ -62,22 +62,22 @@ export class ContentClient { } create(input: I): Promise { - return this.crudClientProvider(input.contentType).create(input); + return this.crudClientProvider(input.contentTypeId).create(input); } update(input: I): Promise { - return this.crudClientProvider(input.contentType).update(input); + return this.crudClientProvider(input.contentTypeId).update(input); } delete(input: I): Promise { - return this.crudClientProvider(input.contentType).delete(input); + return this.crudClientProvider(input.contentTypeId).delete(input); } - search(input: I): Promise { - return this.crudClientProvider(input.contentType).search(input); + search(input: I): Promise { + return this.crudClientProvider(input.contentTypeId).search(input); } - search$(input: I) { + search$(input: I) { return createQueryObservable(this.queryClient, this.queryOptionBuilder.search(input)); } } diff --git a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx index ca1d8fe8f8e29..7a19cf2dae7a9 100644 --- a/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx +++ b/src/plugins/content_management/public/content_client/content_client_mutation_hooks.test.tsx @@ -36,7 +36,7 @@ const setup = () => { describe('useCreateContentMutation', () => { test('should call rpcClient.create with input and resolve with output', async () => { const { Wrapper, crudClient } = setup(); - const input: CreateIn = { contentType: 'testType', data: { foo: 'bar' } }; + const input: CreateIn = { contentTypeId: 'testType', data: { foo: 'bar' } }; const output = { test: 'test' }; crudClient.create.mockResolvedValueOnce(output); const { result, waitFor } = renderHook(() => useCreateContentMutation(), { wrapper: Wrapper }); @@ -51,7 +51,7 @@ describe('useCreateContentMutation', () => { describe('useUpdateContentMutation', () => { test('should call rpcClient.update with input and resolve with output', async () => { const { Wrapper, crudClient } = setup(); - const input: UpdateIn = { contentType: 'testType', data: { foo: 'bar' } }; + const input: UpdateIn = { contentTypeId: 'testType', id: 'test', data: { foo: 'bar' } }; const output = { test: 'test' }; crudClient.update.mockResolvedValueOnce(output); const { result, waitFor } = renderHook(() => useUpdateContentMutation(), { wrapper: Wrapper }); @@ -66,7 +66,7 @@ describe('useUpdateContentMutation', () => { describe('useDeleteContentMutation', () => { test('should call rpcClient.delete with input and resolve with output', async () => { const { Wrapper, crudClient } = setup(); - const input: DeleteIn = { contentType: 'testType', data: { foo: 'bar' } }; + const input: DeleteIn = { contentTypeId: 'testType', id: 'test' }; const output = { test: 'test' }; crudClient.delete.mockResolvedValueOnce(output); const { result, waitFor } = renderHook(() => useDeleteContentMutation(), { wrapper: Wrapper }); diff --git a/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx b/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx index 7ed1ff8412a45..a716831efc3ad 100644 --- a/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx +++ b/src/plugins/content_management/public/content_client/content_client_query_hooks.test.tsx @@ -12,7 +12,7 @@ import { ContentClientProvider } from './content_client_context'; import { ContentClient } from './content_client'; import { createCrudClientMock } from '../crud_client/crud_client.mock'; import { useGetContentQuery, useSearchContentQuery } from './content_client_query_hooks'; -import type { GetIn, SearchIn, SearchOut } from '../../common'; +import type { GetIn, SearchIn } from '../../common'; const setup = () => { const crudClient = createCrudClientMock(); @@ -32,7 +32,7 @@ const setup = () => { describe('useGetContentQuery', () => { test('should call rpcClient.get with input and resolve with output', async () => { const { crudClient, Wrapper } = setup(); - const input: GetIn = { id: 'test', contentType: 'testType' }; + const input: GetIn = { id: 'test', contentTypeId: 'testType' }; const output = { test: 'test' }; crudClient.get.mockResolvedValueOnce(output); const { result, waitFor } = renderHook(() => useGetContentQuery(input), { wrapper: Wrapper }); @@ -44,8 +44,8 @@ describe('useGetContentQuery', () => { describe('useSearchContentQuery', () => { test('should call rpcClient.search with input and resolve with output', async () => { const { crudClient, Wrapper } = setup(); - const input: SearchIn = { contentType: 'testType', params: {} }; - const output: SearchOut = { hits: [{ test: 'test' }] }; + const input: SearchIn = { contentTypeId: 'testType', query: {} }; + const output = { hits: [{ id: 'test' }] }; crudClient.search.mockResolvedValueOnce(output); const { result, waitFor } = renderHook(() => useSearchContentQuery(input), { wrapper: Wrapper, diff --git a/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx b/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx index 8231d7bfc9390..3549b2489b27d 100644 --- a/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx +++ b/src/plugins/content_management/public/content_client/content_client_query_hooks.tsx @@ -8,7 +8,7 @@ import { useQuery, QueryObserverOptions } from '@tanstack/react-query'; import { useContentClient } from './content_client_context'; -import type { GetIn, SearchIn, SearchOut } from '../../common'; +import type { GetIn, SearchIn } from '../../common'; /** * Exposed `useQuery` options @@ -36,10 +36,7 @@ export const useGetContentQuery = ( * @param input - get content identifier like "id" and "contentType" * @param queryOptions - query options */ -export const useSearchContentQuery = < - I extends SearchIn = SearchIn, - O extends SearchOut = SearchOut ->( +export const useSearchContentQuery = ( input: I, queryOptions?: QueryOptions ) => { diff --git a/src/plugins/content_management/public/crud_client/crud_client.ts b/src/plugins/content_management/public/crud_client/crud_client.ts index e2c5fd8fb86a5..094703a97d0c0 100644 --- a/src/plugins/content_management/public/crud_client/crud_client.ts +++ b/src/plugins/content_management/public/crud_client/crud_client.ts @@ -6,12 +6,12 @@ * Side Public License, v 1. */ -import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, SearchOut } from '../../common'; +import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn } from '../../common'; export interface CrudClient { get(input: I): Promise; create(input: I): Promise; update(input: I): Promise; delete(input: I): Promise; - search(input: I): Promise; + search(input: I): Promise; } diff --git a/src/plugins/content_management/public/rpc_client/rpc_client.ts b/src/plugins/content_management/public/rpc_client/rpc_client.ts index 5ce2e781dcbb1..f4095c430654e 100644 --- a/src/plugins/content_management/public/rpc_client/rpc_client.ts +++ b/src/plugins/content_management/public/rpc_client/rpc_client.ts @@ -8,15 +8,7 @@ import { HttpSetup } from '@kbn/core/public'; import { API_ENDPOINT } from '../../common'; -import type { - GetIn, - CreateIn, - UpdateIn, - DeleteIn, - SearchIn, - SearchOut, - ProcedureName, -} from '../../common'; +import type { GetIn, CreateIn, UpdateIn, DeleteIn, SearchIn, ProcedureName } from '../../common'; import type { CrudClient } from '../crud_client/crud_client'; export class RpcClient implements CrudClient { @@ -38,9 +30,7 @@ export class RpcClient implements CrudClient { return this.sendMessage('delete', input); } - public search( - input: I - ): Promise { + public search(input: I): Promise { return this.sendMessage('search', input); } diff --git a/src/plugins/content_management/server/core/core.test.ts b/src/plugins/content_management/server/core/core.test.ts index 19670740290f8..8a73a48fbbc6d 100644 --- a/src/plugins/content_management/server/core/core.test.ts +++ b/src/plugins/content_management/server/core/core.test.ts @@ -5,9 +5,11 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ +import { schema } from '@kbn/config-schema'; + import { loggingSystemMock } from '@kbn/core/server/mocks'; import { Core } from './core'; -import { createMemoryStorage, MockContent } from './mocks'; +import { createMemoryStorage, FooContent } from './mocks'; import { ContentRegistry } from './registry'; import { ContentCrud } from './crud'; import type { @@ -24,19 +26,30 @@ import type { DeleteItemSuccess, DeleteItemError, } from './event_types'; +import { ContentTypeDefinition, StorageContext } from './types'; const logger = loggingSystemMock.createLogger(); const FOO_CONTENT_ID = 'foo'; +const fooSchema = schema.object({ title: schema.string() }); const setup = ({ registerFooType = false }: { registerFooType?: boolean } = {}) => { - const ctx = {}; + const ctx: StorageContext = { + requestHandlerContext: {} as any, + }; const core = new Core({ logger }); const coreSetup = core.setup(); - const contentDefinition = { + const contentDefinition: ContentTypeDefinition = { id: FOO_CONTENT_ID, storage: createMemoryStorage(), + schemas: { + content: { + create: { in: { data: fooSchema } }, + update: { in: { data: fooSchema } }, + search: { in: { query: schema.any() } }, + }, + }, }; const cleanUp = () => { coreSetup.api.eventBus.stop(); @@ -124,7 +137,7 @@ describe('Content Core', () => { const res = await fooContentCrud!.get(ctx, '1234'); expect(res.item).toBeUndefined(); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { id: '1234' } // We send this "id" option to specify the id of the content created @@ -143,12 +156,12 @@ describe('Content Core', () => { test('update()', async () => { const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true }); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { id: '1234' } ); - await fooContentCrud!.update>(ctx, '1234', { title: 'changed' }); + await fooContentCrud!.update>(ctx, '1234', { title: 'changed' }); expect(fooContentCrud!.get(ctx, '1234')).resolves.toEqual({ contentTypeId: FOO_CONTENT_ID, item: { @@ -163,12 +176,12 @@ describe('Content Core', () => { test('update() - options are forwared to storage layer', async () => { const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true }); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { id: '1234' } ); - const res = await fooContentCrud!.update>( + const res = await fooContentCrud!.update>( ctx, '1234', { title: 'changed' }, @@ -199,7 +212,7 @@ describe('Content Core', () => { test('delete()', async () => { const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true }); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { id: '1234' } @@ -220,7 +233,7 @@ describe('Content Core', () => { test('delete() - options are forwared to storage layer', async () => { const { fooContentCrud, ctx, cleanUp } = setup({ registerFooType: true }); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { id: '1234' } @@ -311,7 +324,7 @@ describe('Content Core', () => { register(contentDefinition); - await crud(FOO_CONTENT_ID).create, { id: string }>( + await crud(FOO_CONTENT_ID).create, { id: string }>( ctx, { title: 'Hello' }, { id: '1234' } @@ -351,7 +364,7 @@ describe('Content Core', () => { const data = { title: 'Hello' }; - await fooContentCrud!.create, { id: string }>(ctx, data, { + await fooContentCrud!.create, { id: string }>(ctx, data, { id: '1234', }); @@ -416,7 +429,7 @@ describe('Content Core', () => { const listener = jest.fn(); const sub = eventBus.events$.subscribe(listener); - const promise = fooContentCrud!.create, { id: string }>( + const promise = fooContentCrud!.create, { id: string }>( ctx, data, { @@ -452,7 +465,7 @@ describe('Content Core', () => { const errorMessage = 'Ohhh no!'; const reject = jest.fn(); await fooContentCrud! - .create, { id: string; errorToThrow: string }>(ctx, data, { + .create, { id: string; errorToThrow: string }>(ctx, data, { id: '1234', errorToThrow: errorMessage, }) @@ -479,7 +492,7 @@ describe('Content Core', () => { registerFooType: true, }); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { @@ -551,7 +564,7 @@ describe('Content Core', () => { registerFooType: true, }); - await fooContentCrud!.create, { id: string }>( + await fooContentCrud!.create, { id: string }>( ctx, { title: 'Hello' }, { diff --git a/src/plugins/content_management/server/core/index.ts b/src/plugins/content_management/server/core/index.ts index f292f5fa2df9a..8490272e90fb4 100644 --- a/src/plugins/content_management/server/core/index.ts +++ b/src/plugins/content_management/server/core/index.ts @@ -12,6 +12,8 @@ export type { CoreApi } from './core'; export type { ContentType } from './content_type'; -export type { ContentStorage, ContentTypeDefinition, StorageContext } from './types'; +export type { ContentStorage, ContentTypeDefinition, StorageContext, RpcSchemas } from './types'; export type { ContentRegistry } from './registry'; + +export type { ContentCrud } from './crud'; diff --git a/src/plugins/content_management/server/core/mocks/in_memory_storage.ts b/src/plugins/content_management/server/core/mocks/in_memory_storage.ts index a2297731198af..5497cf85cdf09 100644 --- a/src/plugins/content_management/server/core/mocks/in_memory_storage.ts +++ b/src/plugins/content_management/server/core/mocks/in_memory_storage.ts @@ -8,7 +8,7 @@ import type { ContentStorage, StorageContext } from '../types'; -export interface MockContent { +export interface FooContent { id: string; title: string; } @@ -16,7 +16,7 @@ export interface MockContent { let idx = 0; class InMemoryStorage implements ContentStorage { - private db: Map = new Map(); + private db: Map = new Map(); async get( ctx: StorageContext, @@ -48,9 +48,9 @@ class InMemoryStorage implements ContentStorage { async create( ctx: StorageContext, - data: Omit, + data: Omit, { id: _id, errorToThrow }: { id?: string; errorToThrow?: string } = {} - ): Promise { + ): Promise { // This allows us to test that proper error events are thrown when the storage layer op fails if (errorToThrow) { throw new Error(errorToThrow); @@ -59,7 +59,7 @@ class InMemoryStorage implements ContentStorage { const nextId = idx++; const id = _id ?? nextId.toString(); - const content: MockContent = { + const content: FooContent = { ...data, id, }; @@ -72,7 +72,7 @@ class InMemoryStorage implements ContentStorage { async update( ctx: StorageContext, id: string, - data: Partial>, + data: Partial>, { forwardInResponse, errorToThrow }: { forwardInResponse?: object; errorToThrow?: string } = {} ) { // This allows us to test that proper error events are thrown when the storage layer op fails @@ -139,3 +139,11 @@ class InMemoryStorage implements ContentStorage { export const createMemoryStorage = () => { return new InMemoryStorage(); }; + +export const createMockedStorage = (): jest.Mocked => ({ + get: jest.fn(), + bulkGet: jest.fn(), + create: jest.fn(), + update: jest.fn(), + delete: jest.fn(), +}); diff --git a/src/plugins/content_management/server/core/mocks/index.ts b/src/plugins/content_management/server/core/mocks/index.ts index b7f9d8a2f2585..b7b8da240a4e7 100644 --- a/src/plugins/content_management/server/core/mocks/index.ts +++ b/src/plugins/content_management/server/core/mocks/index.ts @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -export { createMemoryStorage } from './in_memory_storage'; -export type { MockContent } from './in_memory_storage'; +export { createMemoryStorage, createMockedStorage } from './in_memory_storage'; +export type { FooContent } from './in_memory_storage'; diff --git a/src/plugins/content_management/server/core/types.ts b/src/plugins/content_management/server/core/types.ts index 4ebd79d605717..f21cdf8361b40 100644 --- a/src/plugins/content_management/server/core/types.ts +++ b/src/plugins/content_management/server/core/types.ts @@ -6,11 +6,12 @@ * Side Public License, v 1. */ +import type { Type } from '@kbn/config-schema'; import type { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; /** Context that is sent to all storage instance methods */ export interface StorageContext { - requestHandlerContext?: RequestHandlerContext; + requestHandlerContext: RequestHandlerContext; } export interface ContentStorage { @@ -30,9 +31,60 @@ export interface ContentStorage { delete(ctx: StorageContext, id: string, options: unknown): Promise; } +export interface RpcSchemas { + get?: { + in?: { + options?: Type; + }; + out?: { + result: Type; + }; + }; + create: { + in: { + data: Type; + options?: Type; + }; + out?: { + result: Type; + }; + }; + update: { + in: { + data: Type; + options?: Type; + }; + out?: { + result: Type; + }; + }; + delete?: { + in?: { + options?: Type; + }; + out?: { + result: Type; + }; + }; + search: { + in: { + query: Type; + options?: Type; + }; + out?: { + result: Type; + }; + }; +} + +export type ContentSchemas = RpcSchemas; + export interface ContentTypeDefinition { /** Unique id for the content type */ id: string; /** The storage layer for the content. It must implment the ContentStorage interface. */ storage: S; + schemas: { + content: ContentSchemas; + }; } diff --git a/src/plugins/content_management/server/plugin.test.ts b/src/plugins/content_management/server/plugin.test.ts new file mode 100644 index 0000000000000..944f3a8644062 --- /dev/null +++ b/src/plugins/content_management/server/plugin.test.ts @@ -0,0 +1,185 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { loggingSystemMock, coreMock } from '@kbn/core/server/mocks'; +import { ContentManagementPlugin } from './plugin'; +import { IRouter } from '@kbn/core/server'; +import { ProcedureName, procedureNames } from '../common'; +import type { Context, ProcedureDefinition } from './rpc'; + +jest.mock('./core', () => ({ + ...jest.requireActual('./core'), + Core: class { + setup() { + return { + contentRegistry: 'mockedContentRegistry', + api: { + register: jest.fn().mockReturnValue('mockedRegister'), + crud: jest.fn().mockReturnValue('mockedCrud'), + eventBus: { + emit: jest.fn().mockReturnValue('mockedEventBusEmit'), + }, + }, + }; + } + }, +})); + +const mockGet = jest.fn().mockResolvedValue('getMocked'); +const mockCreate = jest.fn().mockResolvedValue('createMocked'); +const mockUpdate = jest.fn().mockResolvedValue('updateMocked'); +const mockDelete = jest.fn().mockResolvedValue('deleteMocked'); +const mockSearch = jest.fn().mockResolvedValue('searchMocked'); + +jest.mock('./rpc/procedures/all_procedures', () => ({ + procedures: { + get: { + fn: (...args: unknown[]) => mockGet(...args), + schemas: { + in: { + validate: () => undefined, + } as any, + }, + }, + create: { + fn: (...args: unknown[]) => mockCreate(...args), + schemas: { + in: { + validate: () => undefined, + } as any, + }, + }, + update: { + fn: (...args: unknown[]) => mockUpdate(...args), + schemas: { + in: { + validate: () => undefined, + } as any, + }, + }, + delete: { + fn: (...args: unknown[]) => mockDelete(...args), + schemas: { + in: { + validate: () => undefined, + } as any, + }, + }, + search: { + fn: (...args: unknown[]) => mockSearch(...args), + schemas: { + in: { + validate: () => undefined, + } as any, + }, + }, + } as { [key in ProcedureName]: ProcedureDefinition }, +})); + +const setup = () => { + const logger = loggingSystemMock.create(); + const { http } = coreMock.createSetup(); + + const router: IRouter = http.createRouter(); + router.post = jest.fn(); + + const plugin = new ContentManagementPlugin({ logger }); + + return { plugin, http: { createRouter: () => router }, router }; +}; + +describe('ContentManagementPlugin', () => { + describe('setup()', () => { + test('should expose the core API', () => { + const { plugin, http } = setup(); + const api = plugin.setup({ http }); + + expect(Object.keys(api).sort()).toEqual(['crud', 'eventBus', 'register']); + expect(api.crud('')).toBe('mockedCrud'); + expect(api.register({} as any)).toBe('mockedRegister'); + expect(api.eventBus.emit({} as any)).toBe('mockedEventBusEmit'); + }); + + describe('RPC', () => { + test('should create a single POST HTTP route on the router', () => { + const { plugin, http, router } = setup(); + plugin.setup({ http }); + + expect(router.post).toBeCalledTimes(1); + const [routeConfig]: Parameters = (router.post as jest.Mock).mock.calls[0]; + + expect(routeConfig.path).toBe('/api/content_management/rpc/{name}'); + }); + + test('should register all the procedures in the RPC service and the route handler must send to each procedure the core request context + the request body as input', async () => { + const { plugin, http, router } = setup(); + plugin.setup({ http }); + + const [_, handler]: Parameters = (router.post as jest.Mock).mock.calls[0]; + + const mockedRequestHandlerContext: any = { foo: 'bar' }; + const mockedResponse: any = { + ok: jest.fn((data: { body: unknown }) => data.body), + customError: jest.fn((e: any) => e), + }; + + const input = { testInput: 'baz' }; + + // Call the handler for each of our procedure names + const result = await Promise.all( + procedureNames.map((name) => { + const mockedRequest: any = { + params: { name }, + body: input, + }; + + return handler(mockedRequestHandlerContext, mockedRequest, mockedResponse); + }) + ); + + // Each procedure result is returned inside the response.ok() => body + expect(result).toEqual(procedureNames.map((name) => ({ result: `${name}Mocked` }))); + + // Each procedure has been called with the context and input + const context = { + requestHandlerContext: mockedRequestHandlerContext, + contentRegistry: 'mockedContentRegistry', + }; + expect(mockGet).toHaveBeenCalledWith(context, input); + expect(mockCreate).toHaveBeenCalledWith(context, input); + expect(mockUpdate).toHaveBeenCalledWith(context, input); + expect(mockDelete).toHaveBeenCalledWith(context, input); + expect(mockSearch).toHaveBeenCalledWith(context, input); + }); + + test('should return error in custom error format', async () => { + const { plugin, http, router } = setup(); + plugin.setup({ http }); + + const [_, handler]: Parameters = (router.post as jest.Mock).mock.calls[0]; + + // const mockedRequestHandlerContext: any = { foo: 'bar' }; + const mockedResponse: any = { + ok: jest.fn((response: { body: unknown }) => response.body), + customError: jest.fn((e: any) => e), + }; + + mockGet.mockRejectedValueOnce(new Error('Houston we got a problem.')); + const error = await handler({} as any, { params: { name: 'get' } } as any, mockedResponse); + + expect(error).toEqual({ + body: { + message: new Error('Houston we got a problem.'), + }, + headers: {}, + statusCode: 500, + }); + }); + }); + }); +}); diff --git a/src/plugins/content_management/server/plugin.ts b/src/plugins/content_management/server/plugin.ts index 5e3ba371a4e16..e13c5af7b7a6e 100755 --- a/src/plugins/content_management/server/plugin.ts +++ b/src/plugins/content_management/server/plugin.ts @@ -14,11 +14,16 @@ import type { Logger, } from '@kbn/core/server'; import { Core } from './core'; +import { initRpcRoutes, registerProcedures, RpcService } from './rpc'; +import type { Context as RpcContext } from './rpc'; import { ContentManagementServerSetup, ContentManagementServerStart, SetupDependencies, } from './types'; +import { procedureNames } from '../common'; + +type CreateRouterFn = CoreSetup['http']['createRouter']; export class ContentManagementPlugin implements Plugin @@ -26,13 +31,22 @@ export class ContentManagementPlugin private readonly logger: Logger; private readonly core: Core; - constructor(initializerContext: PluginInitializerContext) { + constructor(initializerContext: { logger: PluginInitializerContext['logger'] }) { this.logger = initializerContext.logger.get(); this.core = new Core({ logger: this.logger }); } - public setup(core: CoreSetup) { - const { api: coreApi } = this.core.setup(); + public setup(core: { http: { createRouter: CreateRouterFn } }) { + const { api: coreApi, contentRegistry } = this.core.setup(); + + const rpc = new RpcService(); + registerProcedures(rpc); + + const router = core.http.createRouter(); + initRpcRoutes(procedureNames, router, { + rpc, + contentRegistry, + }); return { ...coreApi, diff --git a/src/plugins/content_management/server/rpc/index.ts b/src/plugins/content_management/server/rpc/index.ts new file mode 100644 index 0000000000000..3d68b6feb398d --- /dev/null +++ b/src/plugins/content_management/server/rpc/index.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. + */ + +export { RpcService } from './rpc_service'; + +export { initRpcRoutes } from './routes'; + +export { registerProcedures } from './procedures'; + +export type { Context } from './types'; + +export type { ProcedureDefinition } from './rpc_service'; diff --git a/src/plugins/content_management/server/rpc/procedures/all_procedures.ts b/src/plugins/content_management/server/rpc/procedures/all_procedures.ts new file mode 100644 index 0000000000000..045aea006eb95 --- /dev/null +++ b/src/plugins/content_management/server/rpc/procedures/all_procedures.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { ProcedureName } from '../../../common'; +import type { ProcedureDefinition } from '../rpc_service'; +import type { Context } from '../types'; +import { get } from './get'; +import { create } from './create'; + +export const procedures: { [key in ProcedureName]: ProcedureDefinition } = { + get, + create, + update: get, // TODO + delete: get, // TODO + search: get, // TODO +}; diff --git a/src/plugins/content_management/server/rpc/procedures/create.test.ts b/src/plugins/content_management/server/rpc/procedures/create.test.ts new file mode 100644 index 0000000000000..2c3432e03ef69 --- /dev/null +++ b/src/plugins/content_management/server/rpc/procedures/create.test.ts @@ -0,0 +1,238 @@ +/* + * Copyright 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 { schema } from '@kbn/config-schema'; +import { validate } from '../../utils'; +import { ContentRegistry } from '../../core/registry'; +import { createMockedStorage } from '../../core/mocks'; +import type { RpcSchemas } from '../../core'; +import { EventBus } from '../../core/event_bus'; +import { create } from './create'; + +const { fn, schemas } = create; + +const inputSchema = schemas?.in; +const outputSchema = schemas?.out; + +if (!inputSchema) { + throw new Error(`Input schema missing for [create] procedure.`); +} + +if (!outputSchema) { + throw new Error(`Output schema missing for [create] procedure.`); +} + +const FOO_CONTENT_ID = 'foo'; +const fooDataSchema = schema.object({ title: schema.string() }, { unknowns: 'forbid' }); + +describe('RPC -> create()', () => { + describe('Input/Output validation', () => { + /** + * These tests are for the procedure call itself. Every RPC needs to declare in/out schema + * We will test _specific_ validation schema inside the procedure in separate tests. + */ + test('should validate that a contentTypeId and "data" object is passed', () => { + [ + { input: { contentTypeId: 'foo', data: { title: 'hello' } } }, + { + input: { data: { title: 'hello' } }, // contentTypeId missing + expectedError: '[contentTypeId]: expected value of type [string] but got [undefined]', + }, + { + input: { contentTypeId: 'foo' }, // data missing + expectedError: '[data]: expected value of type [object] but got [undefined]', + }, + { + input: { contentTypeId: 'foo', data: 123 }, // data is not an object + expectedError: '[data]: expected value of type [object] but got [number]', + }, + { + input: { contentTypeId: 'foo', data: { title: 'hello' }, unknown: 'foo' }, + expectedError: '[unknown]: definition for this key is missing', + }, + ].forEach(({ input, expectedError }) => { + const error = validate(input, inputSchema); + + if (!expectedError) { + try { + expect(error).toBe(null); + } catch (e) { + throw new Error(`Expected no error but got [{${error?.message}}].`); + } + } else { + expect(error?.message).toBe(expectedError); + } + }); + }); + + test('should allow an options "object" to be passed', () => { + let error = validate( + { + contentTypeId: 'foo', + data: { title: 'hello' }, + options: { any: 'object' }, + }, + inputSchema + ); + + expect(error).toBe(null); + + error = validate( + { + contentTypeId: 'foo', + data: { title: 'hello' }, + options: 123, // Not an object + }, + inputSchema + ); + + expect(error?.message).toBe( + '[options]: expected a plain object value, but found [number] instead.' + ); + }); + + test('should validate that the response is an object', () => { + let error = validate( + { + any: 'object', + }, + outputSchema + ); + + expect(error).toBe(null); + + error = validate(123, outputSchema); + + expect(error?.message).toBe('expected a plain object value, but found [number] instead.'); + }); + }); + + describe('procedure', () => { + const createSchemas = (): RpcSchemas => { + return { + create: { + in: { + data: fooDataSchema, + }, + }, + } as any; + }; + + const setup = ({ contentSchemas = createSchemas() } = {}) => { + const contentRegistry = new ContentRegistry(new EventBus()); + const storage = createMockedStorage(); + contentRegistry.register({ + id: FOO_CONTENT_ID, + storage, + schemas: { + content: contentSchemas, + }, + }); + + const requestHandlerContext = 'mockedRequestHandlerContext'; + const ctx: any = { contentRegistry, requestHandlerContext }; + + return { ctx, storage }; + }; + + test('should return the storage create() result', async () => { + const { ctx, storage } = setup(); + + const expected = 'CreateResult'; + storage.create.mockResolvedValueOnce(expected); + + const result = await fn(ctx, { contentTypeId: FOO_CONTENT_ID, data: { title: 'Hello' } }); + + expect(result).toEqual({ + contentTypeId: FOO_CONTENT_ID, + result: expected, + }); + + expect(storage.create).toHaveBeenCalledWith( + { requestHandlerContext: ctx.requestHandlerContext }, + { title: 'Hello' }, + undefined + ); + }); + + describe('validation', () => { + test('should validate that content type definition exist', () => { + const { ctx } = setup(); + expect(() => + fn(ctx, { contentTypeId: 'unknown', data: { title: 'Hello' } }) + ).rejects.toEqual(new Error('Content [unknown] is not registered.')); + }); + + test('should validate the data sent in input - missing field', () => { + const { ctx } = setup(); + expect(() => fn(ctx, { contentTypeId: FOO_CONTENT_ID, data: {} })).rejects.toEqual( + new Error('[title]: expected value of type [string] but got [undefined]') + ); + }); + + test('should validate the data sent in input - unknown field', () => { + const { ctx } = setup(); + expect(() => + fn(ctx, { + contentTypeId: FOO_CONTENT_ID, + data: { title: 'Hello', unknownField: 'Hello' }, + }) + ).rejects.toEqual(new Error('[unknownField]: definition for this key is missing')); + }); + + test('should enforce a schema for options if options are passed', () => { + const { ctx } = setup(); + expect(() => + fn(ctx, { + contentTypeId: FOO_CONTENT_ID, + data: { title: 'Hello' }, + options: { foo: 'bar' }, + }) + ).rejects.toEqual(new Error('Schema missing for rpc procedure [create.in.options].')); + }); + + test('should validate the options', () => { + const { ctx } = setup({ + contentSchemas: { + create: { + in: { + data: fooDataSchema, + options: schema.object({ validOption: schema.maybe(schema.boolean()) }), + }, + }, + } as any, + }); + expect(() => + fn(ctx, { + contentTypeId: FOO_CONTENT_ID, + data: { title: 'Hello' }, + options: { foo: 'bar' }, + }) + ).rejects.toEqual(new Error('[foo]: definition for this key is missing')); + }); + + test('should validate the result if schema is provided', () => { + const { ctx, storage } = setup({ + contentSchemas: { + create: { + in: { data: fooDataSchema }, + out: { result: schema.object({ validField: schema.maybe(schema.boolean()) }) }, + }, + } as any, + }); + + const invalidResult = { wrongField: 'bad' }; + storage.create.mockResolvedValueOnce(invalidResult); + + expect(() => + fn(ctx, { contentTypeId: FOO_CONTENT_ID, data: { title: 'Hello' } }) + ).rejects.toEqual(new Error('[wrongField]: definition for this key is missing')); + }); + }); + }); +}); diff --git a/src/plugins/content_management/server/rpc/procedures/create.ts b/src/plugins/content_management/server/rpc/procedures/create.ts new file mode 100644 index 0000000000000..1aa7d4e4dfc93 --- /dev/null +++ b/src/plugins/content_management/server/rpc/procedures/create.ts @@ -0,0 +1,66 @@ +/* + * Copyright 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 { rpcSchemas } from '../../../common'; +import type { CreateIn } from '../../../common'; +import type { StorageContext, ContentCrud } from '../../core'; +import type { ProcedureDefinition } from '../rpc_service'; +import type { Context } from '../types'; +import { validate } from '../../utils'; + +export const create: ProcedureDefinition> = { + schemas: rpcSchemas.create, + fn: async (ctx, input) => { + const contentDefinition = ctx.contentRegistry.getDefinition(input.contentTypeId); + const { create: schemas } = contentDefinition.schemas.content; + + // Validate data to be stored + if (schemas.in.data) { + const error = validate(input.data, schemas.in.data); + if (error) { + // TODO: Improve error handling + throw error; + } + } else { + // TODO: Improve error handling + throw new Error('Schema missing for rpc call [create.in.data].'); + } + + // Validate the possible options + if (input.options) { + if (!schemas.in?.options) { + // TODO: Improve error handling + throw new Error('Schema missing for rpc procedure [create.in.options].'); + } + const error = validate(input.options, schemas.in.options); + if (error) { + // TODO: Improve error handling + throw error; + } + } + + // Execute CRUD + const crudInstance: ContentCrud = ctx.contentRegistry.getCrud(input.contentTypeId); + const storageContext: StorageContext = { + requestHandlerContext: ctx.requestHandlerContext, + }; + const result = await crudInstance.create(storageContext, input.data, input.options); + + // Validate result + const resultSchema = schemas.out?.result; + if (resultSchema) { + const error = validate(result.result, resultSchema); + if (error) { + // TODO: Improve error handling + throw error; + } + } + + return result; + }, +}; diff --git a/src/plugins/content_management/server/rpc/procedures/get.test.ts b/src/plugins/content_management/server/rpc/procedures/get.test.ts new file mode 100644 index 0000000000000..d3214faaa1e9c --- /dev/null +++ b/src/plugins/content_management/server/rpc/procedures/get.test.ts @@ -0,0 +1,200 @@ +/* + * Copyright 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 { schema } from '@kbn/config-schema'; +import { validate } from '../../utils'; +import { ContentRegistry } from '../../core/registry'; +import { createMockedStorage } from '../../core/mocks'; +import type { RpcSchemas } from '../../core'; +import { EventBus } from '../../core/event_bus'; +import { get } from './get'; + +const { fn, schemas } = get; + +const inputSchema = schemas?.in; +const outputSchema = schemas?.out; + +if (!inputSchema) { + throw new Error(`Input schema missing for [get] procedure.`); +} + +if (!outputSchema) { + throw new Error(`Output schema missing for [get] procedure.`); +} + +const FOO_CONTENT_ID = 'foo'; + +describe('RPC -> get()', () => { + describe('Input/Output validation', () => { + /** + * These tests are for the procedure call itself. Every RPC needs to declare in/out schema + * We will test _specific_ validation schema inside the procedure in separate tests. + */ + test('should validate that a contentTypeId and an id is passed', () => { + [ + { input: { contentTypeId: 'foo', id: '123' } }, + { + input: { id: '777' }, // contentTypeId missing + expectedError: '[contentTypeId]: expected value of type [string] but got [undefined]', + }, + { + input: { contentTypeId: 'foo', id: '123', unknown: 'foo' }, + expectedError: '[unknown]: definition for this key is missing', + }, + { + input: { contentTypeId: 'foo', id: '' }, // id must have min 1 char + expectedError: '[id]: value has length [0] but it must have a minimum length of [1].', + }, + ].forEach(({ input, expectedError }) => { + const error = validate(input, inputSchema); + + if (!expectedError) { + try { + expect(error).toBe(null); + } catch (e) { + throw new Error(`Expected no error but got [{${error?.message}}].`); + } + } else { + expect(error?.message).toBe(expectedError); + } + }); + }); + + test('should allow an options "object" to be passed', () => { + let error = validate( + { + contentTypeId: 'foo', + id: '123', + options: { any: 'object' }, + }, + inputSchema + ); + + expect(error).toBe(null); + + error = validate( + { + contentTypeId: 'foo', + id: '123', + options: 123, // Not an object + }, + inputSchema + ); + + expect(error?.message).toBe( + '[options]: expected a plain object value, but found [number] instead.' + ); + }); + + test('should validate that the response is an object', () => { + let error = validate( + { + any: 'object', + }, + outputSchema + ); + + expect(error).toBe(null); + + error = validate(123, outputSchema); + + expect(error?.message).toBe('expected a plain object value, but found [number] instead.'); + }); + }); + + describe('procedure', () => { + const createSchemas = (): RpcSchemas => { + return {} as any; + }; + + const setup = ({ contentSchemas = createSchemas() } = {}) => { + const contentRegistry = new ContentRegistry(new EventBus()); + const storage = createMockedStorage(); + contentRegistry.register({ + id: FOO_CONTENT_ID, + storage, + schemas: { + content: contentSchemas, + }, + }); + + const requestHandlerContext = 'mockedRequestHandlerContext'; + const ctx: any = { contentRegistry, requestHandlerContext }; + + return { ctx, storage }; + }; + + test('should return the storage get() result', async () => { + const { ctx, storage } = setup(); + + const expected = 'GetResult'; + storage.get.mockResolvedValueOnce(expected); + + const result = await fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234' }); + + expect(result).toEqual({ + contentTypeId: FOO_CONTENT_ID, + item: expected, + }); + + expect(storage.get).toHaveBeenCalledWith( + { requestHandlerContext: ctx.requestHandlerContext }, + '1234', + undefined + ); + }); + + describe('validation', () => { + test('should validate that content type definition exist', () => { + const { ctx } = setup(); + expect(() => fn(ctx, { contentTypeId: 'unknown', id: '1234' })).rejects.toEqual( + new Error('Content [unknown] is not registered.') + ); + }); + + test('should enforce a schema for options if options are passed', () => { + const { ctx } = setup(); + expect(() => + fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234', options: { foo: 'bar' } }) + ).rejects.toEqual(new Error('Schema missing for rpc procedure [get.in.options].')); + }); + + test('should validate the options', () => { + const { ctx } = setup({ + contentSchemas: { + get: { + in: { + options: schema.object({ validOption: schema.maybe(schema.boolean()) }), + }, + }, + } as any, + }); + expect(() => + fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234', options: { foo: 'bar' } }) + ).rejects.toEqual(new Error('[foo]: definition for this key is missing')); + }); + + test('should validate the result if schema is provided', () => { + const { ctx, storage } = setup({ + contentSchemas: { + get: { + out: { result: schema.object({ validField: schema.maybe(schema.boolean()) }) }, + }, + } as any, + }); + + const invalidResult = { wrongField: 'bad' }; + storage.get.mockResolvedValueOnce(invalidResult); + + expect(() => fn(ctx, { contentTypeId: FOO_CONTENT_ID, id: '1234' })).rejects.toEqual( + new Error('[wrongField]: definition for this key is missing') + ); + }); + }); + }); +}); diff --git a/src/plugins/content_management/server/rpc/procedures/get.ts b/src/plugins/content_management/server/rpc/procedures/get.ts new file mode 100644 index 0000000000000..73960ad8f3a2f --- /dev/null +++ b/src/plugins/content_management/server/rpc/procedures/get.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { rpcSchemas } from '../../../common'; +import type { GetIn } from '../../../common'; +import type { ContentCrud, StorageContext } from '../../core'; +import { validate } from '../../utils'; +import type { ProcedureDefinition } from '../rpc_service'; +import type { Context } from '../types'; + +export const get: ProcedureDefinition> = { + schemas: rpcSchemas.get, + fn: async (ctx, input) => { + const contentDefinition = ctx.contentRegistry.getDefinition(input.contentTypeId); + const { get: schemas } = contentDefinition.schemas.content; + + if (input.options) { + // Validate the options provided + if (!schemas?.in?.options) { + throw new Error(`Schema missing for rpc procedure [get.in.options].`); + } + const error = validate(input.options, schemas.in.options); + if (error) { + // TODO: Improve error handling + throw error; + } + } + + // Execute CRUD + const crudInstance: ContentCrud = ctx.contentRegistry.getCrud(input.contentTypeId); + const storageContext: StorageContext = { + requestHandlerContext: ctx.requestHandlerContext, + }; + const result = await crudInstance.get(storageContext, input.id, input.options); + + // Validate result + const resultSchema = schemas?.out?.result; + if (resultSchema) { + const error = validate(result.item, resultSchema); + if (error) { + // TODO: Improve error handling + throw error; + } + } + + return result; + }, +}; diff --git a/src/plugins/content_management/server/rpc/procedures/index.ts b/src/plugins/content_management/server/rpc/procedures/index.ts new file mode 100644 index 0000000000000..6cfaba67c38c8 --- /dev/null +++ b/src/plugins/content_management/server/rpc/procedures/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright 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 { ProcedureName } from '../../../common'; +import type { RpcService } from '../rpc_service'; +import type { Context } from '../types'; +import { procedures } from './all_procedures'; + +// Type utility to correclty set the type of JS Object.entries() +type Entries = Array< + { + [K in keyof T]: [K, T[K]]; + }[keyof T] +>; + +export function registerProcedures(rpc: RpcService) { + (Object.entries(procedures) as Entries).forEach(([name, definition]) => { + rpc.register(name, definition); + }); +} diff --git a/src/plugins/content_management/server/rpc/routes/error_wrapper.ts b/src/plugins/content_management/server/rpc/routes/error_wrapper.ts new file mode 100644 index 0000000000000..9dc98810a0832 --- /dev/null +++ b/src/plugins/content_management/server/rpc/routes/error_wrapper.ts @@ -0,0 +1,25 @@ +/* + * Copyright 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 { boomify, isBoom } from '@hapi/boom'; +import { ResponseError, CustomHttpResponseOptions } from '@kbn/core/server'; + +export function wrapError(error: any): CustomHttpResponseOptions { + const boom = isBoom(error) + ? error + : boomify(error, { statusCode: error.status ?? error.statusCode }); + const statusCode = boom.output.statusCode; + return { + body: { + message: boom, + ...(statusCode !== 500 && error.body ? { attributes: { body: error.body } } : {}), + }, + headers: boom.output.headers as { [key: string]: string }, + statusCode, + }; +} diff --git a/src/plugins/content_management/server/rpc/routes/index.ts b/src/plugins/content_management/server/rpc/routes/index.ts new file mode 100644 index 0000000000000..60deb3ae64d66 --- /dev/null +++ b/src/plugins/content_management/server/rpc/routes/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright 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 { initRpcRoutes } from './routes'; diff --git a/src/plugins/content_management/server/rpc/routes/routes.ts b/src/plugins/content_management/server/rpc/routes/routes.ts new file mode 100644 index 0000000000000..c5d57fe3e010e --- /dev/null +++ b/src/plugins/content_management/server/rpc/routes/routes.ts @@ -0,0 +1,69 @@ +/* + * Copyright 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 { schema } from '@kbn/config-schema'; +import type { IRouter } from '@kbn/core/server'; + +import { ProcedureName } from '../../../common'; +import type { ContentRegistry } from '../../core'; + +import type { RpcService } from '../rpc_service'; +import type { Context as RpcContext } from '../types'; +import { wrapError } from './error_wrapper'; + +interface RouteContext { + rpc: RpcService; + contentRegistry: ContentRegistry; +} + +export function initRpcRoutes( + procedureNames: readonly ProcedureName[], + router: IRouter, + { rpc, contentRegistry }: RouteContext +) { + if (procedureNames.length === 0) { + throw new Error(`No procedure names provided.`); + } + + /** + * @apiGroup ContentManagement + * + * @api {post} /content_management/rpc/{call} Execute RPC call + * @apiName RPC + */ + router.post( + { + path: '/api/content_management/rpc/{name}', + validate: { + params: schema.object({ + // @ts-ignore We validate above that procedureNames has at least one item + // so we can ignore the "Target requires 1 element(s) but source may have fewer." TS error + name: schema.oneOf(procedureNames.map((fnName) => schema.literal(fnName))), + }), + // Any object payload can be passed, we will validate the input when calling the rpc handler + body: schema.maybe(schema.object({}, { unknowns: 'allow' })), + }, + }, + async (requestHandlerContext, request, response) => { + try { + const context: RpcContext = { + contentRegistry, + requestHandlerContext, + }; + const { name } = request.params as { name: ProcedureName }; + + const result = await rpc.call(context, name, request.body); + + return response.ok({ + body: result, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + } + ); +} diff --git a/src/plugins/content_management/server/rpc/rpc_service.test.ts b/src/plugins/content_management/server/rpc/rpc_service.test.ts new file mode 100644 index 0000000000000..0ac81a3c3fa8f --- /dev/null +++ b/src/plugins/content_management/server/rpc/rpc_service.test.ts @@ -0,0 +1,105 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { schema } from '@kbn/config-schema'; +import { ProcedureDefinition, RpcService } from './rpc_service'; + +describe('RpcService', () => { + describe('register()', () => { + test('should register a procedure', () => { + const rpc = new RpcService<{}, 'foo'>(); + const fn = jest.fn(); + const procedure: ProcedureDefinition<{}> = { fn }; + rpc.register('foo', procedure); + + const context = {}; + rpc.call(context, 'foo'); + + expect(fn).toHaveBeenCalledWith(context, undefined); + }); + }); + + describe('call()', () => { + test('should require a schema if an input is passed', () => { + const rpc = new RpcService<{}, 'foo'>(); + const fn = jest.fn(); + const procedure: ProcedureDefinition<{}> = { fn }; + rpc.register('foo', procedure); + + const context = {}; + const input = { foo: 'bar' }; + + expect(() => { + return rpc.call(context, 'foo', input); + }).rejects.toEqual(new Error('Input schema missing for [foo] procedure.')); + }); + + test('should call the provided handler with the input and context', async () => { + const rpc = new RpcService<{}, 'foo'>(); + + const output = { success: true }; + + const fn = jest.fn().mockResolvedValue(output); + const procedure: ProcedureDefinition<{}> = { + fn, + schemas: { in: schema.object({ foo: schema.string() }), out: schema.any() }, + }; + rpc.register('foo', procedure); + + const context = {}; + const input = { foo: 'bar' }; + + const { result } = await rpc.call(context, 'foo', input); + + expect(fn).toHaveBeenCalledWith(context, input); + expect(result).toEqual(output); + }); + + test('should throw an error if the procedure is not registered', () => { + const rpc = new RpcService(); + + expect(() => { + return rpc.call(undefined, 'unknown'); + }).rejects.toEqual(new Error('Procedure [unknown] is not registered.')); + }); + + test('should validate that the input is valid', () => { + const rpc = new RpcService<{}, 'foo'>(); + + const fn = jest.fn(); + const procedure: ProcedureDefinition<{}> = { + fn, + schemas: { in: schema.object({ foo: schema.string() }), out: schema.any() }, + }; + rpc.register('foo', procedure); + + const context = {}; + const input = { bad: 'unknown prop' }; + + expect(() => { + return rpc.call(context, 'foo', input); + }).rejects.toEqual(new Error('[foo]: expected value of type [string] but got [undefined]')); + }); + + test('should validate the output if schema is provided', () => { + const rpc = new RpcService<{}, 'foo'>(); + + const fn = jest.fn().mockResolvedValue({ bad: 'unknown prop' }); + const procedure: ProcedureDefinition<{}> = { + fn, + schemas: { in: schema.never(), out: schema.object({ foo: schema.string() }) }, + }; + rpc.register('foo', procedure); + + const context = {}; + expect(() => { + return rpc.call(context, 'foo'); + }).rejects.toEqual(new Error('[foo]: expected value of type [string] but got [undefined]')); + }); + }); +}); diff --git a/src/plugins/content_management/server/rpc/rpc_service.ts b/src/plugins/content_management/server/rpc/rpc_service.ts new file mode 100644 index 0000000000000..b7f6d8aedcd7a --- /dev/null +++ b/src/plugins/content_management/server/rpc/rpc_service.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { ProcedureSchemas } from '../../common'; +import { validate } from '../utils'; + +export interface ProcedureDefinition< + Context extends object | void = void, + I extends object | void = void, + O = any +> { + fn: (context: Context, input: I extends void ? undefined : I) => Promise; + schemas?: ProcedureSchemas; +} + +export class RpcService { + private registry: Map> = new Map(); + + register(name: Names, definition: ProcedureDefinition) { + this.registry.set(name, definition); + } + + async call(context: Context, name: Names, input?: unknown): Promise<{ result: unknown }> { + const procedure: ProcedureDefinition | undefined = this.registry.get(name); + + if (!procedure) throw new Error(`Procedure [${name}] is not registered.`); + + const { fn, schemas } = procedure; + + // 1. Validate input + if (schemas?.in) { + const error = validate(input, schemas.in); + if (error) { + // TODO: Improve error handling + throw error; + } + } else if (input !== undefined) { + // TODO: Improve error handling + throw new Error(`Input schema missing for [${name}] procedure.`); + } + + // 2. Execute procedure + const result = await fn(context, input); + + // 3. Validate output + if (schemas?.out) { + const error = validate(result, schemas.out); + if (error) { + // TODO: Improve error handling + throw error; + } + } + + return { result }; + } +} diff --git a/src/plugins/content_management/server/rpc/types.ts b/src/plugins/content_management/server/rpc/types.ts new file mode 100644 index 0000000000000..71ce1bd4bf86d --- /dev/null +++ b/src/plugins/content_management/server/rpc/types.ts @@ -0,0 +1,14 @@ +/* + * Copyright 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 { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; +import type { ContentRegistry } from '../core'; + +export interface Context { + contentRegistry: ContentRegistry; + requestHandlerContext: RequestHandlerContext; +} diff --git a/src/plugins/content_management/server/utils.ts b/src/plugins/content_management/server/utils.ts new file mode 100644 index 0000000000000..cd001f77350a2 --- /dev/null +++ b/src/plugins/content_management/server/utils.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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, ValidationError } from '@kbn/config-schema'; + +export const validate = (input: unknown, schema: Type): ValidationError | null => { + try { + schema.validate(input); + return null; + } catch (e: any) { + return e as ValidationError; + } +}; From 11577869c967637240ad3701fcab720bb3c560ea Mon Sep 17 00:00:00 2001 From: mohamedhamed-ahmed Date: Mon, 20 Feb 2023 16:52:03 +0000 Subject: [PATCH 131/210] [Infrastructure UI]: Fix full page refresh on hosts link in invetory page (#151496) closes #151396 ## Summary The links to "Introducing a new host analysis experience" and "Kubernetes dashboards" (when Kubernetes pods are selected) cause a full page refresh in Kibana instead of navigating to the other pages without the refresh. The onClick handler was being overridden every time and this change is to prevent this from happening. ### Testing https://user-images.githubusercontent.com/11225826/219460137-a132f13e-3dbc-48b5-848e-a9dd8ace55df.mov --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../infra/public/components/try_it_button.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/infra/public/components/try_it_button.tsx b/x-pack/plugins/infra/public/components/try_it_button.tsx index eeb9d68a93a69..8097461986287 100644 --- a/x-pack/plugins/infra/public/components/try_it_button.tsx +++ b/x-pack/plugins/infra/public/components/try_it_button.tsx @@ -13,6 +13,7 @@ import { css } from '@emotion/react'; import { EuiLinkColor } from '@elastic/eui'; import { ExperimentalBadge } from './experimental_badge'; +type OnClickEvent = React.MouseEvent | React.MouseEvent; interface Props { color?: EuiLinkColor; 'data-test-subj'?: string; @@ -20,7 +21,7 @@ interface Props { label: string; link: LinkDescriptor; hideBadge?: boolean; - onClick?: () => void; + onClick?: (e?: OnClickEvent) => void; } export const TryItButton = ({ label, @@ -33,6 +34,11 @@ export const TryItButton = ({ }: Props) => { const linkProps = useLinkProps({ ...link }); + const handleClick = (event: OnClickEvent) => { + if (linkProps.onClick) linkProps.onClick(event); + if (onClick) onClick(event); + }; + return ( {!hideBadge && ( @@ -40,7 +46,7 @@ export const TryItButton = ({ {experimental && ( From 6917d810d5b383fa2cb4a8b3ae89138dc2f7181f Mon Sep 17 00:00:00 2001 From: Yan Savitski Date: Mon, 20 Feb 2023 17:56:13 +0100 Subject: [PATCH 132/210] Behavioral analytics empty state (#151622) Fix issue #3972 --- .../add_analytics_collection_form.tsx | 10 +++- .../analytics_overview/analytics_overview.tsx | 30 ++-------- .../analytics_overview_empty_page.tsx | 59 +++++++++++++++++++ 3 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx index 34a04d2470e62..baa0430150c09 100644 --- a/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/add_analytics_collections/add_analytics_collection_form.tsx @@ -11,6 +11,8 @@ import { useActions, useValues } from 'kea'; import { EuiFormRow, EuiFieldText, EuiForm } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + import { AddAnalyticsCollectionLogic } from './add_analytics_collection_logic'; interface AddAnalyticsCollectionForm { @@ -36,7 +38,13 @@ export const AddAnalyticsCollectionForm: React.FC = } }} > - + { const { fetchAnalyticsCollections } = useActions(AnalyticsCollectionsLogic); @@ -46,6 +47,7 @@ export const AnalyticsOverview: React.FC = () => { pageTitle: i18n.translate('xpack.enterpriseSearch.analytics.collections.pageTitle', { defaultMessage: 'Behavioral Analytics', }), + rightSideItems: [], }} > {!hasNoAnalyticsCollections && ( @@ -67,31 +69,7 @@ export const AnalyticsOverview: React.FC = () => { {hasNoAnalyticsCollections ? ( - - {i18n.translate( - 'xpack.enterpriseSearch.analytics.collections.emptyState.headingTitle', - { - defaultMessage: 'You dont have any collections yet', - } - )} -

- } - body={ -

- {i18n.translate( - 'xpack.enterpriseSearch.analytics.collections.emptyState.subHeading', - { - defaultMessage: - 'An analytics collection provides a place to store the analytics events for any given search application you are building. Create a new collection to get started.', - } - )} -

- } - actions={[]} - /> + ) : ( )} diff --git a/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx new file mode 100644 index 0000000000000..f57d9b851cd46 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/analytics/components/analytics_overview/analytics_overview_empty_page.tsx @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { EuiEmptyPrompt, EuiImage, EuiLink, EuiTitle } from '@elastic/eui'; + +import { i18n } from '@kbn/i18n'; + +import noMlModelsGraphicDark from '../../../../assets/images/no_ml_models_dark.svg'; + +import { docLinks } from '../../../shared/doc_links'; +import { AddAnalyticsCollection } from '../add_analytics_collections/add_analytics_collection'; + +const ICON_WIDTH = 294; + +export const AnalyticsOverviewEmptyPage: React.FC = () => ( + } + layout="horizontal" + color="plain" + title={ +

+ {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.headingTitle', { + defaultMessage: 'Create your first Collection', + })} +

+ } + body={ +

+ {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.subHeading', { + defaultMessage: + 'Collections are required to store analytics events for your search application.', + })} +

+ } + actions={[]} + footer={ + <> + + + {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.footerText', { + defaultMessage: 'Want to learn more?', + })} + + {' '} + + {i18n.translate('xpack.enterpriseSearch.analytics.collections.emptyState.footerLink', { + defaultMessage: 'Read documentation', + })} + + + } + /> +); From 4381fccc7c7d2b4174d2349ca875e38a6fa91510 Mon Sep 17 00:00:00 2001 From: Nav <13634519+navarone-feekery@users.noreply.github.com> Date: Mon, 20 Feb 2023 18:10:15 +0100 Subject: [PATCH 133/210] [Enterprise Search] Fix word wrapping on extraction rules table (#151634) Use `EuiFlexItem` to fix table rendering bug https://github.com/elastic/enterprise-search-team/issues/3957 --- .../extraction_rules/field_rules_table.tsx | 77 +++++++++++-------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx index c8f6b3a882a96..19f313d66e5ba 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/crawler/crawler_domain_detail/extraction_rules/field_rules_table.tsx @@ -7,7 +7,14 @@ import React from 'react'; -import { EuiBasicTable, EuiBasicTableColumn, EuiCode, EuiFlexGroup, EuiText } from '@elastic/eui'; +import { + EuiBasicTable, + EuiBasicTableColumn, + EuiCode, + EuiFlexGroup, + EuiFlexItem, + EuiText, +} from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -48,16 +55,20 @@ export const FieldRulesTable: React.FC = ({ }), render: (rule: FieldRuleWithId) => ( - - {rule.source_type === FieldType.HTML - ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.HTMLLabel', { - defaultMessage: 'HTML: ', - }) - : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.UrlLabel', { - defaultMessage: 'URL: ', - })} - - {rule.selector} + + + {rule.source_type === FieldType.HTML + ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.HTMLLabel', { + defaultMessage: 'HTML: ', + }) + : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.UrlLabel', { + defaultMessage: 'URL: ', + })} + + + + {rule.selector} + ), }, @@ -70,26 +81,30 @@ export const FieldRulesTable: React.FC = ({ multiple_objects_handling: multipleObjectsHandling, }: FieldRuleWithId) => ( - - {content.value_type === ContentFrom.EXTRACTED - ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.extractedLabel', { - defaultMessage: 'Extracted as: ', - }) - : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.fixedLabel', { - defaultMessage: 'Fixed value: ', - })} - - - {content.value_type === ContentFrom.FIXED - ? content.value - : multipleObjectsHandling === MultipleObjectsHandling.ARRAY - ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.arrayLabel', { - defaultMessage: 'array', - }) - : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.stringLabel', { - defaultMessage: 'string', - })} - + + + {content.value_type === ContentFrom.EXTRACTED + ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.extractedLabel', { + defaultMessage: 'Extracted as: ', + }) + : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.fixedLabel', { + defaultMessage: 'Fixed value: ', + })} + + + + + {content.value_type === ContentFrom.FIXED + ? content.value + : multipleObjectsHandling === MultipleObjectsHandling.ARRAY + ? i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.arrayLabel', { + defaultMessage: 'array', + }) + : i18n.translate('xpack.enterpriseSearch.crawler.fieldRulesTable.stringLabel', { + defaultMessage: 'string', + })} + + ), }, From 3acff6faf84713545e60b9118d47b5716fac9280 Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Mon, 20 Feb 2023 21:14:50 +0100 Subject: [PATCH 134/210] [Monitoring] Add Version column to Cluster Listing table (#151638) Fixes #151508 Screenshot 2023-02-20 at 16 42 38 Using the data already provided by the API, I've added a new column to the cluster listing table to show the version there as well. --- .../public/components/cluster/listing/listing.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js index 612b6e9154689..4df463d5ef383 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js +++ b/x-pack/plugins/monitoring/public/components/cluster/listing/listing.js @@ -230,6 +230,14 @@ const getColumns = ( ); }, }, + { + name: i18n.translate('xpack.monitoring.cluster.listing.versionColumnTitle', { + defaultMessage: 'Version', + }), + field: 'version', + 'data-test-subj': 'clusterVersion', + sortable: true, + }, ]; }; From 9d1aac60c1005a72a15e3fb3cc34a66510ffe688 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:03:25 -0500 Subject: [PATCH 135/210] [api-docs] 2023-02-21 Daily api_docs build (#151660) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/255 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.mdx | 2 +- api_docs/cloud_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.devdocs.json | 161 ++++++++---------- api_docs/content_management.mdx | 4 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- .../kbn_content_management_table_list.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- 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 +- ...core_saved_objects_api_server_internal.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_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../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_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.devdocs.json | 6 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 6 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/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_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 478 files changed, 550 insertions(+), 577 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 96933145bfd1a..3e926c99476ef 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-20 +date: 2023-02-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 9245052c091e5..8b7c1387882a8 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index bb3492b0d47ac..c0df2688bc350 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-20 +date: 2023-02-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 499a7945a0076..adada612c63f6 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-20 +date: 2023-02-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 f3f795ff3c0c9..0a1ea8fbc3f59 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index f17edc6e906a6..390aea6cfea56 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-20 +date: 2023-02-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 dabb284b2e4a3..bd2371a5e5b5e 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-20 +date: 2023-02-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 a16c0af5f3459..2eb95893c4fb7 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-20 +date: 2023-02-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 144a098e2786f..1a59ab69ccccf 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-20 +date: 2023-02-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 69e52325ae810..419e785e6fa23 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-20 +date: 2023-02-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 b527598cf8c46..f0eeee257c076 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 0dfe68156b3d7..1b66211c3606a 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 0cf526dd9c85e..15a13dd2ba2ad 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-20 +date: 2023-02-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 2c9fd613912e1..1d37f83f96702 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-20 +date: 2023-02-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 9227acec97276..bb69cb33d2319 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-20 +date: 2023-02-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 2241f950c24a7..bb9ab23be4031 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-20 +date: 2023-02-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 4e03f66dd18a3..e7214f8f32f32 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.devdocs.json b/api_docs/content_management.devdocs.json index e07703f73f764..779fcfac4f572 100644 --- a/api_docs/content_management.devdocs.json +++ b/api_docs/content_management.devdocs.json @@ -145,21 +145,21 @@ }, "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/create.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "contentManagement", - "id": "def-common.CreateIn.contentType", + "id": "def-common.CreateIn.contentTypeId", "type": "Uncategorized", "tags": [], - "label": "contentType", + "label": "contentTypeId", "description": [], "signature": [ "T" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/create.ts", "deprecated": false, "trackAdoption": false }, @@ -173,7 +173,7 @@ "signature": [ "Data" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/create.ts", "deprecated": false, "trackAdoption": false }, @@ -187,7 +187,7 @@ "signature": [ "Options | undefined" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/create.ts", "deprecated": false, "trackAdoption": false } @@ -209,37 +209,34 @@ "section": "def-common.DeleteIn", "text": "DeleteIn" }, - "" + "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/delete.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "contentManagement", - "id": "def-common.DeleteIn.contentType", + "id": "def-common.DeleteIn.contentTypeId", "type": "Uncategorized", "tags": [], - "label": "contentType", + "label": "contentTypeId", "description": [], "signature": [ "T" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/delete.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "contentManagement", - "id": "def-common.DeleteIn.data", - "type": "Uncategorized", + "id": "def-common.DeleteIn.id", + "type": "string", "tags": [], - "label": "data", + "label": "id", "description": [], - "signature": [ - "Data" - ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/delete.ts", "deprecated": false, "trackAdoption": false }, @@ -253,7 +250,7 @@ "signature": [ "Options | undefined" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/delete.ts", "deprecated": false, "trackAdoption": false } @@ -275,9 +272,9 @@ "section": "def-common.GetIn", "text": "GetIn" }, - "" + "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/get.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -288,18 +285,21 @@ "tags": [], "label": "id", "description": [], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/get.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "contentManagement", - "id": "def-common.GetIn.contentType", - "type": "string", + "id": "def-common.GetIn.contentTypeId", + "type": "Uncategorized", "tags": [], - "label": "contentType", + "label": "contentTypeId", "description": [], - "path": "src/plugins/content_management/common/rpc.ts", + "signature": [ + "T" + ], + "path": "src/plugins/content_management/common/rpc/get.ts", "deprecated": false, "trackAdoption": false }, @@ -313,7 +313,7 @@ "signature": [ "Options | undefined" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/get.ts", "deprecated": false, "trackAdoption": false } @@ -327,7 +327,7 @@ "tags": [], "label": "ProcedureSchemas", "description": [], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -347,9 +347,9 @@ "section": "def-common.Type", "text": "Type" }, - " | undefined" + "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/types.ts", "deprecated": false, "trackAdoption": false }, @@ -369,9 +369,9 @@ "section": "def-common.Type", "text": "Type" }, - " | undefined" + "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/types.ts", "deprecated": false, "trackAdoption": false } @@ -393,37 +393,37 @@ "section": "def-common.SearchIn", "text": "SearchIn" }, - "" + "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/search.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "contentManagement", - "id": "def-common.SearchIn.contentType", + "id": "def-common.SearchIn.contentTypeId", "type": "Uncategorized", "tags": [], - "label": "contentType", + "label": "contentTypeId", "description": [], "signature": [ "T" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/search.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "contentManagement", - "id": "def-common.SearchIn.params", + "id": "def-common.SearchIn.query", "type": "Uncategorized", "tags": [], - "label": "params", + "label": "query", "description": [], "signature": [ - "Params" + "Query" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/search.ts", "deprecated": false, "trackAdoption": false }, @@ -437,45 +437,7 @@ "signature": [ "Options | undefined" ], - "path": "src/plugins/content_management/common/rpc.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "contentManagement", - "id": "def-common.SearchOut", - "type": "Interface", - "tags": [], - "label": "SearchOut", - "description": [], - "signature": [ - { - "pluginId": "contentManagement", - "scope": "common", - "docId": "kibContentManagementPluginApi", - "section": "def-common.SearchOut", - "text": "SearchOut" - }, - "" - ], - "path": "src/plugins/content_management/common/rpc.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "contentManagement", - "id": "def-common.SearchOut.hits", - "type": "Array", - "tags": [], - "label": "hits", - "description": [], - "signature": [ - "Data[]" - ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/search.ts", "deprecated": false, "trackAdoption": false } @@ -499,21 +461,32 @@ }, "" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/update.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "contentManagement", - "id": "def-common.UpdateIn.contentType", + "id": "def-common.UpdateIn.contentTypeId", "type": "Uncategorized", "tags": [], - "label": "contentType", + "label": "contentTypeId", "description": [], "signature": [ "T" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/update.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.UpdateIn.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "src/plugins/content_management/common/rpc/update.ts", "deprecated": false, "trackAdoption": false }, @@ -527,7 +500,7 @@ "signature": [ "Data" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/update.ts", "deprecated": false, "trackAdoption": false }, @@ -541,7 +514,7 @@ "signature": [ "Options | undefined" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/update.ts", "deprecated": false, "trackAdoption": false } @@ -591,7 +564,7 @@ "signature": [ "\"create\" | \"update\" | \"get\" | \"delete\" | \"search\"" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -608,7 +581,7 @@ "signature": [ "readonly [\"get\", \"create\", \"update\", \"delete\", \"search\"]" ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -620,7 +593,7 @@ "tags": [], "label": "schemas", "description": [], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/rpc.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -640,7 +613,7 @@ "text": "ProcedureSchemas" } ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/rpc.ts", "deprecated": false, "trackAdoption": false }, @@ -660,7 +633,7 @@ "text": "ProcedureSchemas" } ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/rpc.ts", "deprecated": false, "trackAdoption": false }, @@ -680,7 +653,7 @@ "text": "ProcedureSchemas" } ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/rpc.ts", "deprecated": false, "trackAdoption": false }, @@ -700,7 +673,7 @@ "text": "ProcedureSchemas" } ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/rpc.ts", "deprecated": false, "trackAdoption": false }, @@ -720,7 +693,7 @@ "text": "ProcedureSchemas" } ], - "path": "src/plugins/content_management/common/rpc.ts", + "path": "src/plugins/content_management/common/rpc/rpc.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 86289b6f484fd..de9413917e3c1 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.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 | |-------------------|-----------|------------------------|-----------------| -| 42 | 0 | 42 | 3 | +| 41 | 0 | 41 | 3 | ## Client diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 76767eafedcd5..2031219295dc0 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-20 +date: 2023-02-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 d078f40776bfe..a498d9daf1215 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-20 +date: 2023-02-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 c61f643760bca..47ccf22f1d4c0 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-20 +date: 2023-02-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 2e1f0066d887e..5ae45f329d207 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-20 +date: 2023-02-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 36dd1ccf8c417..b1841ff331163 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-20 +date: 2023-02-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 29cce7557e5d6..0bcaf823d1053 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-20 +date: 2023-02-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 c9601b08984ac..2928c1d74b072 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-20 +date: 2023-02-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 75f656bafdee2..1dcd1ce588b5a 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-20 +date: 2023-02-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 e14e5e81de3db..06034d231565c 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-20 +date: 2023-02-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 839366c6a72f9..93c19543506a5 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-20 +date: 2023-02-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 07e8d8ea4d415..de2998519b208 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-20 +date: 2023-02-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 c5a3cb1916567..c1ce80e4c5782 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 67da4dc09d388..b1c36f670e74f 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 7f1d78ce960de..ef311a52fa2a8 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -339,7 +339,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [create_static_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts#:~:text=title), [create_static_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts#:~:text=title) | - | | | [create_static_data_view.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/server/routes/data_view/create_static_data_view.ts#:~:text=title) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/plugin.ts#:~:text=environment) | 8.8.0 | -| | [app_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root.tsx#:~:text=RedirectAppLinks), [app_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root.tsx#:~:text=RedirectAppLinks), [app_root.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root.tsx#:~:text=RedirectAppLinks) | - | +| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root/index.tsx#:~:text=RedirectAppLinks), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/components/routing/app_root/index.tsx#:~:text=RedirectAppLinks) | - | | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/public/context/license/license_context.tsx#:~:text=license%24) | 8.8.0 | | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index b3fe11110da41..9a3512c26dfa5 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 3750aa0bbfca1..e19682fd4a70f 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-20 +date: 2023-02-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 731f54e4bae4a..6af7f3c703902 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-20 +date: 2023-02-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 df26d7a3f63c4..14819947d3e54 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 63ab8db054397..1e6a21f7c8171 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 84f2732b4763f..161766f380f10 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-20 +date: 2023-02-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 77c6ef1cc13ec..efe75258646d6 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-20 +date: 2023-02-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 3a95b8b4588f1..4d58390c80b3c 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-20 +date: 2023-02-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 ccdfb19bce93a..8184578800fdf 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-20 +date: 2023-02-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 66286c65b3b3e..722fe7bde8d81 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-20 +date: 2023-02-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 cf2fb6514cec1..d2f42a849ddb1 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index b46b1c1673882..c0d159cf945b0 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index b1bc04ed2298f..80baa289f0e2e 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-20 +date: 2023-02-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 7c50317ce6567..b9dccdadd3bc3 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-20 +date: 2023-02-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 a1187dc6d0763..5811a29f8bfad 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-20 +date: 2023-02-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 30cd7104a45d2..88bdd4792667e 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-20 +date: 2023-02-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 66c30f6ca11c7..a6caeb0d77c18 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-20 +date: 2023-02-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 da30a1490364d..f43139104ef14 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-20 +date: 2023-02-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 5ab21304bfdf2..93a50653e87f8 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-20 +date: 2023-02-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 4409df31e008a..56a58c391c375 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-20 +date: 2023-02-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 b04d38c25bac8..362ca0c24aea2 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-20 +date: 2023-02-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 2e9e4de423103..72fdf146aa441 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-20 +date: 2023-02-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 f2d2619c6307a..ddbaeb42b1332 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-20 +date: 2023-02-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 fc0f9235a1092..10a0bcb9bf6ad 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-20 +date: 2023-02-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 fbe05b487dc39..a5797770c3a7c 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-20 +date: 2023-02-21 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 3732d359741c6..f43af727a8cc1 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-20 +date: 2023-02-21 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 54edad3a62b9f..9e3bba7f9e307 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-20 +date: 2023-02-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 6da5d6b4d1081..5b0aacb51f4ea 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-20 +date: 2023-02-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 a23f1cf26ae9e..3d3220e6d71d5 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-20 +date: 2023-02-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 2f273447d4f9e..5e5cbfb19c6e9 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-20 +date: 2023-02-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 79d63fdf97fda..675ad45079f83 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-20 +date: 2023-02-21 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 81812b8f19fe1..953b463a74548 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-20 +date: 2023-02-21 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 4eec34b4078f9..6202396e1e7cb 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-20 +date: 2023-02-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 43101fedab1e6..7bbd0b618c908 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-20 +date: 2023-02-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 d72e68287c1f7..b1940dbc190b2 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-20 +date: 2023-02-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 b02019dc3934b..231db4c6bebdb 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-20 +date: 2023-02-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 f5ce120f83aa2..c6c75389f83a3 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-20 +date: 2023-02-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 6de10fdb6beca..ea16aa53a349b 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-20 +date: 2023-02-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 d4f2769034149..704f12fc8722c 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index fe1dd4d34f93c..bca3c11993651 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-20 +date: 2023-02-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 1f006d364686b..17875d743a453 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-20 +date: 2023-02-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 b4f7c361086e2..f9b3a60039b24 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 0d9c2c389305f..c9696a8715dbc 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 2e6a52dd1c380..ab74febebf3da 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index e248e80581a4e..427b8b5e49ce6 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 7c01647a92dbc..e216fcc07dda8 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-20 +date: 2023-02-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 fdd30a59099f1..f635927f86b0b 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-20 +date: 2023-02-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 a4f582b1d6965..e2d5952a3729f 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index be53f47dcb664..f02f5e1c1c212 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-20 +date: 2023-02-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 4b5bea9cb4236..e5d41537a41fd 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-20 +date: 2023-02-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 ba59066cca87f..5c5ef1306ffec 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-20 +date: 2023-02-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 59584a1b0465b..d9b6680f5bc8f 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-20 +date: 2023-02-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_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index dd80a9e7fcd42..4d3dff27228a7 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 2eaa5f30b8baa..635d6bd97cbb2 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-20 +date: 2023-02-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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index a3993b93e2b2a..fafa6c8e15455 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-20 +date: 2023-02-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 92c09d6e41661..4fb4669907449 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-20 +date: 2023-02-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 d220351e7a3c3..0fe3cdd8230a9 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-20 +date: 2023-02-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 6e1cc62cab8bb..2db64454f2fed 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index a013a376ab233..2df6c87d68c6d 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-20 +date: 2023-02-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 712ffeb923cd7..4095c4a302ca3 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-20 +date: 2023-02-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 31408f4502319..3fc4f3a6dfbfa 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-20 +date: 2023-02-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 eba68b2697f4c..cb0ec12455375 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-20 +date: 2023-02-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 a14a8d64e13e8..cbbaab83c591d 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-20 +date: 2023-02-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 61f64964d9119..7b27011a7c775 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-20 +date: 2023-02-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 73403609a9a24..7cc043207929f 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-20 +date: 2023-02-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 dcbedc12127d2..32ef0cd5402a5 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-20 +date: 2023-02-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 579a8c18fe3f7..b732297b203fc 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-20 +date: 2023-02-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_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 10f9a1f8d1616..3af81131ee414 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 0054f02b88b6d..dd9ec036c7ca7 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-20 +date: 2023-02-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 0a97b71138c1f..4482c7f5dff18 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-20 +date: 2023-02-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 d3d8c69026b6d..e1ee7cdc865a9 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-20 +date: 2023-02-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 a0f1fa4a9d9a4..0aa3db7aff995 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-20 +date: 2023-02-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 ba55373185863..02cf81a71786b 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-20 +date: 2023-02-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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index c056c6413ce0b..ea0f9f2e35dc9 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 6794d50e0747a..966d45b50d665 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-20 +date: 2023-02-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 59cfea9ea1b89..39288e860fd13 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 3b50ad6169b8b..fa4f7b3aa1112 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2da32f7c1a6f4..66d85ba70e6ac 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-20 +date: 2023-02-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 3b7d5a3046b27..1c99d0541add8 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 f08cdd12d528e..7d80eb71e06ee 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 402c2297f236b..e940ee965a119 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-20 +date: 2023-02-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 385e097e709db..6c2c21928f147 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 4891aab4f86c7..68468e5fb340b 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 0bee8677e8617..72ee977d01ee9 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-20 +date: 2023-02-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 8345bac27dd6e..3d2f5364882b4 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 3397169accccf..3710af98fb348 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 585bb2ff41528..e880d11da6141 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 38f54791fed0d..9ee2552a2662b 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 e867b8416a9a6..412fdaf7d4956 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-20 +date: 2023-02-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 5fa1fc69984c3..da8667ec9f4a5 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 096e24ce4e432..d6b453ce2cdff 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 13f21613ee0e8..6cf8d2552bcbb 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 58b92d226f0ef..4a0d4e62fcdcb 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-20 +date: 2023-02-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 3db1299b5b4dd..8e0e23e4a006f 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-20 +date: 2023-02-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 340c1b66be40c..8da4a0abfb4f6 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 923f0f68cef77..8220f61b3b760 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-20 +date: 2023-02-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 72823e124ddda..b6abbdc10bce1 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 8c76d4232bfbe..dee1ad581964d 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 d5bfa74abb01e..1ef5500a4a112 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-20 +date: 2023-02-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 4ee3d451240ea..0d1bfd645fd6b 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 575e759e5795b..41652a24b2de2 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 c7b25a59588fc..510c39c764001 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-20 +date: 2023-02-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 a536f2e761c00..41c69f6a08c32 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-20 +date: 2023-02-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 47a6e6b3ab8aa..bc2b2aff1d9af 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 91cffaf9c59c8..627967fc335b4 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 df24e33e30631..8ef75740987eb 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-20 +date: 2023-02-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 a4e7199abbab7..7901f9a98a7e4 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 91d5ef4e27505..e2d7bcda0a2a9 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 feafe5f535402..40bb2bbfc1b85 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-20 +date: 2023-02-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 e4e584660a257..27b6d914c85f6 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-20 +date: 2023-02-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 b2998949e2783..bc66b55f84bc6 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 d791f8dc091db..8a9ccdacf34fe 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 d7272b8702452..32f0252b272b9 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-20 +date: 2023-02-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 8cc9314588852..c525c3a50c64d 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 c44141272426e..abb6ba6f2cfec 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-20 +date: 2023-02-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 f956481be6799..e3b7db75215b8 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 d4ea13c09b843..ac9a8ab04a956 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 d21e5a8fdbfbe..1b841b939d068 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 de4d748698836..ff9026332740a 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-20 +date: 2023-02-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 948c593757bfb..ff08543c85012 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 d41844afd3667..b489cb0a0e5fc 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 a82f0f9fb2423..41eb176aeb1b1 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 47311134bd641..da9070bbd9d5b 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 4cebaebc37152..91a1eb7e95d14 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-20 +date: 2023-02-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 11861857533ec..4ac62f82f9a47 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 6671aa66b6244..5a3747e4e07f2 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 0848747995860..0732a260a34ce 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-20 +date: 2023-02-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 f1a3588ab5619..20f52ba6731eb 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-20 +date: 2023-02-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 49bc1e0fc5956..124a09ff69906 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 83470e1ce70bd..f519ee25f8939 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 e7fe23a1f923d..affcecc3d105c 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-20 +date: 2023-02-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 6050c6460c640..09744283fb995 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 ba0462eb73dd5..9ae008e7d011a 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-20 +date: 2023-02-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 1cc849bbacc6d..24b19ae8f1d73 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 5733e4c1b131f..0dc8effe9371b 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 468e3ee8565da..193eb2c930e79 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-20 +date: 2023-02-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 881296bbabfa0..5ce70258f0b49 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 187fbc64a729f..144b306e15894 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-20 +date: 2023-02-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 8bbdf13209a8f..a83b82030ec1c 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-20 +date: 2023-02-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 37d4699472358..c1ae8be00852a 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 34c5f35f98a46..ec2499cd82c66 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 1f2b2f9a594ec..0e95e8581367e 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 b2ba7568155f3..292c9086ece26 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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.mdx b/api_docs/kbn_core_http_server.mdx index 8f8561a7aba19..d06fc41f1decb 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-20 +date: 2023-02-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 fb8fb86f0b642..5f70eaeac6401 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 439a62eb454a8..6812b745be87e 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 254d6e4076e3a..b51b90da236ea 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-20 +date: 2023-02-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 5bddf2b09444a..f0197ce673b94 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 b66acca16e868..bc9fbd36bef6d 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-20 +date: 2023-02-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 a5e8f868ac9c9..5608bbe492830 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 27089b3d906c0..0396bf48da5d1 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 e8cf6e6aae8bf..179135ccbfd40 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 697a11b2eddbd..d459bf1aeaa3a 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 54f1ca99a5ad2..205ac88f5e470 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 c2014b28f71ee..6d6d9a2bb00f2 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-20 +date: 2023-02-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 7c80bb07cb26c..306399cce5929 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 fad5102dbb5de..c53509c3542d8 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-20 +date: 2023-02-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 7dbd79ffb7ff8..b08743a11140a 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2db94746fdada..b6e432314e9bb 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 206c465c9e888..c78fcd55ebefc 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-20 +date: 2023-02-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 9c3ca307d4cd9..939b44ee1b714 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-20 +date: 2023-02-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 c4716ff3b5e99..8053ab596c478 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 21ea3efb9569a..140fd197caed0 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 c8fefef62dc69..d36475ee881a3 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 b882b6e8b8d09..1daf6aad8e8fe 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 d5409904bcc24..10e6282332ea7 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-20 +date: 2023-02-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 41328cc8fbd85..43685ad91870f 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 7836063fa6cec..069d9964aaae0 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2337624574bc0..8acfeb3f25e3c 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-20 +date: 2023-02-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 22a38393679d6..4c64ebacd23f6 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-20 +date: 2023-02-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 a2007c5386244..6e24319a666e3 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 c60b5c9c38a16..c65c52f49f473 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 1ccd35eb88e8c..77a16b07643c2 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-20 +date: 2023-02-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 2cdd40c239d7b..26a3363d26fbc 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 f380380f53402..47a6777732623 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2c00bd8dca498..46f1c5fc8196c 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-20 +date: 2023-02-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 28113ba2fe8ad..fade1b5a20320 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 1fdbdce8c4a23..339686def13c0 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 e248aa8631ed6..92bea55f56f76 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-20 +date: 2023-02-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 9236ee535e234..33347b183b6a7 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index ba32494cdb58f..4ff83cf8191d2 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-20 +date: 2023-02-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 506717032999a..dc367f111add3 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 3cc348974e927..e0d550041cfc5 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-20 +date: 2023-02-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 fa8262c2d3542..e4b629ab32037 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2069bb04969c7..2b735abc2620b 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 4243dc0cacebd..8c265cb3c7e6c 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 70f8cf8840a44..06b40ffd1cdb3 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 e9839c3450547..a060864d5066e 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 fc1934655900f..f0edb4776f5ad 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-20 +date: 2023-02-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 cd839fc3de5ef..a7cde7f878840 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-20 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 783344c8123bc..8b9e4f3ba610b 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 6dbad2dc6fd45..f73eab4ae5a5b 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 d4a63a654ffce..3a7bbd2e54977 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 9b7180a6446b9..1bfa37135bf73 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 f863ae6c716aa..c9f7d61a8cd39 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-20 +date: 2023-02-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 50e26a8049b8d..50387786c60ff 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 b28cbcc1b8df8..8605324724902 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 5f5d9c3d1521b..0e20bceeb2556 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-20 +date: 2023-02-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 36929b9fb2dbe..9284ecaae1c2e 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 90371d4dae687..7b3b9b8536d31 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 c806ca6d8d6b5..32f3c5b7b6655 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 c57db751a98be..a1d597c1c6fe5 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 32334fdaf08cc..3d87c55f1428c 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-20 +date: 2023-02-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 5413f47fd6c2d..d56b7f4bbfd15 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 4c73e2b6ed011..4404fda72564c 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 51df7a6ea6fd2..7ce5cb45bdeb1 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-20 +date: 2023-02-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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index be111450ce9a5..9c64990d286b0 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-20 +date: 2023-02-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 ac48c40ffd285..424888c8aa2b6 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-20 +date: 2023-02-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 b9d3a17c1442a..6477075fa3bfc 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-20 +date: 2023-02-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 71104c5e2d289..6782772b8c228 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 263625bc6cfd0..4b77a88937a30 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 90817a5473fc9..ae5239538d38d 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-20 +date: 2023-02-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 e6009d0995990..f70e4c3534ed7 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-20 +date: 2023-02-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 e43fd87bc9857..14d9281233b2e 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-20 +date: 2023-02-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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 5c8fc8c91633a..0270000c32ef3 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-20 +date: 2023-02-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 9ee03c0b713a0..996595528a76e 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-20 +date: 2023-02-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 c4fd5f82dd5fb..68891b4c19a72 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-20 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 8d000ef75965c..ec326db54267f 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index fe3f00483029d..12ceb96f1f953 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 f69ddbe2db500..1433e8e0b8451 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-20 +date: 2023-02-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 743fc5026fd7c..ce0be9d0eecfc 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-20 +date: 2023-02-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 7a89d13887060..b56e363c1707b 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2685042c99ca3..4383dc30150f4 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-20 +date: 2023-02-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 0b6d0ef4a8fd0..141a3b67487b1 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-20 +date: 2023-02-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 7a5541618570b..0b18ce294fb2e 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 ed632bac6923d..cb352de9c7071 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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 cec5693f18e8c..4a7b514af95dd 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-20 +date: 2023-02-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 0f7563155a215..0ba98d7e11377 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-20 +date: 2023-02-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 a9f2c6ec8ccd1..e711636756b4a 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-20 +date: 2023-02-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_crypto.mdx b/api_docs/kbn_crypto.mdx index 17c1f8bddcd13..0eb371a73845b 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-20 +date: 2023-02-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 b87b7f5a394ff..ed21fc5391ab5 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 21fc0de49ac44..ea9449b2b1c96 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 016d420304c3c..3908f6b4f8204 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index e8d91700308ab..3cfd155383384 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-20 +date: 2023-02-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 ed922c8ff936b..37baabb24a6eb 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-20 +date: 2023-02-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 1ade2ba9083af..33e17e03beb13 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-20 +date: 2023-02-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 e24854d638e66..e44589c5ad5c8 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 1d4b2205eb970..004ce641602e4 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-20 +date: 2023-02-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 83d780b1c79a7..ed1b9fa7f8442 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 6f49285595010..49148bf13e43e 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 233b7dfe75200..488cebb89a3b6 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 38e09e65f8481..f0092b0f8bb11 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-20 +date: 2023-02-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_es.mdx b/api_docs/kbn_es.mdx index b330e06b57d90..de79ec32efbca 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-20 +date: 2023-02-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 599019cc009fe..2f5e0c942eb0f 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-20 +date: 2023-02-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 fd0f157c395f0..93fa195ba86cd 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-20 +date: 2023-02-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 95ceda0aae49f..22bee16d0585c 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-20 +date: 2023-02-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 26cec9c4ab5d2..16e8ec6d3ae5c 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-20 +date: 2023-02-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 53fcc95d2dff5..0837f234cf360 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-20 +date: 2023-02-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_field_types.mdx b/api_docs/kbn_field_types.mdx index 226a8dacd1d5e..8213f9ee28f66 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index f27d225848341..68e4f0d3116fb 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-20 +date: 2023-02-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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 7dd9c9efcbb07..affa92183f493 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-20 +date: 2023-02-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_generate.mdx b/api_docs/kbn_generate.mdx index 3f992668fc267..3fd8dc4fad5c3 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index d054c64b034df..5e2a8257212e6 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-20 +date: 2023-02-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 a63a0044ee9ef..dfcaeb8177ede 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-20 +date: 2023-02-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 363afd715ec82..d832fa1f08892 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-20 +date: 2023-02-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 5ce3a5a53cb4f..904c8e9030cd9 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-20 +date: 2023-02-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 efb81282a2eb8..64a8be7ee09a6 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-20 +date: 2023-02-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 7bcfea3f992ba..6055316ebaff3 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-20 +date: 2023-02-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 f7f0d79b51896..2cb9c9a8cfa3a 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-20 +date: 2023-02-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 6cad7a308521e..9ff4b65f97fcc 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-20 +date: 2023-02-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 ee11d3b98e916..40b31612ad951 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 71acbdfceccde..abc36c4c5455c 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-20 +date: 2023-02-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 0732beddbe3d5..1e18a8d3b7586 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-20 +date: 2023-02-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_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 1bdc744fda561..234d28e295b15 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-20 +date: 2023-02-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 04d6a5f8aea23..c85a757c4ed59 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-20 +date: 2023-02-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 a32ec42a31a58..97a034693722e 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-20 +date: 2023-02-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 ea5124de46380..ae7075c556124 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-20 +date: 2023-02-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 525debe3e59ba..78b6689e3620b 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-20 +date: 2023-02-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_logging.mdx b/api_docs/kbn_logging.mdx index 58f742823501a..b52baaa950073 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-20 +date: 2023-02-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 ba54bee88a96c..0f17dea4d5288 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 55a53849b7308..09afe4a531470 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-20 +date: 2023-02-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_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index ba4c25cde7863..87352e3142191 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index d2d69b0da539f..0b2ad6dcde023 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-20 +date: 2023-02-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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index a430bf20343ef..b5a408b845b23 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-20 +date: 2023-02-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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 70338f98822a5..a17bf71066b85 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-20 +date: 2023-02-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 5105e44223eb5..de78d68d1e53e 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-20 +date: 2023-02-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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index a89a4551ddce1..41209eacc44a6 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-20 +date: 2023-02-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 e1746a6af92c5..9e80df4909ede 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-20 +date: 2023-02-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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index ff82185705640..6bc362697e9a2 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-20 +date: 2023-02-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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 813472f4b7e1a..596fe6523a2d2 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-20 +date: 2023-02-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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index c08356c6aed9e..99b64dfadbf3a 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-20 +date: 2023-02-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_monaco.mdx b/api_docs/kbn_monaco.mdx index cf5582c8a82b5..9a2501165adad 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 7a6ab5045eeb3..447ef2dddf8e1 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-20 +date: 2023-02-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 e64a36bcb6aed..b1f02f021a94e 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-20 +date: 2023-02-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 420e450af5048..f12bb05c5e02a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-20 +date: 2023-02-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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 4b85392dadaf9..bc4d50e4a8ec0 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-20 +date: 2023-02-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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 67793b2036afe..6b2260140b27b 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-20 +date: 2023-02-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 af30584b14b70..0b7384d58217f 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index c27921942567b..e38e032918779 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 2b66983b04631..18856c87584df 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-20 +date: 2023-02-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 a2ef5fb848975..139bc59f09efd 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-20 +date: 2023-02-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 72baaba52cb39..450ab51bb769e 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-20 +date: 2023-02-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 62200ce2a6b29..a3afc7e6e394c 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-20 +date: 2023-02-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_rison.mdx b/api_docs/kbn_rison.mdx index 0216b143ac1a9..ef8fbeddce1b6 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 30ad77ec97405..ce2c207c44cb9 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-20 +date: 2023-02-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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 40af692a950d0..213798600769a 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 4d94d4095eb5e..add3cfd3ddcb2 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-20 +date: 2023-02-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 a2fd7b4e0bc3d..e1e4d7c386a6a 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-20 +date: 2023-02-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 82368f6a96acc..4a2c126f2c3f4 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-20 +date: 2023-02-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_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 804da6b8b59f1..741e6e52093bc 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-20 +date: 2023-02-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 2f35df6a1d133..d64bd39381a14 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-20 +date: 2023-02-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 67e90cc95d773..c1933b1d716a9 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-20 +date: 2023-02-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 a5d651b4b73e5..d18659ef45b36 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-20 +date: 2023-02-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 8c2fd8fe460fe..7830db8ad32bf 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-20 +date: 2023-02-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 dfb5e1df613fe..959df4c94ed3d 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-20 +date: 2023-02-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 b0e2d13e37dc1..edfb2c6cdcc37 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-20 +date: 2023-02-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 34e05a010e1eb..8fa3a18ea5633 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-20 +date: 2023-02-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 e029f7d05eb0c..a93c450c85fcf 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-20 +date: 2023-02-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 59dca2e61fd41..940401dcb1966 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-20 +date: 2023-02-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 b9e30ed72e87d..455c90cf9eae3 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-20 +date: 2023-02-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 4379fd7e5c371..ee287d3470065 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-20 +date: 2023-02-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 e8d800c098ac7..1b5ebe0ee3ab9 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-20 +date: 2023-02-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 ca2e84fe82070..20564c2a15c2c 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-20 +date: 2023-02-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_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 3d0c72ac5dc58..8dd64775f30e8 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-20 +date: 2023-02-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 abce5645028cc..6cfe61898f43f 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-20 +date: 2023-02-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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index 5433748a7b71b..af72da48648c7 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index a91862543c204..9a1487ae5aca8 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-20 +date: 2023-02-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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index ffe2da716ebe4..8b7a45e188408 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index b26cd11051781..84d5531642146 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-20 +date: 2023-02-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 f898b1e0b3578..d6b422d937535 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-20 +date: 2023-02-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 ccd74e7cf5a37..08f0073f79005 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-20 +date: 2023-02-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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index f2743044d191c..98e19c9f6c08e 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-20 +date: 2023-02-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 5a91d401f37ef..e0f939a4b42ac 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-20 +date: 2023-02-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 c3a77f79eb091..bfd3ddd58aef3 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-20 +date: 2023-02-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 c2c6c39d6955c..0e75a42baf3a8 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-20 +date: 2023-02-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 9a5a45fc60559..98cc4fdf9bf71 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-20 +date: 2023-02-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_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 188f080a22918..0a87ef2e49859 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-20 +date: 2023-02-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 7b0295303f1ae..41a8a4bc37989 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-20 +date: 2023-02-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 00c5e6218d5fd..b925d3df6c55e 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-20 +date: 2023-02-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 a9a14665cb611..c01f812af5a4b 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-20 +date: 2023-02-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 58ae69c930830..4b68fa6dc58ca 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-20 +date: 2023-02-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 f18eba3b6f0d2..1c703a2369b3c 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-20 +date: 2023-02-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 a49324cf8ceac..3768fbcd49cc6 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-20 +date: 2023-02-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 4740dfb66c8d7..6b1e2b8a5984b 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-20 +date: 2023-02-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 6c66d0ca50fa9..ec00c6ac80b1a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-20 +date: 2023-02-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 8ef50a3f4ebfe..42ab9f9f06b3b 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-20 +date: 2023-02-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 9d048a043ca0e..16b4ac7220b90 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-20 +date: 2023-02-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 880fc2a69fbfd..bdb90364b95ee 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-20 +date: 2023-02-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 2fe3dd235c3aa..120916cd68c1d 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-20 +date: 2023-02-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 11baa2035383a..eb96fd40af573 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-20 +date: 2023-02-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 f6344bb78377b..b6d1deae0b930 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-20 +date: 2023-02-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 5a745b342ee54..f427553fea303 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-20 +date: 2023-02-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 5e6f0b6822a38..d3cedcf51828e 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-20 +date: 2023-02-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 cb9c14bd9d02d..26a062a60edee 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-20 +date: 2023-02-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 c70969fe98c4d..b39d624eb71e4 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-20 +date: 2023-02-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 4b0b162f5581e..66fac2533b311 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-20 +date: 2023-02-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 8f8ab282de35f..35cc667e36f5a 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-20 +date: 2023-02-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 ccebdf6448785..049ebcb17cb97 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-20 +date: 2023-02-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 5d0b1207865c9..be11e8095ce12 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-20 +date: 2023-02-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 435b73883ddd5..0d993dc36582b 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-20 +date: 2023-02-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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 59ed50b9dd653..08ebaf46f88dc 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-20 +date: 2023-02-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 868fa725e6fe8..3c3692c849172 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index e27aed6e01387..471d20db13daf 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-20 +date: 2023-02-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_std.mdx b/api_docs/kbn_std.mdx index 76f8a35a5297a..6af2033dfd0e7 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-20 +date: 2023-02-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 426333f87db2b..2fa8c47bf0f20 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-20 +date: 2023-02-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 2e62629ecfcea..013b04a6ab6a3 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-20 +date: 2023-02-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 5921d55260350..6487d555a588c 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-20 +date: 2023-02-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 a50dd34fee731..0e7fb7d9c2538 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 234fa0505f8a5..355290bae78bf 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-20 +date: 2023-02-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 1e757612e0bc8..5443337f7498c 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-20 +date: 2023-02-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_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index e5710c6b20438..1987689104e19 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index a8dc0bf221cd9..5b5f002032916 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-20 +date: 2023-02-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 672262ec1bbf6..e8c2d9140e38d 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-20 +date: 2023-02-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 6701da7ac1271..4f630f5bb6c26 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-20 +date: 2023-02-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 e2442efde5d40..590c9f141a32c 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-20 +date: 2023-02-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 fcdb05e485bf1..2d95a6167fe2b 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 1209a4e7d95cb..9c162f36e195c 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-20 +date: 2023-02-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 cd795d56fae98..9e569eb13c66f 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-20 +date: 2023-02-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 54965902c245f..28c69ad56caa3 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-20 +date: 2023-02-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 521a0ce780a38..a81f4e3a573cb 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index a6fdd0dab15f2..0c8e51749bce7 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 57a85165c0966..471920263bfca 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 2ed468ecd418c..3569fa25e46b4 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -1354,15 +1354,15 @@ }, { "plugin": "apm", - "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx" + "path": "x-pack/plugins/apm/public/components/routing/app_root/index.tsx" }, { "plugin": "apm", - "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx" + "path": "x-pack/plugins/apm/public/components/routing/app_root/index.tsx" }, { "plugin": "apm", - "path": "x-pack/plugins/apm/public/components/routing/app_root.tsx" + "path": "x-pack/plugins/apm/public/components/routing/app_root/index.tsx" }, { "plugin": "enterpriseSearch", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 448b48f068ea7..a1cd10b5d2323 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-20 +date: 2023-02-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 1b5db05b11475..443a6f043921b 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-20 +date: 2023-02-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 1942ccdb117a9..16cacfa325773 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-20 +date: 2023-02-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 c09f062ed8156..b5294a551334e 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-20 +date: 2023-02-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 5d81f88672dac..40ce8a38d116e 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-20 +date: 2023-02-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 40e68e76b0622..77bedb1b11517 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-20 +date: 2023-02-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 237cd7f685687..8ebf24f36e2e5 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 8628ea7da9c3c..561435c2be514 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 56fb05b98a355..6d6bbc6a02f26 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-20 +date: 2023-02-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 ec16183e6ffcd..f02a89ac26fcb 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-20 +date: 2023-02-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 e4bb2ce719c9b..3eb4448752b3e 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 37803bba12b4b..6635a01a23bb7 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index fcbd35d894f05..228899752c821 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-20 +date: 2023-02-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 e7de2e1022c2c..76588c2a1f27a 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-20 +date: 2023-02-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 51532d9b55306..c1ef320f6acc1 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-20 +date: 2023-02-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 8e1508e041a0b..9a21cb27a02d1 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 1d4520887d226..9c86e4b570f5f 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-20 +date: 2023-02-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 6a6bb5fd855c3..920856da040ca 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index e7d333db5a41d..18a3338a0bd36 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index cfadf8f4aed06..c859b841720ff 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 67652 | 515 | 58482 | 1232 | +| 67651 | 515 | 58481 | 1232 | ## Plugin Directory @@ -47,7 +47,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | cloudLinks | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 17 | 0 | 2 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 13 | 0 | 13 | 1 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 42 | 0 | 42 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 41 | 0 | 41 | 3 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 270 | 0 | 266 | 9 | | crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index b7f4d8e01ee74..b9618c23b8f65 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-20 +date: 2023-02-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 a723cb7c9f0f8..db28fdc75ba51 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 0c8a768fb2076..df53b30d642e5 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-20 +date: 2023-02-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 7a6482f49f79a..9cb366395527d 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-20 +date: 2023-02-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 2318817871ec7..a253b1d85aad9 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-20 +date: 2023-02-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 dd24ee33abea2..ba86ab2579e90 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-02-20 +date: 2023-02-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 3f393b8162f13..d99378636a54d 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-02-20 +date: 2023-02-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 69d2a95675288..55e0c212706fa 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-02-20 +date: 2023-02-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 a50830e5d6427..e6dbc3297abf6 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-02-20 +date: 2023-02-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 3e6fdb23513c8..a35cca4bae9ab 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-02-20 +date: 2023-02-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 c5c98aa5fd26e..d00586ff065d2 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-02-20 +date: 2023-02-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 c3dfdf396c4dd..074359af3e0aa 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-02-20 +date: 2023-02-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 a071dfa95de2a..e78551708a4c2 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-02-20 +date: 2023-02-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 b9d468ad1e489..a7f7297614f91 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-02-20 +date: 2023-02-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 524d3224bd97c..2c15986ab2c9e 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 464007edd638c..70191ab01dddd 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-20 +date: 2023-02-21 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 7da4fe95a9723..7d8ff51f0d821 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 79c633e929cbe..753021b212885 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-20 +date: 2023-02-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 d65b70b25bee2..0a2150f3472a8 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 2065e157190ed..a07946b0b092d 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-20 +date: 2023-02-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 3e6c947d7c190..cc10d7b96133a 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-20 +date: 2023-02-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 2f77771cabddf..fba351dcf90a6 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-20 +date: 2023-02-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 65d4034f1c4c7..1e632a9600bba 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-20 +date: 2023-02-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 2b33c780b1dc8..8e881116157f5 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-20 +date: 2023-02-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 4f1012c941b03..8a6bbb9e3cbaa 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-20 +date: 2023-02-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 95f467111ce28..0c6893e47cc3a 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-20 +date: 2023-02-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 683cf622bea2e..58d6865457bff 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-20 +date: 2023-02-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 c833009c2b659..8d75936a263a8 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 6f55313cd5594..6349f41c5699b 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-20 +date: 2023-02-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 e46738830f917..de4bac799f58a 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-20 +date: 2023-02-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 9ef7ff44da039..76a65f5eb8c92 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-20 +date: 2023-02-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 71aad35bb2d2d..0cd2f8955e1a1 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-20 +date: 2023-02-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 4b0d58ddbbaba..4125cdb045e35 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-20 +date: 2023-02-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 5efedf944a46b..eea96407dace6 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index 411406ee78739..34d2c09362829 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index ad91b5ff5c8eb..ddc71d4cfd0b3 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-20 +date: 2023-02-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 d59df28cf25fd..651e8c93786c9 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-20 +date: 2023-02-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 bc7d7b7f6caec..e5bcf93633d3f 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 51809fb7f2ba8..73feec578abc9 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-20 +date: 2023-02-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 de86a5db1a5b5..35aae853c2e12 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-20 +date: 2023-02-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 24ee835704a01..3b184cd0f3e92 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-20 +date: 2023-02-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 a0e7e6b0bf29e..c1909f3b2ff58 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-20 +date: 2023-02-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 32ab661386964..d0eb416f6c0b0 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-20 +date: 2023-02-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 b3a96b9133305..e12b5502a0c0f 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-20 +date: 2023-02-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 3370f0f1880a2..444127e1ec286 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-20 +date: 2023-02-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 af0471e1a18be..8b4667ed7e8b3 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-20 +date: 2023-02-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 c9bce3f960b76..72a47efd044dd 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-20 +date: 2023-02-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 3ce2e96e27a66..e45229f25e088 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-20 +date: 2023-02-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 4f6cced591c3a..10248e6aa1b28 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-20 +date: 2023-02-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 44ed4f77a5bf0..f1761d76647b8 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-20 +date: 2023-02-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 d4b132c817135..01232bd409ecd 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-20 +date: 2023-02-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 a1f81f986bf99..fb6fa4c55159c 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-20 +date: 2023-02-21 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From d841c93ede0ba1a196efa67fe4ec2d2d59dd7619 Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Tue, 21 Feb 2023 08:15:13 +0100 Subject: [PATCH 136/210] [Fleet] added missing content type application/gzip to openapi (#151566) ## Summary Related to https://github.com/elastic/kibana/issues/148599 Added missing `application/gzip` content type to openapi for packages upload API. --- x-pack/plugins/fleet/common/openapi/bundled.json | 6 ++++++ x-pack/plugins/fleet/common/openapi/bundled.yaml | 4 ++++ x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index f535bad37c6c2..93d0673faa6ba 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -435,6 +435,12 @@ "type": "string", "format": "binary" } + }, + "application/gzip": { + "schema": { + "type": "string", + "format": "binary" + } } } } diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 7dcc4ba9610d2..2ce0a08ef8158 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -281,6 +281,10 @@ paths: schema: type: string format: binary + application/gzip: + schema: + type: string + format: binary /epm/packages/_bulk: post: summary: Packages - Bulk install diff --git a/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml b/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml index d3ef2a279494e..b44ab7e9b8168 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/epm@packages.yaml @@ -80,6 +80,10 @@ post: requestBody: content: application/zip: + schema: + type: string + format: binary + application/gzip: schema: type: string format: binary \ No newline at end of file From 8111d87ee98797b53b86dc6a673bc13d1bad6ab2 Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Tue, 21 Feb 2023 08:17:34 +0100 Subject: [PATCH 137/210] [Fleet] fix nullable timeout query params in agent_policies API (#151553) ## Summary Fixes https://github.com/elastic/kibana/issues/151525 OpenAPI was set to nullable for `unenroll_timeout` and `inactivity_timeout`, but the `null` values were not actually accepted. Fixed that by changing `schema.maybe()` to `schema.nullable()`. EDIT: On a second look, I think rather the OpenAPI should be updated, so that these are not nullable fields, but rather optional. Nullable doesn't work well with setting default values (which we want for `inactivity_timeout`). ``` POST kbn:/api/fleet/agent_policies { "data_output_id": null, "description": "Collect windows event logs.", "download_source_id": null, "fleet_server_host_id": null, "monitoring_output_id": null, "name": "Windows4", "namespace": "default" } { "item": { "id": "c1ac4bf0-aea3-11ed-810e-a1ed2deae3ac", "data_output_id": null, "description": "Collect windows event logs.", "download_source_id": null, "fleet_server_host_id": null, "monitoring_output_id": null, "name": "Windows4", "namespace": "default", "inactivity_timeout": 1209600, "status": "active", "is_managed": false, "revision": 1, "updated_at": "2023-02-17T09:16:27.055Z", "updated_by": "elastic", "schema_version": "1.0.0" } } ``` --- x-pack/plugins/fleet/common/openapi/bundled.json | 6 ++---- x-pack/plugins/fleet/common/openapi/bundled.yaml | 2 -- .../common/openapi/components/schemas/new_agent_policy.yaml | 2 -- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index 93d0673faa6ba..18096816da32d 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -5734,12 +5734,10 @@ "nullable": true }, "unenroll_timeout": { - "type": "number", - "nullable": true + "type": "number" }, "inactivity_timeout": { - "type": "number", - "nullable": true + "type": "number" } }, "required": [ diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 2ce0a08ef8158..6aa226c302d18 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -3651,10 +3651,8 @@ components: nullable: true unenroll_timeout: type: number - nullable: true inactivity_timeout: type: number - nullable: true required: - name - namespace diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml index 4dcd8681ac0ea..2edab88c70490 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/new_agent_policy.yaml @@ -30,10 +30,8 @@ properties: nullable: true unenroll_timeout: type: number - nullable: true inactivity_timeout: type: number - nullable: true required: - name - namespace From d5674c70afcaabf57551a73dcfe711f94140e5fd Mon Sep 17 00:00:00 2001 From: Boris Kirov Date: Tue, 21 Feb 2023 09:54:00 +0100 Subject: [PATCH 138/210] Update tooltip diff flamegraph (#151625) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary We recently reviewed the final copy for the `Normalize by` menu in the Diff Flamegraph with the writing team and we have the final copy that we will use there. This PR is aiming to update that. Related to: https://github.com/elastic/kibana/pull/151437 --------- Co-authored-by: Tim Rühsen --- .../components/flame_graphs_view/normalization_menu.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx b/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx index 17d4bfefea294..9a6eaba2af677 100644 --- a/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx +++ b/x-pack/plugins/profiling/public/components/flame_graphs_view/normalization_menu.tsx @@ -156,7 +156,7 @@ export function NormalizationMenu(props: Props) { 'xpack.profiling.flameGraphNormalizationMenu.normalizeByTimeTooltip', { defaultMessage: - 'To compare a set of machines over time periods of different lengths (for example: Compare the last hour against the last 24h), choose Normalize by Time. The number of samples on the shorter timeframe will be multiplied to match the longer timeframe (in this example, by 24).', + 'Select Normalize by Scale factor and set your Baseline and Comparison scale factors to compare a set of machines of different sizes. For example, you can compare a deployment of 10% of machines to a deployment of 90% of machines.', } )} @@ -167,7 +167,7 @@ export function NormalizationMenu(props: Props) { 'xpack.profiling.flameGraphNormalizationMenu.normalizeByScaleTooltip', { defaultMessage: - 'To compare differently-sized sets of machines (e.g. a deployment on 10% of machines against a deployment on 90% of machines), choose Scale Factor and provide an appropriate factor to multiply the right-hand side with.', + 'Select Normalize by Time to compare a set of machines across different time periods. For example, if you compare the last hour to the last 24 hours, the shorter timeframe (1 hour) is multiplied to match the longer timeframe (24 hours).', } )} From 94c95431d71b3c67fc8b21f53cf0c21a8bf474c1 Mon Sep 17 00:00:00 2001 From: jennypavlova Date: Tue, 21 Feb 2023 10:20:12 +0100 Subject: [PATCH 139/210] Hosts landing page: Dark/Light mode image change (#151623) Closes [#149626](https://github.com/elastic/kibana/issues/149626) ## Summary This PR changes the image on the hosts landing page and adds a dark-mode image. Screenshot 2023-02-20 at 15 17 55 Screenshot 2023-02-20 at 15 16 58 ## Testing Go to Hosts Page (in order to see the landing page you need to disable hosts view in Advance settings) image Check the image on the landing page (Switch dark/light mode in Advance settings) image --- .../enable_hosts_view_page.tsx | 13 +- .../hosts_landing_beta.svg | 920 ------------------ .../hosts_landing_beta_dark.svg | 9 + .../hosts_landing_beta_light.svg | 9 + 4 files changed, 29 insertions(+), 922 deletions(-) delete mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg create mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg create mode 100644 x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx index 886de82f1e9b8..ccdcb30e65821 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/enable_hosts_view_page.tsx @@ -11,8 +11,10 @@ import { css } from '@emotion/react'; import { useEuiBackgroundColor } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { useTrackPageview } from '@kbn/observability-plugin/public'; +import { useUiSetting } from '@kbn/kibana-react-plugin/public'; import { MetricsPageTemplate } from '../../../page_template'; -import hostsLandingBeta from './hosts_landing_beta.svg'; +import hostsLandingBetaLight from './hosts_landing_beta_light.svg'; +import hostsLandingBetaDark from './hosts_landing_beta_dark.svg'; import { ExperimentalBadge } from '../../../../../components/experimental_badge'; interface Props { @@ -21,6 +23,7 @@ interface Props { export const EnableHostsViewPage = ({ actions }: Props) => { const backgroundColor = useEuiBackgroundColor('subdued'); + const isDarkMode = useUiSetting('theme:darkMode'); useTrackPageview({ app: 'infra_metrics', path: 'hosts_feature_enable_landing_page' }); useTrackPageview({ @@ -41,7 +44,13 @@ export const EnableHostsViewPage = ({ actions }: Props) => { } alignment="center" - icon={} + icon={ + + } color="plain" layout="horizontal" body={ diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg deleted file mode 100644 index 832b7fd689bce..0000000000000 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta.svg +++ /dev/null @@ -1,920 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg new file mode 100644 index 0000000000000..221076d4fe290 --- /dev/null +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg new file mode 100644 index 0000000000000..00d5aa123db8e --- /dev/null +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/enable_hosts_view_page/hosts_landing_beta_light.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 6682bfd7bccb12f926038520d0ae9a9906f6db94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 21 Feb 2023 10:22:06 +0100 Subject: [PATCH 140/210] [Usage Collection] Reuse concurrent collectors (#151626) --- .../server/collector/collector_set.test.ts | 52 +++++++++++++++++++ .../server/collector/collector_set.ts | 33 ++++++++---- 2 files changed, 75 insertions(+), 10 deletions(-) diff --git a/src/plugins/usage_collection/server/collector/collector_set.test.ts b/src/plugins/usage_collection/server/collector/collector_set.test.ts index bf3381c4510d3..56b4e55eccfc4 100644 --- a/src/plugins/usage_collection/server/collector/collector_set.test.ts +++ b/src/plugins/usage_collection/server/collector/collector_set.test.ts @@ -601,5 +601,57 @@ describe('CollectorSet', () => { expect.any(Function) ); }); + + it('reuses ongoing collectors for subsequent calls', async () => { + const fetchMock = jest.fn( + () => new Promise((resolve) => setTimeout(() => resolve({ test: 1000 }), 100)) + ); + + collectorSet.registerCollector( + collectorSet.makeUsageCollector({ + type: 'slow_collector', + isReady: () => true, + schema: { test: { type: 'long' } }, + fetch: fetchMock, + }) + ); + + const mockEsClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + const mockSoClient = savedObjectsClientMock.create(); + + // Call bulkFetch twice concurrently + await Promise.all([ + collectorSet.bulkFetch(mockEsClient, mockSoClient), + collectorSet.bulkFetch(mockEsClient, mockSoClient), + ]); + + // It should be called once + expect(fetchMock).toHaveBeenCalledTimes(1); + }); + + it('calls completed collectors on subsequent calls', async () => { + const fetchMock = jest.fn( + () => new Promise((resolve) => setTimeout(() => resolve({ test: 1000 }), 100)) + ); + + collectorSet.registerCollector( + collectorSet.makeUsageCollector({ + type: 'slow_collector', + isReady: () => true, + schema: { test: { type: 'long' } }, + fetch: fetchMock, + }) + ); + + const mockEsClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + const mockSoClient = savedObjectsClientMock.create(); + + // Call bulkFetch twice sequentially + await collectorSet.bulkFetch(mockEsClient, mockSoClient); + await collectorSet.bulkFetch(mockEsClient, mockSoClient); + + // It should be called once + expect(fetchMock).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/src/plugins/usage_collection/server/collector/collector_set.ts b/src/plugins/usage_collection/server/collector/collector_set.ts index 8251b95a1beb8..d1b06e63b3b95 100644 --- a/src/plugins/usage_collection/server/collector/collector_set.ts +++ b/src/plugins/usage_collection/server/collector/collector_set.ts @@ -31,6 +31,12 @@ interface CollectorWithStatus { collector: AnyCollector; } +interface FetchCollectorOutput { + result?: unknown; + status: 'failed' | 'success'; + type: string; +} + export interface CollectorSetConfig { logger: Logger; executionContext: ExecutionContextSetup; @@ -43,6 +49,7 @@ export class CollectorSet { private readonly executionContext: ExecutionContextSetup; private readonly maximumWaitTimeForAllCollectorsInS: number; private readonly collectors: Map; + private readonly fetchingCollectors = new WeakMap>(); constructor({ logger, executionContext, @@ -190,11 +197,7 @@ export class CollectorSet { private fetchCollector = async ( collector: AnyCollector, context: CollectorFetchContext - ): Promise<{ - result?: unknown; - status: 'failed' | 'success'; - type: string; - }> => { + ): Promise => { const { type } = collector; this.logger.debug(`Fetching data from ${type} collector`); const executionContext: KibanaExecutionContext = { @@ -231,12 +234,22 @@ export class CollectorSet { const fetchExecutions = await Promise.all( readyCollectors.map(async (collector) => { - const wrappedPromise = perfTimerify( - `fetch_${collector.type}`, - async () => await this.fetchCollector(collector, context) - ); + // If the collector is processing from a concurrent request, reuse it. + let wrappedPromise = this.fetchingCollectors.get(collector); + + if (!wrappedPromise) { + // Otherwise, call it + wrappedPromise = perfTimerify( + `fetch_${collector.type}`, + async () => await this.fetchCollector(collector, context) + )(); + } + + this.fetchingCollectors.set(collector, wrappedPromise); + + wrappedPromise.finally(() => this.fetchingCollectors.delete(collector)); - return await wrappedPromise(); + return await wrappedPromise; }) ); const durationMarks = getMarks(); From b163cb2d8512ca331c4d99288964d37d2a16fbfb Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Tue, 21 Feb 2023 10:30:42 +0100 Subject: [PATCH 141/210] [Fleet] Fixing update tags status reporting complete too early (#151330) ## Summary Fixes https://github.com/elastic/kibana/issues/150654 Found a bug in update tags, that when writing out action results, the count was not correct in case of conflicts (less agents were updated than agentIds). This resulted in action result count reaching the total early, and marking the action status complete. This caused a failure in performance tests, because the action was set to complete, but actually not all agents had the new tag yet. With the fix on action results I see the ack count correct, and the action moving to COMPLETE when all retries have finished. Added another fix for `nbAgentsActionCreated` incorrectly showing higher count than expected. This value comes from the sum of agentIds in the `.fleet-actions` doc. Changed the implementation so that `.fleet-actions` is updated on every retry to only record agents updated, failed, and on last retry conflicted. This ensures that the `nbAgentsActionCreated` will be accurate. Tested with 50k agents, see recording here https://github.com/elastic/kibana/pull/151330#discussion_r1109526053 ### 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 --- .../services/agents/update_agent_tags.test.ts | 57 +++++++++++++++-- .../agents/update_agent_tags_action_runner.ts | 61 +++++++++++++------ 2 files changed, 94 insertions(+), 24 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts index 3ef1a269d8e6f..ab407705007db 100644 --- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts @@ -110,7 +110,7 @@ describe('update_agent_tags', () => { expect(agentAction?.body).toEqual( expect.objectContaining({ action_id: expect.anything(), - agents: ['agent1'], + agents: [expect.any(String)], type: 'UPDATE_TAGS', total: 1, }) @@ -120,7 +120,7 @@ describe('update_agent_tags', () => { const agentIds = actionResults?.body ?.filter((i: any) => i.agent_id) .map((i: any) => i.agent_id); - expect(agentIds).toEqual(['agent1']); + expect(agentIds.length).toEqual(1); expect(actionResults.body[1].error).not.toBeDefined(); }); @@ -142,7 +142,7 @@ describe('update_agent_tags', () => { expect(agentAction?.body).toEqual( expect.objectContaining({ action_id: expect.anything(), - agents: [agentInRegularDoc._id], + agents: [expect.any(String)], type: 'UPDATE_TAGS', total: 1, }) @@ -152,12 +152,23 @@ describe('update_agent_tags', () => { it('should write error action results when failures are returned', async () => { esClient.updateByQuery.mockReset(); esClient.updateByQuery.mockResolvedValue({ - failures: [{ cause: { reason: 'error reason' } }], + failures: [{ id: 'failure1', cause: { reason: 'error reason' } }], updated: 0, + total: 1, } as any); await updateAgentTags(soClient, esClient, { agentIds: ['agent1'] }, ['one'], []); + const agentAction = esClient.create.mock.calls[0][0] as any; + expect(agentAction?.body).toEqual( + expect.objectContaining({ + action_id: expect.anything(), + agents: ['failure1'], + type: 'UPDATE_TAGS', + total: 1, + }) + ); + const errorResults = esClient.bulk.mock.calls[0][0] as any; expect(errorResults.body[1].error).toEqual('error reason'); }); @@ -181,6 +192,7 @@ describe('update_agent_tags', () => { failures: [], updated: 0, version_conflicts: 100, + total: 100, } as any); await expect( @@ -198,10 +210,43 @@ describe('update_agent_tags', () => { } ) ).rejects.toThrowError('version conflict of 100 agents'); + + const agentAction = esClient.create.mock.calls[0][0] as any; + expect(agentAction?.body.agents.length).toEqual(100); + const errorResults = esClient.bulk.mock.calls[0][0] as any; expect(errorResults.body[1].error).toEqual('version conflict on last retry'); }); + it('should combine action agents from updated, failures and version conflicts on last retry', async () => { + esClient.updateByQuery.mockReset(); + esClient.updateByQuery.mockResolvedValue({ + failures: [{ id: 'failure1', cause: { reason: 'error reason' } }], + updated: 1, + version_conflicts: 1, + total: 3, + } as any); + + await expect( + updateTagsBatch( + soClient, + esClient, + [{ id: 'agent1' } as Agent], + {}, + { + tagsToAdd: ['new'], + tagsToRemove: [], + kuery: '', + total: 3, + retryCount: MAX_RETRY_COUNT, + } + ) + ).rejects.toThrowError('version conflict of 1 agents'); + + const agentAction = esClient.create.mock.calls[0][0] as any; + expect(agentAction?.body.agents.length).toEqual(3); + }); + it('should run add tags async when actioning more agents than batch size', async () => { esClient.search.mockResolvedValue({ hits: { @@ -301,7 +346,7 @@ describe('update_agent_tags', () => { it('should write total from total param if updateByQuery returns less results', async () => { esClient.updateByQuery.mockReset(); - esClient.updateByQuery.mockResolvedValue({ failures: [], updated: 0, total: 50 } as any); + esClient.updateByQuery.mockResolvedValue({ failures: [], updated: 1, total: 50 } as any); await updateTagsBatch( soClient, @@ -320,7 +365,7 @@ describe('update_agent_tags', () => { expect(agentAction?.body).toEqual( expect.objectContaining({ action_id: expect.anything(), - agents: ['agent1'], + agents: [expect.any(String)], type: 'UPDATE_TAGS', total: 100, }) diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts index 1f12968b67c36..d8208fd5f8d08 100644 --- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts +++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags_action_runner.ts @@ -129,56 +129,81 @@ export async function updateTagsBatch( appContextService.getLogger().debug(JSON.stringify(res).slice(0, 1000)); - if (options.retryCount === undefined) { - // creating an action doc so that update tags shows up in activity - await createAgentAction(esClient, { - id: actionId, - agents: agentIds, - created_at: new Date().toISOString(), - type: 'UPDATE_TAGS', - total: options.total ?? res.total, - }); - } - // creating unique ids to use as agentId, as we don't have all agent ids in case of action by kuery const getUuidArray = (count: number) => Array.from({ length: count }, () => uuidv4()); + const updatedCount = res.updated ?? 0; + const updatedIds = getUuidArray(updatedCount); + + const failures = res.failures ?? []; + const failureCount = failures.length; + + const isLastRetry = options.retryCount === MAX_RETRY_COUNT; + + const versionConflictCount = res.version_conflicts ?? 0; + const versionConflictIds = isLastRetry ? getUuidArray(versionConflictCount) : []; + + // creating an action doc so that update tags shows up in activity + // the logic only saves agent count in the action that updated, failed or in case of last retry, conflicted + // this ensures that the action status count will be accurate + await createAgentAction(esClient, { + id: actionId, + agents: updatedIds + .concat(failures.map((failure) => failure.id)) + .concat(isLastRetry ? versionConflictIds : []), + created_at: new Date().toISOString(), + type: 'UPDATE_TAGS', + total: options.total ?? res.total, + }); + appContextService + .getLogger() + .debug( + `action doc wrote on ${ + updatedCount + failureCount + (isLastRetry ? versionConflictCount : 0) + } agentIds, updated: ${updatedCount}, failed: ${failureCount}, version_conflicts: ${versionConflictCount}` + ); + // writing successful action results - if (res.updated ?? 0 > 0) { + if (updatedCount > 0) { await bulkCreateAgentActionResults( esClient, - agentIds.map((id) => ({ + updatedIds.map((id) => ({ agentId: id, actionId, })) ); + appContextService.getLogger().debug(`action updated result wrote on ${updatedCount} agents`); } // writing failures from es update - if (res.failures && res.failures.length > 0) { + if (failures.length > 0) { await bulkCreateAgentActionResults( esClient, - res.failures.map((failure) => ({ + failures.map((failure) => ({ agentId: failure.id, actionId, error: failure.cause.reason, })) ); + appContextService.getLogger().debug(`action failed result wrote on ${failureCount} agents`); } - if (res.version_conflicts ?? 0 > 0) { + if (versionConflictCount > 0) { // write out error results on last retry, so action is not stuck in progress if (options.retryCount === MAX_RETRY_COUNT) { await bulkCreateAgentActionResults( esClient, - getUuidArray(res.version_conflicts!).map((id) => ({ + versionConflictIds.map((id) => ({ agentId: id, actionId, error: 'version conflict on last retry', })) ); + appContextService + .getLogger() + .debug(`action conflict result wrote on ${versionConflictCount} agents`); } - throw new Error(`version conflict of ${res.version_conflicts} agents`); + throw new Error(`version conflict of ${versionConflictCount} agents`); } return { actionId, updated: res.updated, took: res.took }; From 243da3d79b784e39dfc5ea4e6b8ce336d6ca3a0a Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 21 Feb 2023 09:38:26 +0000 Subject: [PATCH 142/210] [ML] Allow row expansion for blocked jobs (#151351) Fixes https://github.com/elastic/kibana/issues/151292 Allows the row to be expanded when a job in a blocked state, i.e. is resetting, reverting or deleting. The datafeed preview, forecasts, annotations and model snapshots tabs are disabled image However, if the user already had one of these tabs open when the job enters a blocked state, the tab will not change and so all actions inside the tab also need to be disabled. image image image --- .../annotations_table/annotations_table.js | 140 +++++++++--------- .../model_snapshots/model_snapshots_table.tsx | 7 +- .../forecasts_table/forecasts_table.js | 5 +- .../components/job_details/job_details.js | 38 +++-- .../components/jobs_list/jobs_list.js | 1 - .../jobs_list_view/jobs_list_view.js | 6 - 6 files changed, 100 insertions(+), 97 deletions(-) diff --git a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js index a0a364e3af0f8..f46de2a913e05 100644 --- a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js +++ b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js @@ -482,87 +482,87 @@ class AnnotationsTableUI extends Component { } const actions = []; - - actions.push({ - name: editAnnotationsText, - description: editAnnotationsText, - icon: 'pencil', - type: 'icon', - onClick: (annotation) => { - const annotationId = annotation._id; - const originalAnnotation = annotations.find((d) => d._id === annotationId); - - annotationUpdatesService.setValue(originalAnnotation ?? annotation); - }, - 'data-test-subj': `mlAnnotationsActionEdit`, - }); - - if (this.state.jobId && this.props.jobs[0].analysis_config.bucket_span) { - // add datafeed modal action + if (this.props.jobs === undefined || this.props.jobs[0]?.blocked === undefined) { actions.push({ - name: viewDataFeedText, - description: viewDataFeedText, - icon: 'visAreaStacked', + name: editAnnotationsText, + description: editAnnotationsText, + icon: 'pencil', type: 'icon', onClick: (annotation) => { - this.setState({ - datafeedFlyoutVisible: true, - datafeedEnd: annotation.end_timestamp, - }); + const annotationId = annotation._id; + const originalAnnotation = annotations.find((d) => d._id === annotationId); + + annotationUpdatesService.setValue(originalAnnotation ?? annotation); }, - 'data-test-subj': `mlAnnotationsActionViewDatafeed`, + 'data-test-subj': `mlAnnotationsActionEdit`, }); - } - if (isSingleMetricViewerLinkVisible) { - actions.push({ - name: (annotation) => { - const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id)); + if (this.state.jobId && this.props.jobs[0].analysis_config.bucket_span) { + // add datafeed modal action + actions.push({ + name: viewDataFeedText, + description: viewDataFeedText, + icon: 'visAreaStacked', + type: 'icon', + onClick: (annotation) => { + this.setState({ + datafeedFlyoutVisible: true, + datafeedEnd: annotation.end_timestamp, + }); + }, + 'data-test-subj': `mlAnnotationsActionViewDatafeed`, + }); + } - if (isDrillDownAvailable) { - return ( - - ); - } - return ( - { + const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id)); + + if (isDrillDownAvailable) { + return ( - } - > - - - ); - }, - description: (annotation) => { - const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id)); - - return isDrillDownAvailable - ? i18n.translate('xpack.ml.annotationsTable.openInSingleMetricViewerAriaLabel', { - defaultMessage: 'Open in Single Metric Viewer', - }) - : i18n.translate( - 'xpack.ml.annotationsTable.jobConfigurationNotSupportedInSingleMetricViewerAriaLabel', - { defaultMessage: 'Job configuration not supported in Single Metric Viewer' } ); - }, - enabled: (annotation) => isTimeSeriesViewJob(this.getJob(annotation.job_id)), - icon: 'visLine', - type: 'icon', - onClick: (annotation) => this.openSingleMetricView(annotation), - 'data-test-subj': `mlAnnotationsActionOpenInSingleMetricViewer`, - }); + } + return ( + + } + > + + + ); + }, + description: (annotation) => { + const isDrillDownAvailable = isTimeSeriesViewJob(this.getJob(annotation.job_id)); + + return isDrillDownAvailable + ? i18n.translate('xpack.ml.annotationsTable.openInSingleMetricViewerAriaLabel', { + defaultMessage: 'Open in Single Metric Viewer', + }) + : i18n.translate( + 'xpack.ml.annotationsTable.jobConfigurationNotSupportedInSingleMetricViewerAriaLabel', + { defaultMessage: 'Job configuration not supported in Single Metric Viewer' } + ); + }, + enabled: (annotation) => isTimeSeriesViewJob(this.getJob(annotation.job_id)), + icon: 'visLine', + type: 'icon', + onClick: (annotation) => this.openSingleMetricView(annotation), + 'data-test-subj': `mlAnnotationsActionOpenInSingleMetricViewer`, + }); + } } - const getRowProps = (item) => { return { 'data-test-subj': `mlAnnotationsTableRow row-${item._id}`, diff --git a/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx b/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx index cfd586b3a3396..414e7faca5691 100644 --- a/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx +++ b/x-pack/plugins/ml/public/application/components/model_snapshots/model_snapshots_table.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { FC, useEffect, useCallback, useState, useRef } from 'react'; +import React, { FC, useEffect, useCallback, useState, useRef, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { @@ -50,6 +50,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => { const [revertSnapshot, setRevertSnapshot] = useState(null); const [closeJobModalVisible, setCloseJobModalVisible] = useState(null); const [combinedJobState, setCombinedJobState] = useState(null); + const actionsEnabled = useMemo(() => job.blocked === undefined, [job]); const isMounted = useRef(true); useEffect(() => { @@ -185,7 +186,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => { description: i18n.translate('xpack.ml.modelSnapshotTable.actions.revert.description', { defaultMessage: 'Revert to this snapshot', }), - enabled: () => canCreateJob && canStartStopDatafeed, + enabled: () => actionsEnabled && canCreateJob && canStartStopDatafeed, type: 'icon', icon: 'crosshairs', onClick: checkJobIsClosed, @@ -197,7 +198,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => { description: i18n.translate('xpack.ml.modelSnapshotTable.actions.edit.description', { defaultMessage: 'Edit this snapshot', }), - enabled: () => canCreateJob, + enabled: () => actionsEnabled && canCreateJob, type: 'icon', icon: 'pencil', onClick: setEditSnapshot, diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js index 593a09d377057..69e036abf4d2c 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js @@ -311,7 +311,10 @@ export class ForecastsTableUI extends Component { return ( this.openSingleMetricView(forecast)} - isDisabled={forecast.forecast_status !== FORECAST_REQUEST_STATE.FINISHED} + isDisabled={ + this.props.job.blocked !== undefined || + forecast.forecast_status !== FORECAST_REQUEST_STATE.FINISHED + } iconType="visLine" aria-label={viewForecastAriaLabel} /> diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js index 8d98052eab26c..4eec95106eca2 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/job_details.js @@ -83,22 +83,24 @@ export class JobDetailsUI extends Component { alertRules, } = extractJobDetails(job, basePath, refreshJobList); - datafeed.titleAction = ( - - this.setState({ - datafeedChartFlyoutVisible: true, - }) - } - iconType="visAreaStacked" - size="s" - > - - - ); + if (job.blocked === undefined) { + datafeed.titleAction = ( + + this.setState({ + datafeedChartFlyoutVisible: true, + }) + } + iconType="visAreaStacked" + size="s" + > + + + ); + } const tabs = [ { @@ -216,6 +218,7 @@ export class JobDetailsUI extends Component { tabs.push( { id: 'datafeed-preview', + disabled: job.blocked !== undefined, 'data-test-subj': 'mlJobListTab-datafeed-preview', name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.datafeedPreviewLabel', { defaultMessage: 'Datafeed preview', @@ -224,6 +227,7 @@ export class JobDetailsUI extends Component { }, { id: 'forecasts', + disabled: job.blocked !== undefined, 'data-test-subj': 'mlJobListTab-forecasts', name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.forecastsLabel', { defaultMessage: 'Forecasts', @@ -235,6 +239,7 @@ export class JobDetailsUI extends Component { tabs.push({ id: 'annotations', + disabled: job.blocked !== undefined, 'data-test-subj': 'mlJobListTab-annotations', name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.annotationsLabel', { defaultMessage: 'Annotations', @@ -249,6 +254,7 @@ export class JobDetailsUI extends Component { tabs.push({ id: 'modelSnapshots', + disabled: job.blocked !== undefined, 'data-test-subj': 'mlJobListTab-modelSnapshots', name: i18n.translate('xpack.ml.jobsList.jobDetails.tabs.modelSnapshotsLabel', { defaultMessage: 'Model snapshots', diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js index d5459fd5b8e33..a2a03ef7ce69c 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js @@ -141,7 +141,6 @@ export class JobsList extends Component { render: (item) => ( this.toggleRow(item)} - isDisabled={item.blocked !== undefined} iconType={this.state.itemIdToExpandedRowMap[item.id] ? 'arrowDown' : 'arrowRight'} aria-label={ this.state.itemIdToExpandedRowMap[item.id] diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js index b186192b64744..179d5d48b3fe5 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js @@ -342,12 +342,6 @@ export class JobsListView extends Component { this.updateFunctions[j](fullJobsList[j]); }); - jobs.forEach((job) => { - if (job.blocked !== undefined && this.state.itemIdToExpandedRowMap[job.id]) { - this.toggleRow(job.id); - } - }); - this.isDoneRefreshing(); if (jobsSummaryList.some((j) => j.blocked !== undefined)) { // if there are some jobs in a deleting state, start polling for From 9683beba6af5f78fa88350aa5bcab95d767cd763 Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Tue, 21 Feb 2023 10:43:25 +0100 Subject: [PATCH 143/210] [Security Solution] Fix rules filtering after enabling/disabling a rule (#151284) **Addresses:** https://github.com/elastic/kibana/issues/151151 ## Summary It fixes rules filtering after enabling or disabling a rule. ### Details The problem is caused by improper cache invalidation. Rules cache used to be modified upon enabling or disabling one or more rules but it started causing troubles after introduction a filter by enabled or disabled state. Cached rules modification is is complex and bug prone especially taking into account it will need to mirror backend logic and further plans on extending rule filers. So the simplest solution is invalidation of the whole rules cache. Though it may also lead to unfriendly UX when disabled or enabled rules "jump" in the table. The best approach is marking find rule request cached data as stale so data is refetched each time use changes filter state, sort by field or use pagination. **Before:** https://user-images.githubusercontent.com/1938181/218776621-f8903a88-1685-4a2c-9074-02fac0623dc4.mov **After:** https://user-images.githubusercontent.com/3775283/219630525-af109575-3a01-4988-bb6b-690473d33b80.mov ### 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 --- .../rule_management/api/hooks/use_fetch_rule_by_id_query.ts | 3 +++ .../rule_management/api/hooks/use_find_rules_query.ts | 3 +++ 2 files changed, 6 insertions(+) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts index da0761d5160c7..4c8ee37e3e211 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_by_id_query.ts @@ -35,6 +35,9 @@ export const useFetchRuleByIdQuery = (id: string, options?: UseQueryOptions Date: Tue, 21 Feb 2023 10:58:41 +0100 Subject: [PATCH 144/210] Refresh the app after saving a monitor (#150733) ## Summary Closes #150594 Ensures the synthetics app refreshes its state when a monitor is created, no matter the method. This mirrors how the [Simple monitor creation flow works](https://github.com/afgomez/kibana/blob/3595849389663290df868784402b91d428b8ab54/x-pack/plugins/synthetics/public/apps/synthetics/components/getting_started/use_simple_monitor.ts#L70-L71) --- .../monitor_add_edit/hooks/use_monitor_save.ts | 9 ++++++++- .../components/monitors_page/overview/overview_page.tsx | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts index e09a4dd886133..9fd18e5dfa04d 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_add_edit/hooks/use_monitor_save.ts @@ -8,13 +8,18 @@ import { FETCH_STATUS, useFetcher } from '@kbn/observability-plugin/public'; import { useParams, useRouteMatch } from 'react-router-dom'; import { useEffect } from 'react'; +import { useDispatch } from 'react-redux'; import { i18n } from '@kbn/i18n'; import { MONITOR_EDIT_ROUTE } from '../../../../../../common/constants'; import { SyntheticsMonitor } from '../../../../../../common/runtime_types'; import { createMonitorAPI, updateMonitorAPI } from '../../../state/monitor_management/api'; import { kibanaService } from '../../../../../utils/kibana_service'; +import { cleanMonitorListState } from '../../../state'; +import { useSyntheticsRefreshContext } from '../../../contexts'; export const useMonitorSave = ({ monitorData }: { monitorData?: SyntheticsMonitor }) => { + const dispatch = useDispatch(); + const { refreshApp } = useSyntheticsRefreshContext(); const { monitorId } = useParams<{ monitorId: string }>(); const editRouteMatch = useRouteMatch({ path: MONITOR_EDIT_ROUTE }); @@ -42,12 +47,14 @@ export const useMonitorSave = ({ monitorData }: { monitorData?: SyntheticsMonito toastLifeTimeMs: 3000, }); } else if (status === FETCH_STATUS.SUCCESS && !loading) { + refreshApp(); + dispatch(cleanMonitorListState()); kibanaService.toasts.addSuccess({ title: monitorId ? MONITOR_UPDATED_SUCCESS_LABEL : MONITOR_SUCCESS_LABEL, toastLifeTimeMs: 3000, }); } - }, [data, status, monitorId, loading]); + }, [data, status, monitorId, loading, refreshApp, dispatch]); return { status, loading, isEdit }; }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx index 158061692d475..2acb2b7a35ed7 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx @@ -56,6 +56,7 @@ export const OverviewPage: React.FC = () => { } = useEnablement(); const { + loaded: overviewLoaded, data: { monitors }, pageState, } = useSelector(selectOverviewState); @@ -94,7 +95,7 @@ export const OverviewPage: React.FC = () => { return ; } - const noMonitorFound = monitorsLoaded && monitors?.length === 0; + const noMonitorFound = monitorsLoaded && overviewLoaded && monitors?.length === 0; return ( <> From 0a8c5f5363a32fc6398e9c78b970b0a073e5bbdc Mon Sep 17 00:00:00 2001 From: Christos Nasikas Date: Tue, 21 Feb 2023 12:07:19 +0200 Subject: [PATCH 145/210] [RAM] Show Cases column on the alerts table (#150963) ## Summary This PR adds the cases column to the alerts table. Assumptions: - I will not change the label of the case column. I will do it on another PR. - The column will not be part of the default columns. The user has to add it from the fields. - If there are multiple cases they will be shown as a comma-separated list. It will change later to include a "show more" button or similar to show only the latest case in the column. - Due to circular dependencies, Cases types and utility functions were not imported. I duplicate the code. I opened two issues (https://github.com/elastic/kibana/issues/151648, https://github.com/elastic/kibana/issues/151649) to create packages that will contain the case types and utility functions. Issue: https://github.com/elastic/kibana/issues/146864 Screenshot 2023-02-17 at 7 37 25 PM ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### For maintainers - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) ## Release notes Adds the Cases column to the alerts table. The column shows, for each alert, all cases the alert is attached to. --- x-pack/plugins/cases/common/index.ts | 8 ++ .../application/components/test_utils.tsx | 36 ----- .../public/application/hooks/constants.ts | 13 ++ .../connector_form.test.tsx | 2 +- .../connector_form_fields.test.tsx | 7 +- .../connector_form_fields_global.test.tsx | 45 ++++--- .../create_connector_flyout/index.test.tsx | 2 +- .../edit_connector_flyout/index.test.tsx | 2 +- .../alerts_flyout/alerts_flyout.test.tsx | 5 +- .../alerts_flyout/alerts_flyout.tsx | 5 +- .../alerts_table/alerts_table.test.tsx | 102 ++++++++++---- .../sections/alerts_table/alerts_table.tsx | 47 +++---- .../alerts_table/alerts_table_state.test.tsx | 119 +++++++++++++---- .../alerts_table/alerts_table_state.tsx | 43 +++++- .../bulk_actions/bulk_actions.test.tsx | 20 ++- .../bulk_actions/components/toolbar.tsx | 9 +- .../sections/alerts_table/cases/cell.test.tsx | 126 ++++++++++++++++++ .../sections/alerts_table/cases/cell.tsx | 62 +++++++++ .../sections/alerts_table/cases/index.mock.ts | 30 +++++ .../cases/use_case_view_navigation.test.ts | 44 ++++++ .../cases/use_case_view_navigation.ts | 39 ++++++ .../alert_lifecycle_status_cell.test.tsx | 83 ++++++++++++ .../cells/alert_lifecycle_status_cell.tsx | 39 ++++++ .../alerts_table/cells/default_cell.test.tsx | 61 +++++++++ .../alerts_table/cells/default_cell.tsx | 23 ++++ .../alerts_table/cells/index.test.tsx | 56 ++++++++ .../sections/alerts_table/cells/index.tsx | 34 +++++ .../sections/alerts_table/hooks/api.test.ts | 41 ++++++ .../sections/alerts_table/hooks/api.ts | 52 ++++++++ .../alerts_table/hooks/use_bulk_actions.ts | 4 +- .../hooks/use_bulk_get_cases.test.tsx | 73 ++++++++++ .../alerts_table/hooks/use_bulk_get_cases.tsx | 58 ++++++++ .../alerts_table/hooks/use_fetch_alerts.tsx | 11 +- .../use_fetch_browser_fields_capabilities.tsx | 4 +- .../sections/alerts_table/query_client.ts | 10 ++ .../toolbar/toolbar_visibility.tsx | 5 +- .../sections/alerts_table/types.ts | 23 +++- .../application/sections/test_utils.tsx | 76 +++++++++++ .../triggers_actions_ui/public/types.ts | 11 +- .../plugins/triggers_actions_ui/tsconfig.json | 1 + 40 files changed, 1254 insertions(+), 177 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx diff --git a/x-pack/plugins/cases/common/index.ts b/x-pack/plugins/cases/common/index.ts index 489ee28a26cd6..8ca2c23c1eb8d 100644 --- a/x-pack/plugins/cases/common/index.ts +++ b/x-pack/plugins/cases/common/index.ts @@ -16,6 +16,7 @@ // See: https://docs.elastic.dev/kibana-dev-docs/key-concepts/platform-intro#public-plugin-api export { + APP_ID, CASES_URL, SECURITY_SOLUTION_OWNER, OBSERVABILITY_OWNER, @@ -25,6 +26,7 @@ export { PUSH_CASES_CAPABILITY, READ_CASES_CAPABILITY, UPDATE_CASES_CAPABILITY, + INTERNAL_BULK_GET_CASES_URL, } from './constants'; export { @@ -35,6 +37,12 @@ export { ExternalReferenceStorageType, } from './api'; +export type { + CaseResponse, + CasesBulkGetRequestCertainFields, + CasesBulkGetResponseCertainFields, +} from './api'; + export type { Case, Ecs, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx index 39cff673908bd..e4ed6e02e2ac0 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/test_utils.tsx @@ -6,17 +6,11 @@ */ import React, { useCallback } from 'react'; -import { of } from 'rxjs'; import { I18nProvider } from '@kbn/i18n-react'; import { EuiButton } from '@elastic/eui'; import { Form, useForm, FormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; -import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react'; -import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; import { ConnectorServices } from '../../types'; -import { TriggersAndActionsUiServices } from '../..'; -import { createStartServicesMock } from '../../common/lib/kibana/kibana_react.mock'; import { ConnectorProvider } from '../context/connector_context'; interface FormTestProviderProps { @@ -54,33 +48,3 @@ const FormTestProviderComponent: React.FC = ({ FormTestProviderComponent.displayName = 'FormTestProvider'; export const FormTestProvider = React.memo(FormTestProviderComponent); - -type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult; -export interface AppMockRenderer { - render: UiRender; - coreStart: TriggersAndActionsUiServices; -} - -export const createAppMockRenderer = (): AppMockRenderer => { - const services = createStartServicesMock(); - const theme$ = of({ darkMode: false }); - - const AppWrapper: React.FC<{ children: React.ReactElement }> = ({ children }) => ( - - - {children} - - - ); - AppWrapper.displayName = 'AppWrapper'; - const render: UiRender = (ui, options) => { - return reactRender(ui, { - wrapper: AppWrapper, - ...options, - }); - }; - return { - coreStart: services, - render, - }; -}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts b/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts new file mode 100644 index 0000000000000..90a0ba762937c --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/constants.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const triggersActionsUiQueriesKeys = { + all: ['triggersActionsUi'] as const, + alertsTable: () => [...triggersActionsUiQueriesKeys.all, 'alertsTable'] as const, + cases: () => [...triggersActionsUiQueriesKeys.alertsTable(), 'cases'] as const, + casesBulkGet: () => [...triggersActionsUiQueriesKeys.cases(), 'bulkGet'] as const, +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx index 3f208b1fda39c..95e7b0c85ab55 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form.test.tsx @@ -6,12 +6,12 @@ */ import React, { lazy } from 'react'; -import { AppMockRenderer, createAppMockRenderer } from '../../components/test_utils'; import { ConnectorForm } from './connector_form'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; import userEvent from '@testing-library/user-event'; import { waitFor } from '@testing-library/dom'; import { act } from '@testing-library/react'; +import { AppMockRenderer, createAppMockRenderer } from '../test_utils'; describe('ConnectorForm', () => { let appMockRenderer: AppMockRenderer; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx index dd99bbdbabed5..c2a6a86bb446b 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields.test.tsx @@ -7,14 +7,11 @@ import React, { lazy } from 'react'; import { coreMock } from '@kbn/core/public/mocks'; -import { - AppMockRenderer, - createAppMockRenderer, - FormTestProvider, -} from '../../components/test_utils'; +import { FormTestProvider } from '../../components/test_utils'; import { ConnectorFormFields } from './connector_form_fields'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; import { waitFor } from '@testing-library/dom'; +import { AppMockRenderer, createAppMockRenderer } from '../test_utils'; describe('ConnectorFormFields', () => { let appMockRenderer: AppMockRenderer; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx index 04cbad726ead7..904244135df7e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_form_fields_global.test.tsx @@ -7,7 +7,7 @@ import React from 'react'; import userEvent from '@testing-library/user-event'; -import { render, act } from '@testing-library/react'; +import { render, screen, waitFor } from '@testing-library/react'; import { FormTestProvider } from '../../components/test_utils'; import { ConnectorFormFieldsGlobal } from './connector_form_fields_global'; @@ -25,31 +25,31 @@ describe('ConnectorFormFieldsGlobal', () => { }); it('submits correctly', async () => { - const { getByTestId } = render( + render( ); - expect(getByTestId('nameInput')).toBeInTheDocument(); + expect(screen.getByTestId('nameInput')).toBeInTheDocument(); - await act(async () => { - userEvent.click(getByTestId('form-test-provide-submit')); - }); + userEvent.click(screen.getByTestId('form-test-provide-submit')); - expect(onSubmit).toHaveBeenCalledWith({ - data: { - actionTypeId: '.test', - id: 'test-id', - isDeprecated: 'false', - name: 'My test connector', - }, - isValid: true, + await waitFor(() => { + expect(onSubmit).toHaveBeenCalledWith({ + data: { + actionTypeId: '.test', + id: 'test-id', + isDeprecated: 'false', + name: 'My test connector', + }, + isValid: true, + }); }); }); it('validates the name correctly', async () => { - const { getByTestId, getByText } = render( + render( /** * By removing the default value we initiate the form * with an empty state. Submitting the form @@ -61,14 +61,15 @@ describe('ConnectorFormFieldsGlobal', () => { ); - await act(async () => { - userEvent.click(getByTestId('form-test-provide-submit')); - }); + userEvent.click(screen.getByTestId('form-test-provide-submit')); + + expect(await screen.findByText('Name is required.')).toBeInTheDocument(); - expect(getByText('Name is required.')).toBeInTheDocument(); - expect(onSubmit).toHaveBeenCalledWith({ - data: {}, - isValid: false, + await waitFor(() => { + expect(onSubmit).toHaveBeenCalledWith({ + data: {}, + isValid: false, + }); }); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx index 6256ee29aee40..9cc4603025ff3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/create_connector_flyout/index.test.tsx @@ -11,9 +11,9 @@ import { actionTypeRegistryMock } from '../../../action_type_registry.mock'; import userEvent from '@testing-library/user-event'; import { waitFor } from '@testing-library/dom'; import { act } from '@testing-library/react'; -import { AppMockRenderer, createAppMockRenderer } from '../../../components/test_utils'; import CreateConnectorFlyout from '.'; import { betaBadgeProps } from '../beta_badge_props'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; jest.mock('../../../lib/action_connector_api', () => ({ ...(jest.requireActual('../../../lib/action_connector_api') as any), diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx index c2e25d9fe06a6..e13465b356f8e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/edit_connector_flyout/index.test.tsx @@ -11,10 +11,10 @@ import { actionTypeRegistryMock } from '../../../action_type_registry.mock'; import userEvent from '@testing-library/user-event'; import { waitFor } from '@testing-library/dom'; import { act } from '@testing-library/react'; -import { AppMockRenderer, createAppMockRenderer } from '../../../components/test_utils'; import EditConnectorFlyout from '.'; import { ActionConnector, EditConnectorTabs, GenericValidationResult } from '../../../../types'; import { betaBadgeProps } from '../beta_badge_props'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; const updateConnectorResponse = { connector_type_id: 'test', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx index ce5444c05f6e7..c40bfbf47f4a8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.test.tsx @@ -6,10 +6,9 @@ */ import React from 'react'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; -import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import { act } from 'react-dom/test-utils'; import { AlertsFlyout } from './alerts_flyout'; -import { AlertsField } from '../../../../types'; +import { Alert, AlertsField } from '../../../../types'; const onClose = jest.fn(); const onPaginate = jest.fn(); @@ -19,7 +18,7 @@ const props = { [AlertsField.reason]: ['two'], _id: '0123456789', _index: '.alerts-default', - } as unknown as EcsFieldsResponse, + } as unknown as Alert, alertsTableConfiguration: { id: 'test', casesFeatureId: 'testCases', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx index 3ddefe1c4cf68..92c4d107715e1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_flyout/alerts_flyout.tsx @@ -16,8 +16,7 @@ import { EuiProgress, EuiFlyoutSize, } from '@elastic/eui'; -import type { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; -import { AlertsTableConfigurationRegistry } from '../../../../types'; +import type { Alert, AlertsTableConfigurationRegistry } from '../../../../types'; const AlertsFlyoutHeader = lazy(() => import('./alerts_flyout_header')); const PAGINATION_LABEL = i18n.translate( @@ -28,7 +27,7 @@ const PAGINATION_LABEL = i18n.translate( ); interface AlertsFlyoutProps { - alert: EcsFieldsResponse; + alert: Alert; alertsTableConfiguration: AlertsTableConfigurationRegistry; flyoutIndex: number; flyoutSize?: EuiFlyoutSize; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx index 2f61c8d51996f..db7ff78290afb 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.test.tsx @@ -4,19 +4,25 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useReducer } from 'react'; +import React, { useMemo, useReducer } from 'react'; import { fireEvent, render, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; -import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; -import { ALERT_RULE_NAME, ALERT_REASON, ALERT_FLAPPING, ALERT_STATUS } from '@kbn/rule-data-utils'; +import { + ALERT_RULE_NAME, + ALERT_REASON, + ALERT_FLAPPING, + ALERT_STATUS, + ALERT_CASE_IDS, +} from '@kbn/rule-data-utils'; import { AlertsTable } from './alerts_table'; -import { AlertsTableProps, BulkActionsState, RowSelectionState } from '../../../types'; +import type { Alerts, AlertsTableProps, BulkActionsState, RowSelectionState } from '../../../types'; import { EuiButtonIcon, EuiFlexItem } from '@elastic/eui'; -import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { BulkActionsContext } from './bulk_actions/context'; import { bulkActionsReducer } from './bulk_actions/reducer'; +import { getCasesMockMap } from './cases/index.mock'; +import { createAppMockRenderer } from '../test_utils'; jest.mock('@kbn/data-plugin/public'); jest.mock('@kbn/kibana-react-plugin/public/ui_settings/use_ui_setting', () => ({ @@ -36,6 +42,10 @@ const columns = [ id: ALERT_STATUS, displayAsText: 'Alert status', }, + { + id: ALERT_CASE_IDS, + displayAsText: 'Cases', + }, ]; const alerts = [ @@ -44,12 +54,14 @@ const alerts = [ [ALERT_REASON]: ['two'], [ALERT_STATUS]: ['active'], [ALERT_FLAPPING]: [true], + [ALERT_CASE_IDS]: ['test-id'], }, { [ALERT_RULE_NAME]: ['three'], [ALERT_REASON]: ['four'], [ALERT_STATUS]: ['active'], [ALERT_FLAPPING]: [false], + [ALERT_CASE_IDS]: ['test-id-2'], }, { [ALERT_RULE_NAME]: ['five'], @@ -63,7 +75,7 @@ const alerts = [ [ALERT_STATUS]: ['recovered'], [ALERT_FLAPPING]: [false], }, -] as unknown as EcsFieldsResponse[]; +] as unknown as Alerts; describe('AlertsTable', () => { const fetchAlertsData = { @@ -109,8 +121,11 @@ describe('AlertsTable', () => { ], }; + const casesMap = getCasesMockMap(); + const tableProps = { alertsTableConfiguration, + casesData: { cases: casesMap, isLoading: false }, columns, bulkActions: [], deletedEventIds: [], @@ -139,26 +154,29 @@ describe('AlertsTable', () => { rowCount: 2, }; - const AlertsTableWithLocale: React.FunctionComponent< + const AlertsTableWithProviders: React.FunctionComponent< AlertsTableProps & { initialBulkActionsState?: BulkActionsState } > = (props) => { + const renderer = useMemo(() => createAppMockRenderer(), []); + const AppWrapper = renderer.AppWrapper; + const initialBulkActionsState = useReducer( bulkActionsReducer, props.initialBulkActionsState || defaultBulkActionsState ); return ( - + - + ); }; describe('Alerts table UI', () => { it('should support sorting', async () => { - const renderResult = render(); + const renderResult = render(); userEvent.click(renderResult.container.querySelector('.euiDataGridHeaderCell__button')!); await waitForEuiPopoverOpen(); userEvent.click(renderResult.getByTestId(`dataGridHeaderCellActionGroup-${columns[0].id}`)); @@ -169,18 +187,18 @@ describe('AlertsTable', () => { }); it('should support pagination', async () => { - const renderResult = render(); + const renderResult = render(); userEvent.click(renderResult.getByTestId('pagination-button-1')); expect(fetchAlertsData.onPageChange).toHaveBeenCalledWith({ pageIndex: 1, pageSize: 1 }); }); it('should show when it was updated', () => { - const { getByTestId } = render(); + const { getByTestId } = render(); expect(getByTestId('toolbar-updated-at')).not.toBe(null); }); it('should show alerts count', () => { - const { getByTestId } = render(); + const { getByTestId } = render(); expect(getByTestId('toolbar-alerts-count')).not.toBe(null); }); @@ -195,7 +213,7 @@ describe('AlertsTable', () => { }, }; - const { queryAllByTestId } = render(); + const { queryAllByTestId } = render(); expect(queryAllByTestId('alertLifecycleStatusBadge')[0].textContent).toEqual('Flapping'); expect(queryAllByTestId('alertLifecycleStatusBadge')[1].textContent).toEqual('Active'); expect(queryAllByTestId('alertLifecycleStatusBadge')[2].textContent).toEqual('Recovered'); @@ -204,7 +222,7 @@ describe('AlertsTable', () => { describe('leading control columns', () => { it('should return at least the flyout action control', async () => { - const wrapper = render(); + const wrapper = render(); expect(wrapper.getByTestId('expandColumnHeaderLabel').textContent).toBe('Actions'); }); @@ -220,7 +238,7 @@ describe('AlertsTable', () => { }, ], }; - const wrapper = render(); + const wrapper = render(); expect(wrapper.queryByTestId('testHeader')).not.toBe(null); expect(wrapper.queryByTestId('testCell')).not.toBe(null); }); @@ -265,7 +283,7 @@ describe('AlertsTable', () => { }, }; - const { queryByTestId } = render(); + const { queryByTestId } = render(); expect(queryByTestId('testActionColumn')).not.toBe(null); expect(queryByTestId('testActionColumn2')).not.toBe(null); expect(queryByTestId('expandColumnCellOpenFlyoutButton-0')).not.toBe(null); @@ -310,7 +328,7 @@ describe('AlertsTable', () => { }, }; - const { queryByTestId } = render(); + const { queryByTestId } = render(); expect(queryByTestId('testActionColumn')).not.toBe(null); expect(queryByTestId('testActionColumn2')).not.toBe(null); expect(queryByTestId('expandColumnCellOpenFlyoutButton-0')).toBe(null); @@ -322,7 +340,7 @@ describe('AlertsTable', () => { showExpandToDetails: false, }; - const { queryByTestId } = render(); + const { queryByTestId } = render(); expect(queryByTestId('expandColumnHeaderLabel')).toBe(null); expect(queryByTestId('expandColumnCellOpenFlyoutButton')).toBe(null); }); @@ -361,7 +379,7 @@ describe('AlertsTable', () => { }); it('should show the row loader when callback triggered', async () => { - render(); + render(); fireEvent.click((await screen.findAllByTestId('testActionColumn'))[0]); // the callback given to our clients to run when they want to update the loading state @@ -375,8 +393,8 @@ describe('AlertsTable', () => { expect(within(selectedOptions[0]).queryByRole('checkbox')).not.toBeInTheDocument(); // second row, first column - expect(within(selectedOptions[5]).queryByLabelText('Loading')).not.toBeInTheDocument(); - expect(within(selectedOptions[5]).getByRole('checkbox')).toBeDefined(); + expect(within(selectedOptions[6]).queryByLabelText('Loading')).not.toBeInTheDocument(); + expect(within(selectedOptions[6]).getByRole('checkbox')).toBeDefined(); }); it('should show the row loader when callback triggered with false', async () => { @@ -386,7 +404,7 @@ describe('AlertsTable', () => { }; render( - @@ -400,5 +418,43 @@ describe('AlertsTable', () => { }); }); }); + + describe('cases column', () => { + const props = { + ...tableProps, + pageSize: alerts.length, + }; + + it('should show the cases column', async () => { + render(); + expect(await screen.findByText('Cases')).toBeInTheDocument(); + }); + + it('should show the cases titles correctly', async () => { + render(); + expect(await screen.findByText('Test case')).toBeInTheDocument(); + expect(await screen.findByText('Test case 2')).toBeInTheDocument(); + }); + + it('show loading skeleton if it loads cases', async () => { + render( + + ); + + expect((await screen.findAllByTestId('cases-cell-loading')).length).toBe(2); + }); + + it('shows the cases tooltip', async () => { + render(); + expect(await screen.findByText('Test case')).toBeInTheDocument(); + + userEvent.hover(screen.getByText('Test case')); + + expect(await screen.findByTestId('cases-components-tooltip')).toBeInTheDocument(); + }); + }); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx index 6ffc9fa220ba3..baf451ea5e19e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table.tsx @@ -5,8 +5,7 @@ * 2.0. */ -import { ALERT_UUID, ALERT_STATUS, ALERT_FLAPPING } from '@kbn/rule-data-utils'; -import { AlertStatus } from '@kbn/rule-data-utils'; +import { ALERT_UUID } from '@kbn/rule-data-utils'; import React, { useState, Suspense, lazy, useCallback, useMemo, useEffect } from 'react'; import { EuiDataGrid, @@ -24,11 +23,12 @@ import { ALERTS_TABLE_CONTROL_COLUMNS_ACTIONS_LABEL, ALERTS_TABLE_CONTROL_COLUMNS_VIEW_DETAILS_LABEL, } from './translations'; -import { AlertLifecycleStatusBadge } from '../../components/alert_lifecycle_status_badge'; import './alerts_table.scss'; import { getToolbarVisibility } from './toolbar'; import { InspectButtonContainer } from './toolbar/components/inspect'; +import { SystemCellId } from './types'; +import { SystemCellFactory, systemCells } from './cells'; export const ACTIVE_ROW_CLASS = 'alertsTableActiveRow'; @@ -53,24 +53,8 @@ const basicRenderCellValue = ({ return <>{value}; }; -const renderAlertLifecycleStatus = ({ - data, - columnId, -}: { - data: Array<{ field: string; value: string[] }>; - columnId: string; -}) => { - const alertStatus = data.find((d) => d.field === ALERT_STATUS)?.value ?? []; - if (Array.isArray(alertStatus) && alertStatus.length) { - const flapping = data.find((d) => d.field === ALERT_FLAPPING)?.value ?? []; - return ( - - ); - } - return basicRenderCellValue({ data, columnId }); +const isSystemCell = (columnId: string): columnId is SystemCellId => { + return systemCells.includes(columnId as SystemCellId); }; const AlertsTable: React.FunctionComponent = (props: AlertsTableProps) => { @@ -86,6 +70,8 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab sort: sortingFields, getInspectQuery, } = alertsData; + const { cases, isLoading: isLoadingCases } = props.casesData; + const { sortingColumns, onSort } = useSorting(onSortChange, sortingFields); const { renderCustomActionsRow, actionsColumnWidth, getSetIsActionLoadingCallback } = @@ -279,12 +265,19 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab Object.entries(alert ?? {}).forEach(([key, value]) => { data.push({ field: key, value: value as string[] }); }); - if (showAlertStatusWithFlapping && _props.columnId === ALERT_STATUS) { - return renderAlertLifecycleStatus({ - ..._props, - data, - }); + + if (isSystemCell(_props.columnId)) { + return ( + + ); } + return renderCellValue({ ..._props, data, @@ -296,7 +289,9 @@ const AlertsTable: React.FunctionComponent = (props: AlertsTab }, [ alerts, + cases, isLoading, + isLoadingCases, pagination.pageIndex, pagination.pageSize, renderCellValue, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx index ad925533a5965..9af3f57792e86 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.test.tsx @@ -5,14 +5,15 @@ * 2.0. */ import React from 'react'; +import { BehaviorSubject } from 'rxjs'; import userEvent from '@testing-library/user-event'; import { get } from 'lodash'; import { fireEvent, render, waitFor, screen } from '@testing-library/react'; -import { AlertConsumers } from '@kbn/rule-data-utils'; -import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; +import { AlertConsumers, ALERT_CASE_IDS } from '@kbn/rule-data-utils'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { + Alerts, AlertsField, AlertsTableConfigurationRegistry, AlertsTableFlyoutBaseProps, @@ -22,13 +23,20 @@ import { TypeRegistry } from '../../type_registry'; import AlertsTableState, { AlertsTableStateProps } from './alerts_table_state'; import { useFetchAlerts } from './hooks/use_fetch_alerts'; import { useFetchBrowserFieldCapabilities } from './hooks/use_fetch_browser_fields_capabilities'; +import { useBulkGetCases } from './hooks/use_bulk_get_cases'; import { DefaultSort } from './hooks'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { BrowserFields } from '@kbn/rule-registry-plugin/common'; +import { getCasesMockMap } from './cases/index.mock'; jest.mock('./hooks/use_fetch_alerts'); jest.mock('./hooks/use_fetch_browser_fields_capabilities'); +jest.mock('./hooks/use_bulk_get_cases'); + jest.mock('@kbn/kibana-utils-plugin/public'); + +const mockCurrentAppId$ = new BehaviorSubject('testAppId'); + jest.mock('@kbn/kibana-react-plugin/public', () => ({ useKibana: () => ({ services: { @@ -42,6 +50,7 @@ jest.mock('@kbn/kibana-react-plugin/public', () => ({ push_cases: true, }, }, + currentAppId$: mockCurrentAppId$, }, cases: { ui: { @@ -76,6 +85,10 @@ const columns = [ id: AlertsField.reason, displayAsText: 'Reason', }, + { + id: ALERT_CASE_IDS, + displayAsText: 'Cases', + }, ]; const alerts = [ @@ -83,13 +96,15 @@ const alerts = [ [AlertsField.name]: ['one'], [AlertsField.reason]: ['two'], [AlertsField.uuid]: ['1047d115-670d-469e-af7a-86fdd2b2f814'], + [ALERT_CASE_IDS]: ['test-id'], }, { [AlertsField.name]: ['three'], [AlertsField.reason]: ['four'], [AlertsField.uuid]: ['bf5f6d63-5afd-48e0-baf6-f28c2b68db46'], + [ALERT_CASE_IDS]: ['test-id-2'], }, -] as unknown as EcsFieldsResponse[]; +] as unknown as Alerts; const FlyoutBody = ({ alert }: AlertsTableFlyoutBaseProps) => (
    @@ -104,6 +119,7 @@ const FlyoutBody = ({ alert }: AlertsTableFlyoutBaseProps) => ( const hasMock = jest.fn().mockImplementation((plugin: string) => { return plugin === PLUGIN_ID; }); + const getMock = jest.fn().mockImplementation((plugin: string) => { if (plugin === PLUGIN_ID) { return { @@ -134,22 +150,24 @@ storageMock.mockImplementation(() => { return { get: jest.fn(), set: jest.fn() }; }); -const refecthMock = jest.fn(); +const refetchMock = jest.fn(); const hookUseFetchAlerts = useFetchAlerts as jest.Mock; -hookUseFetchAlerts.mockImplementation(() => [ - false, - { - alerts, - isInitializing: false, - getInspectQuery: jest.fn(), - refetch: refecthMock, - totalAlerts: alerts.length, - }, -]); +const fetchAlertsResponse = { + alerts, + isInitializing: false, + getInspectQuery: jest.fn(), + refetch: refetchMock, + totalAlerts: alerts.length, +}; + +hookUseFetchAlerts.mockReturnValue([false, fetchAlertsResponse]); const hookUseFetchBrowserFieldCapabilities = useFetchBrowserFieldCapabilities as jest.Mock; hookUseFetchBrowserFieldCapabilities.mockImplementation(() => [false, {}]); +const casesMap = getCasesMockMap(); +const useBulkGetCasesMock = useBulkGetCases as jest.Mock; + const AlertsTableWithLocale: React.FunctionComponent = (props) => ( @@ -176,10 +194,12 @@ describe('AlertsTableState', () => { ...customProps, }; }); + const alertsTableConfigurationRegistryWithPersistentControlsMock = { has: hasMock, get: getMockWithUsePersistentControls, } as unknown as TypeRegistry; + return { ...tableProps, alertsTableConfigurationRegistry: alertsTableConfigurationRegistryWithPersistentControlsMock, @@ -187,9 +207,65 @@ describe('AlertsTableState', () => { }; beforeEach(() => { - hasMock.mockClear(); - getMock.mockClear(); - refecthMock.mockClear(); + jest.clearAllMocks(); + + useBulkGetCasesMock.mockReturnValue({ data: casesMap, isLoading: false }); + }); + + describe('cases column', () => { + it('should show the cases column', async () => { + render(); + expect(await screen.findByText('Cases')).toBeInTheDocument(); + }); + + it('should show the cases titles correctly', async () => { + render(); + expect(await screen.findByText('Test case')).toBeInTheDocument(); + expect(await screen.findByText('Test case 2')).toBeInTheDocument(); + }); + + it('should pass the correct case ids to useBulkGetCases', async () => { + render(); + + await waitFor(() => { + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2']); + }); + }); + + it('remove duplicated case ids', async () => { + hookUseFetchAlerts.mockReturnValue([ + false, + { + ...fetchAlertsResponse, + alerts: [...fetchAlertsResponse.alerts, ...fetchAlertsResponse.alerts], + }, + ]); + + render(); + + await waitFor(() => { + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id', 'test-id-2']); + }); + }); + + it('skips alerts with empty case ids', async () => { + hookUseFetchAlerts.mockReturnValue([ + false, + { + ...fetchAlertsResponse, + alerts: [ + { ...fetchAlertsResponse.alerts[0], 'kibana.alert.case_ids': [] }, + fetchAlertsResponse.alerts[1], + ], + }, + ]); + + render(); + + await waitFor(() => { + expect(useBulkGetCasesMock).toHaveBeenCalledWith(['test-id-2']); + }); + }); }); describe('Alerts table configuration registry', () => { @@ -207,9 +283,6 @@ describe('AlertsTableState', () => { }); describe('flyout', () => { - beforeEach(() => { - hookUseFetchAlerts.mockClear(); - }); it('should show a flyout when selecting an alert', async () => { const wrapper = render(); userEvent.click(wrapper.queryByTestId('expandColumnCellOpenFlyoutButton-0')!); @@ -245,6 +318,7 @@ describe('AlertsTableState', () => { expect(result.length).toBe(1); hookUseFetchAlerts.mockClear(); + userEvent.click(wrapper.queryAllByTestId('pagination-button-next')[0]); expect(hookUseFetchAlerts).toHaveBeenCalledWith( expect.objectContaining({ @@ -387,15 +461,14 @@ describe('AlertsTableState', () => { describe('empty state', () => { beforeEach(() => { - refecthMock.mockClear(); - hookUseFetchAlerts.mockClear(); + refetchMock.mockClear(); hookUseFetchAlerts.mockImplementation(() => [ false, { alerts: [], isInitializing: false, getInspectQuery: jest.fn(), - refetch: refecthMock, + refetch: refetchMock, totalAlerts: 0, }, ]); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx index 1257b1de2c95a..3ce4f1395c3a8 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/alerts_table_state.tsx @@ -22,11 +22,14 @@ import type { QueryDslQueryContainer, SortCombinations, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { QueryClientProvider } from '@tanstack/react-query'; import { useFetchAlerts } from './hooks/use_fetch_alerts'; import { AlertsTable } from './alerts_table'; import { BulkActionsContext } from './bulk_actions/context'; import { EmptyState } from './empty_state'; import { + Alert, + Alerts, AlertsTableConfigurationRegistry, AlertsTableProps, BulkActionsReducerAction, @@ -39,6 +42,8 @@ import { bulkActionsReducer } from './bulk_actions/reducer'; import { useGetUserCasesPermissions } from './hooks/use_get_user_cases_permissions'; import { useColumns } from './hooks/use_columns'; import { InspectButtonContainer } from './toolbar/components/inspect'; +import { alertsTableQueryClient } from './query_client'; +import { useBulkGetCases } from './hooks/use_bulk_get_cases'; const DefaultPagination = { pageSize: 10, @@ -89,7 +94,28 @@ const AlertsTableWithBulkActionsContextComponent: React.FunctionComponent<{ const AlertsTableWithBulkActionsContext = React.memo(AlertsTableWithBulkActionsContextComponent); const EMPTY_FIELDS = [{ field: '*', include_unmapped: true }]; -const AlertsTableState = ({ +type AlertWithCaseIds = Alert & Required>; + +const getCaseIdsFromAlerts = (alerts: Alerts): Set => + new Set( + alerts + .filter( + (alert): alert is AlertWithCaseIds => + alert['kibana.alert.case_ids'] != null && alert['kibana.alert.case_ids'].length > 0 + ) + .map((alert) => alert['kibana.alert.case_ids']) + .flat() + ); + +const AlertsTableState = (props: AlertsTableStateProps) => { + return ( + + + + ); +}; + +const AlertsTableStateWithQueryProvider = ({ alertsTableConfigurationRegistry, configurationId, id, @@ -100,10 +126,11 @@ const AlertsTableState = ({ showExpandToDetails, showAlertStatusWithFlapping, }: AlertsTableStateProps) => { - const { cases } = useKibana<{ cases: CaseUi }>().services; + const { cases: casesService } = useKibana<{ cases: CaseUi }>().services; const hasAlertsTableConfiguration = alertsTableConfigurationRegistry?.has(configurationId) ?? false; + const alertsTableConfiguration = hasAlertsTableConfiguration ? alertsTableConfigurationRegistry.get(configurationId) : EmptyConfiguration; @@ -178,6 +205,9 @@ const AlertsTableState = ({ skip: false, }); + const caseIds = useMemo(() => getCaseIdsFromAlerts(alerts), [alerts]); + const { data: cases, isLoading: isLoadingCases } = useBulkGetCases(Array.from(caseIds.values())); + const onPageChange = useCallback((_pagination: RuleRegistrySearchRequestPagination) => { setPagination(_pagination); }, []); @@ -240,6 +270,7 @@ const AlertsTableState = ({ const tableProps = useMemo( () => ({ alertsTableConfiguration, + casesData: { cases: cases ?? new Map(), isLoading: isLoadingCases }, columns, bulkActions: [], deletedEventIds: [], @@ -266,6 +297,8 @@ const AlertsTableState = ({ }), [ alertsTableConfiguration, + cases, + isLoadingCases, columns, flyoutSize, pagination.pageSize, @@ -285,7 +318,7 @@ const AlertsTableState = ({ ] ); - const CasesContext = cases?.ui.getCasesContext(); + const CasesContext = casesService?.ui.getCasesContext(); const userCasesPermissions = useGetUserCasesPermissions(alertsTableConfiguration.casesFeatureId); return hasAlertsTableConfiguration ? ( @@ -302,7 +335,7 @@ const AlertsTableState = ({ {(isLoading || isBrowserFieldDataLoading) && ( )} - {alertsCount !== 0 && CasesContext && cases && ( + {alertsCount !== 0 && CasesContext && casesService && ( )} - {alertsCount !== 0 && (!CasesContext || !cases) && ( + {alertsCount !== 0 && (!CasesContext || !casesService) && ( ({ @@ -53,7 +55,7 @@ describe('AlertsTable.BulkActions', () => { _id: 'alert1', _index: 'idx1', }, - ] as unknown as EcsFieldsResponse[]; + ] as unknown as Alerts; const alertsData = { activePage: 0, @@ -85,8 +87,11 @@ describe('AlertsTable.BulkActions', () => { }), }; + const casesMap = getCasesMockMap(); + const tableProps = { alertsTableConfiguration, + casesData: { cases: casesMap, isLoading: false }, columns, deletedEventIds: [], disabledCellActions: [], @@ -134,17 +139,20 @@ describe('AlertsTable.BulkActions', () => { const AlertsTableWithBulkActionsContext: React.FunctionComponent< AlertsTableProps & { initialBulkActionsState?: BulkActionsState } > = (props) => { + const renderer = useMemo(() => createAppMockRenderer(), []); + const AppWrapper = renderer.AppWrapper; + const initialBulkActionsState = useReducer( bulkActionsReducer, props.initialBulkActionsState || defaultBulkActionsState ); return ( - + - + ); }; @@ -237,7 +245,7 @@ describe('AlertsTable.BulkActions', () => { [AlertsField.reason]: ['six'], _id: 'alert2', }, - ] as unknown as EcsFieldsResponse[]; + ] as unknown as Alerts; const props = { ...tablePropsWithBulkActions, alerts: secondPageAlerts, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx index 33dbf73e20587..4203f7e73c180 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/bulk_actions/components/toolbar.tsx @@ -9,16 +9,15 @@ import { EuiPopover, EuiButtonEmpty, EuiContextMenuPanel, EuiContextMenuItem } f import numeral from '@elastic/numeral'; import React, { useState, useCallback, useMemo, useContext, useEffect } from 'react'; import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; -import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import { ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; -import { BulkActionsConfig, BulkActionsVerbs, RowSelection } from '../../../../../types'; +import { Alerts, BulkActionsConfig, BulkActionsVerbs, RowSelection } from '../../../../../types'; import * as i18n from '../translations'; import { BulkActionsContext } from '../context'; interface BulkActionsProps { totalItems: number; items: BulkActionsConfig[]; - alerts: EcsFieldsResponse[]; + alerts: Alerts; setIsBulkActionsLoading: (loading: boolean) => void; } @@ -40,7 +39,7 @@ const DEFAULT_NUMBER_FORMAT = 'format:number:defaultPattern'; const containerStyles = { display: 'inline-block', position: 'relative' } as const; const selectedIdsToTimelineItemMapper = ( - alerts: EcsFieldsResponse[], + alerts: Alerts, rowSelection: RowSelection ): TimelineItem[] => { return Array.from(rowSelection.keys()).map((rowIndex: number) => { @@ -62,7 +61,7 @@ const selectedIdsToTimelineItemMapper = ( const useBulkActionsToMenuItemMapper = ( items: BulkActionsConfig[], - alerts: EcsFieldsResponse[], + alerts: Alerts, setIsBulkActionsLoading: (loading: boolean) => void ) => { const [{ isAllSelected, rowSelection }] = useContext(BulkActionsContext); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx new file mode 100644 index 0000000000000..05f7194ebfce3 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.test.tsx @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; +import { CasesCell } from './cell'; +import { CellComponentProps } from '../types'; +import { Alert } from '../../../../types'; +import { getCasesMockMap } from './index.mock'; +import userEvent from '@testing-library/user-event'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; +import { useCaseViewNavigation } from './use_case_view_navigation'; + +jest.mock('../../../../common/lib/kibana'); +jest.mock('./use_case_view_navigation'); + +const useCaseViewNavigationMock = useCaseViewNavigation as jest.Mock; + +describe('CasesCell', () => { + const casesMap = getCasesMockMap(); + const alert = { + _id: 'alert-id', + _index: 'alert-index', + 'kibana.alert.case_ids': ['test-id'], + } as Alert; + + const props: CellComponentProps = { + isLoading: false, + alert, + cases: casesMap, + columnId: 'kibana.alert.case_ids', + showAlertStatusWithFlapping: false, + }; + + let appMockRender: AppMockRenderer; + + const navigateToCaseView = jest.fn(); + useCaseViewNavigationMock.mockReturnValue({ navigateToCaseView }); + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + }); + + it('renders the cases cell', async () => { + appMockRender.render(); + expect(screen.getByText('Test case')).toBeInTheDocument(); + }); + + it('renders the loading skeleton', async () => { + appMockRender.render(); + expect(screen.getByTestId('cases-cell-loading')).toBeInTheDocument(); + }); + + it('renders multiple cases correctly', async () => { + appMockRender.render( + + ); + + expect(screen.getByText('Test case')).toBeInTheDocument(); + expect(screen.getByText('Test case 2')).toBeInTheDocument(); + }); + + it('does not render a case that it is in the map but not in the alerts data', async () => { + appMockRender.render(); + + expect(screen.getByText('Test case')).toBeInTheDocument(); + expect(screen.queryByText('Test case 2')).not.toBeInTheDocument(); + }); + + it('does not show any cases when the alert does not have any case ids', async () => { + appMockRender.render( + + ); + + expect(screen.queryByText('Test case')).not.toBeInTheDocument(); + expect(screen.queryByText('Test case 2')).not.toBeInTheDocument(); + }); + + it('does show the default value when the alert does not have any case ids', async () => { + appMockRender.render( + + ); + + expect(screen.getByText('--')).toBeInTheDocument(); + }); + + it('does not show any cases when the alert has invalid case ids', async () => { + appMockRender.render( + + ); + + expect(screen.queryByTestId('cases-cell-link')).not.toBeInTheDocument(); + }); + + it('does show the default value when the alert has invalid case ids', async () => { + appMockRender.render( + + ); + + expect(screen.getByText('--')).toBeInTheDocument(); + }); + + it('shows the cases tooltip', async () => { + appMockRender.render(); + expect(screen.getByText('Test case')).toBeInTheDocument(); + + userEvent.hover(screen.getByText('Test case')); + + expect(await screen.findByTestId('cases-components-tooltip')).toBeInTheDocument(); + }); + + it('navigates to the case correctly', async () => { + appMockRender.render(); + expect(screen.getByText('Test case')).toBeInTheDocument(); + + userEvent.click(screen.getByText('Test case')); + expect(navigateToCaseView).toBeCalledWith({ caseId: 'test-id' }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx new file mode 100644 index 0000000000000..5fe9c7033e5d5 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/cell.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { EuiLink, EuiSkeletonText } from '@elastic/eui'; +import { Tooltip as CaseTooltip } from '@kbn/cases-components'; +import type { CaseTooltipContentProps } from '@kbn/cases-components'; +import { ALERT_CASE_IDS } from '@kbn/rule-data-utils'; +import { CellComponentProps } from '../types'; +import { useCaseViewNavigation } from './use_case_view_navigation'; +import { Case } from '../hooks/api'; + +const formatCase = (theCase: Case): CaseTooltipContentProps => ({ + title: theCase.title, + description: theCase.description, + createdAt: theCase.created_at, + createdBy: { + username: theCase.created_by.username ?? undefined, + fullName: theCase.created_by.full_name ?? undefined, + }, + status: theCase.status, + totalComments: theCase.totalComment, +}); + +const CasesCellComponent: React.FC = (props) => { + const { isLoading, alert, cases } = props; + const { navigateToCaseView } = useCaseViewNavigation(); + + const caseIds = alert[ALERT_CASE_IDS] ?? []; + + const validCases = caseIds + .map((id) => cases.get(id)) + .filter((theCase): theCase is Case => theCase != null); + + if (validCases.length === 0) { + return <>{'--'}; + } + + return ( + + {validCases.map((theCase, index) => [ + index > 0 && index < validCases.length && ', ', + + navigateToCaseView({ caseId: theCase.id })} + data-test-subj="cases-cell-link" + > + {theCase.title} + + , + ])} + + ); +}; + +CasesCellComponent.displayName = 'CasesCell'; + +export const CasesCell = memo(CasesCellComponent); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts new file mode 100644 index 0000000000000..032ede0c80afb --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/index.mock.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CaseStatuses } from '@kbn/cases-components'; +import { Case } from '../hooks/api'; + +export const theCase: Case = { + id: 'test-id', + created_at: '2023-02-16T18:13:37.058Z', + created_by: { full_name: 'Elastic', username: 'elastic', email: 'elastic@elastic.co' }, + description: 'Test description', + status: CaseStatuses.open, + title: 'Test case', + totalComment: 1, + version: 'WzQ3LDFd', + owner: 'cases', +}; + +export const getCasesMockMap = (): Map => { + const casesMap = new Map(); + + casesMap.set(theCase.id, theCase); + casesMap.set('test-id-2', { ...theCase, id: 'test-id-2', title: 'Test case 2' }); + + return casesMap; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts new file mode 100644 index 0000000000000..49cb26dbe9d97 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.test.ts @@ -0,0 +1,44 @@ +/* + * Copyright 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 { BehaviorSubject } from 'rxjs'; +import { act, renderHook } from '@testing-library/react-hooks'; +import { useKibana } from '../../../../common/lib/kibana'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; +import { useCaseViewNavigation } from './use_case_view_navigation'; + +jest.mock('../../../../common/lib/kibana'); + +const useKibanaMock = useKibana as jest.Mocked; + +describe('useCaseViewNavigation', () => { + let appMockRender: AppMockRenderer; + const navigateToApp = jest.fn(); + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + useKibanaMock().services.application.currentAppId$ = new BehaviorSubject('testAppId'); + useKibanaMock().services.application.navigateToApp = navigateToApp; + }); + + it('calls navigateToApp with correct arguments', () => { + const { result, waitFor } = renderHook(() => useCaseViewNavigation(), { + wrapper: appMockRender.AppWrapper, + }); + + act(() => { + result.current.navigateToCaseView({ caseId: 'test-id' }); + }); + + waitFor(() => { + expect(navigateToApp).toHaveBeenCalledWith('testAppId', { + deepLinkId: 'cases', + path: '/test-id', + }); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.ts new file mode 100644 index 0000000000000..180b90448c90e --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cases/use_case_view_navigation.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 { generatePath } from 'react-router-dom'; +import useObservable from 'react-use/lib/useObservable'; +import { useCallback } from 'react'; + +import { useKibana } from '../../../../common/lib/kibana'; + +type NavigateToCaseView = (pathParams: { caseId: string }) => void; + +const CASE_APP_ID = 'cases'; + +const generateCaseViewPath = (caseId: string): string => { + return generatePath('/:caseId', { caseId }); +}; + +export const useCaseViewNavigation = () => { + const { + application: { navigateToApp, currentAppId$ }, + } = useKibana().services; + + const appId = useObservable(currentAppId$); + + const navigateToCaseView = useCallback( + (pathParams) => + navigateToApp(appId ?? '', { + deepLinkId: CASE_APP_ID, + path: generateCaseViewPath(pathParams.caseId), + }), + [navigateToApp, appId] + ); + + return { navigateToCaseView }; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx new file mode 100644 index 0000000000000..ca89b01c14548 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.test.tsx @@ -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 React from 'react'; +import { screen } from '@testing-library/react'; +import { AlertLifecycleStatusCell } from './alert_lifecycle_status_cell'; +import { CellComponentProps } from '../types'; +import { Alert } from '../../../../types'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; +import { getCasesMockMap } from '../cases/index.mock'; + +jest.mock('../../../../common/lib/kibana'); + +describe('AlertLifecycleStatusCell', () => { + const casesMap = getCasesMockMap(); + const alert = { + _id: 'alert-id', + _index: 'alert-index', + 'kibana.alert.status': ['active'], + } as Alert; + + const props: CellComponentProps = { + isLoading: false, + alert, + cases: casesMap, + columnId: 'kibana.alert.status', + showAlertStatusWithFlapping: true, + }; + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + }); + + it('shows the status', async () => { + appMockRender.render(); + expect(screen.getByText('Active')).toBeInTheDocument(); + }); + + it('does not shows the status if showAlertStatusWithFlapping=false', async () => { + appMockRender.render( + + ); + expect(screen.queryByText('Active')).not.toBeInTheDocument(); + }); + + it('shows the status with flapping', async () => { + appMockRender.render( + + ); + expect(screen.getByText('Flapping')).toBeInTheDocument(); + }); + + it('shows the status with multiple values', async () => { + appMockRender.render( + + ); + + expect(screen.getByText('Active')).toBeInTheDocument(); + }); + + it('shows the default cell if the status is empty', async () => { + appMockRender.render( + + ); + + expect(screen.getByText('--')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx new file mode 100644 index 0000000000000..8df055184957e --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/alert_lifecycle_status_cell.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AlertStatus, ALERT_FLAPPING, ALERT_STATUS } from '@kbn/rule-data-utils'; +import React, { memo } from 'react'; +import { AlertLifecycleStatusBadge } from '../../../components/alert_lifecycle_status_badge'; +import { CellComponentProps } from '../types'; +import { DefaultCell } from './default_cell'; + +const AlertLifecycleStatusCellComponent: React.FC = (props) => { + const { alert, showAlertStatusWithFlapping } = props; + + if (!showAlertStatusWithFlapping) { + return null; + } + + const alertStatus = alert[ALERT_STATUS] ?? []; + + if (Array.isArray(alertStatus) && alertStatus.length) { + const flapping = alert[ALERT_FLAPPING] ?? []; + + return ( + + ); + } + + return ; +}; + +AlertLifecycleStatusCellComponent.displayName = 'AlertLifecycleStatusCell'; + +export const AlertLifecycleStatusCell = memo(AlertLifecycleStatusCellComponent); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx new file mode 100644 index 0000000000000..6c4dbaf085c81 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.test.tsx @@ -0,0 +1,61 @@ +/* + * Copyright 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 { screen } from '@testing-library/react'; +import { DefaultCell } from './default_cell'; +import { CellComponentProps } from '../types'; +import { Alert } from '../../../../types'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; +import { getCasesMockMap } from '../cases/index.mock'; + +jest.mock('../../../../common/lib/kibana'); + +describe('DefaultCell', () => { + const casesMap = getCasesMockMap(); + const alert = { + _id: 'alert-id', + _index: 'alert-index', + 'kibana.alert.status': ['active'], + } as Alert; + + const props: CellComponentProps = { + isLoading: false, + alert, + cases: casesMap, + columnId: 'kibana.alert.status', + showAlertStatusWithFlapping: false, + }; + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + }); + + it('shows the value', async () => { + appMockRender.render(); + expect(screen.getByText('active')).toBeInTheDocument(); + }); + + it('shows empty tag if the value is empty', async () => { + appMockRender.render( + + ); + expect(screen.getByText('--')).toBeInTheDocument(); + }); + + it('shows multiple values', async () => { + appMockRender.render( + + ); + expect(screen.getByText('active, recovered')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx new file mode 100644 index 0000000000000..2ecd96c2e8bcd --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/default_cell.tsx @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo } from 'react'; +import { CellComponentProps } from '../types'; + +const DefaultCellComponent: React.FC = ({ columnId, alert }) => { + const value = alert[columnId] ?? []; + + if (Array.isArray(value)) { + return <>{value.length ? value.join(', ') : '--'}; + } + + return <>{value}; +}; + +DefaultCellComponent.displayName = 'DefaultCell'; + +export const DefaultCell = memo(DefaultCellComponent); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx new file mode 100644 index 0000000000000..900093ba64103 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.test.tsx @@ -0,0 +1,56 @@ +/* + * Copyright 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 { screen } from '@testing-library/react'; +import { SystemCellFactory } from '.'; +import { CellComponentProps } from '../types'; +import { Alert } from '../../../../types'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; +import { getCasesMockMap } from '../cases/index.mock'; + +jest.mock('../../../../common/lib/kibana'); + +describe('SystemCellFactory', () => { + const casesMap = getCasesMockMap(); + const alert = { + _id: 'alert-id', + _index: 'alert-index', + 'kibana.alert.status': ['active'], + 'kibana.alert.case_ids': ['test-id'], + } as Alert; + + const props: CellComponentProps = { + isLoading: false, + alert, + cases: casesMap, + columnId: 'kibana.alert.status', + showAlertStatusWithFlapping: true, + }; + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + }); + + it('shows the status cell', async () => { + appMockRender.render(); + expect(screen.getByText('Active')).toBeInTheDocument(); + }); + + it('shows the cases cell', async () => { + appMockRender.render(); + expect(screen.getByText('Test case')).toBeInTheDocument(); + }); + + it('shows the cell if the columnId is not registered to the map', async () => { + // @ts-expect-error: columnId is typed to accept only status & case_ids + appMockRender.render(); + expect(screen.getByText('--')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx new file mode 100644 index 0000000000000..0ef9bc5e3f0c2 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/cells/index.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { memo, useMemo } from 'react'; +import { ALERT_STATUS, ALERT_CASE_IDS } from '@kbn/rule-data-utils'; +import { CellComponentProps, SystemCellComponentMap, SystemCellId } from '../types'; +import { DefaultCell } from './default_cell'; +import { AlertLifecycleStatusCell } from './alert_lifecycle_status_cell'; +import { CasesCell } from '../cases/cell'; + +export const systemCells: SystemCellId[] = [ALERT_STATUS, ALERT_CASE_IDS]; + +const SystemCellFactoryComponent: React.FC = (props) => { + const { columnId } = props; + const cellComponents: SystemCellComponentMap = useMemo( + () => ({ [ALERT_STATUS]: AlertLifecycleStatusCell, [ALERT_CASE_IDS]: CasesCell }), + [] + ); + + if (cellComponents[columnId]) { + const CellComponent = cellComponents[columnId]; + return ; + } + + return ; +}; + +SystemCellFactoryComponent.displayName = 'SystemCellFactory'; + +export const SystemCellFactory = memo(SystemCellFactoryComponent); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.ts new file mode 100644 index 0000000000000..684a16c40a0bc --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.test.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 { bulkGetCases } from './api'; +import { coreMock } from '@kbn/core/public/mocks'; + +describe('Alerts table APIs', () => { + const abortCtrl = new AbortController(); + const mockCoreSetup = coreMock.createSetup(); + const http = mockCoreSetup.http; + + beforeEach(() => { + jest.clearAllMocks(); + http.post.mockResolvedValue({ cases: [], errors: [] }); + }); + + describe('bulkGetCases', () => { + it('fetch cases correctly', async () => { + const res = await bulkGetCases( + http, + { ids: ['test-id'], fields: ['title'] }, + abortCtrl.signal + ); + + expect(res).toEqual({ cases: [], errors: [] }); + }); + + it('should call http with correct arguments', async () => { + await bulkGetCases(http, { ids: ['test-id'], fields: ['title'] }, abortCtrl.signal); + + expect(http.post).toHaveBeenCalledWith('/internal/cases/_bulk_get', { + body: '{"ids":["test-id"],"fields":["title"]}', + signal: abortCtrl.signal, + }); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.ts new file mode 100644 index 0000000000000..364c8480b8a2d --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/api.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. + */ + +import { CaseStatuses } from '@kbn/cases-components'; +import { HttpStart } from '@kbn/core-http-browser'; + +const INTERNAL_BULK_GET_CASES_URL = '/internal/cases/_bulk_get'; + +export interface Case { + title: string; + description: string; + status: CaseStatuses; + totalComment: number; + created_at: string; + created_by: { + email: string | null | undefined; + full_name: string | null | undefined; + username: string | null | undefined; + }; + id: string; + owner: string; + version: string; +} + +export type Cases = Case[]; + +export interface CasesBulkGetResponse { + cases: Cases; + errors: Array<{ + caseId: string; + error: string; + message: string; + status?: number; + }>; +} + +export const bulkGetCases = async ( + http: HttpStart, + params: { ids: string[]; fields: string[] }, + signal?: AbortSignal +): Promise => { + const res = await http.post(INTERNAL_BULK_GET_CASES_URL, { + body: JSON.stringify({ ...params }), + signal, + }); + + return res; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts index a6cdfe8af2249..7758143f9e584 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_actions.ts @@ -5,8 +5,8 @@ * 2.0. */ import { useContext, useEffect } from 'react'; -import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import { + Alerts, BulkActionsConfig, BulkActionsState, BulkActionsVerbs, @@ -19,7 +19,7 @@ import { } from '../bulk_actions/get_leading_control_column'; interface BulkActionsProps { - alerts: EcsFieldsResponse[]; + alerts: Alerts; useBulkActionsConfig?: UseBulkActionsRegistry; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx new file mode 100644 index 0000000000000..28ed298ea7669 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.test.tsx @@ -0,0 +1,73 @@ +/* + * Copyright 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 { renderHook } from '@testing-library/react-hooks'; +import * as api from './api'; +import { waitFor } from '@testing-library/dom'; +import { useKibana } from '../../../../common/lib/kibana'; +import { useBulkGetCases } from './use_bulk_get_cases'; +import { AppMockRenderer, createAppMockRenderer } from '../../test_utils'; + +jest.mock('./api'); +jest.mock('../../../../common/lib/kibana'); + +const response = { + cases: [], + errors: [], +}; + +describe('useBulkGetCases', () => { + const addErrorMock = useKibana().services.notifications.toasts.addError as jest.Mock; + + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + }); + + it('calls the api when invoked with the correct parameters', async () => { + const spy = jest.spyOn(api, 'bulkGetCases'); + spy.mockResolvedValue(response); + + const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1']), { + wrapper: appMockRender.AppWrapper, + }); + + await waitForNextUpdate(); + + expect(spy).toHaveBeenCalledWith( + expect.anything(), + { + ids: ['case-1'], + fields: ['title', 'description', 'status', 'totalComment', 'created_at', 'created_by'], + }, + expect.any(AbortSignal) + ); + }); + + it('shows a toast error when the api return an error', async () => { + const spy = jest.spyOn(api, 'bulkGetCases').mockRejectedValue(new Error('An error')); + + const { waitForNextUpdate } = renderHook(() => useBulkGetCases(['case-1']), { + wrapper: appMockRender.AppWrapper, + }); + + await waitForNextUpdate(); + + await waitFor(() => { + expect(spy).toHaveBeenCalledWith( + expect.anything(), + { + ids: ['case-1'], + fields: ['title', 'description', 'status', 'totalComment', 'created_at', 'created_by'], + }, + expect.any(AbortSignal) + ); + expect(addErrorMock).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx new file mode 100644 index 0000000000000..deed7f5e62d50 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_bulk_get_cases.tsx @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { useQuery } from '@tanstack/react-query'; +import { useKibana } from '../../../../common'; +import { triggersActionsUiQueriesKeys } from '../../../hooks/constants'; +import { ServerError } from '../types'; +import { bulkGetCases, Case, CasesBulkGetResponse } from './api'; + +const ERROR_TITLE = i18n.translate('xpack.triggersActionsUI.cases.api.bulkGet', { + defaultMessage: 'Error fetching cases data', +}); + +const caseFields = ['title', 'description', 'status', 'totalComment', 'created_at', 'created_by']; + +const transformCases = (data: CasesBulkGetResponse): Map => { + const casesMap = new Map(); + + for (const theCase of data?.cases ?? []) { + casesMap.set(theCase.id, { ...theCase }); + } + + return casesMap; +}; + +export const useBulkGetCases = (caseIds: string[]) => { + const { + http, + notifications: { toasts }, + } = useKibana().services; + + return useQuery( + triggersActionsUiQueriesKeys.casesBulkGet(), + () => { + const abortCtrlRef = new AbortController(); + return bulkGetCases(http, { ids: caseIds, fields: caseFields }, abortCtrlRef.signal); + }, + { + enabled: caseIds.length > 0, + select: transformCases, + onError: (error: ServerError) => { + if (error.name !== 'AbortError') { + toasts.addError( + error.body && error.body.message ? new Error(error.body.message) : error, + { + title: ERROR_TITLE, + } + ); + } + }, + } + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx index 3424ab761355a..b3f5c046bef28 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_alerts.tsx @@ -13,7 +13,6 @@ import { Subscription } from 'rxjs'; import { isCompleteResponse, isErrorResponse } from '@kbn/data-plugin/common'; import type { - EcsFieldsResponse, RuleRegistrySearchRequest, RuleRegistrySearchResponse, } from '@kbn/rule-registry-plugin/common/search_strategy'; @@ -22,7 +21,7 @@ import type { QueryDslQueryContainer, SortCombinations, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { GetInspectQuery, InspectQuery } from '../../../../types'; +import type { Alert, Alerts, GetInspectQuery, InspectQuery } from '../../../../types'; import { useKibana } from '../../../../common/lib/kibana'; import { DefaultSort } from './constants'; import * as i18n from './translations'; @@ -44,7 +43,7 @@ type AlertRequest = Omit; type Refetch = () => void; export interface FetchAlertResp { - alerts: EcsFieldsResponse[]; + alerts: Alerts; isInitializing: boolean; getInspectQuery: GetInspectQuery; refetch: Refetch; @@ -61,7 +60,7 @@ interface AlertStateReducer { type AlertActions = | { type: 'loading'; loading: boolean } - | { type: 'response'; alerts: EcsFieldsResponse[]; totalAlerts: number } + | { type: 'response'; alerts: Alerts; totalAlerts: number } | { type: 'resetPagination' } | { type: 'request'; request: Omit }; @@ -193,13 +192,13 @@ const useFetchAlerts = ({ } dispatch({ type: 'response', - alerts: rawResponse.hits.hits.reduce((acc, hit) => { + alerts: rawResponse.hits.hits.reduce((acc, hit) => { if (hit.fields) { acc.push({ ...hit.fields, _id: hit._id, _index: hit._index, - } as EcsFieldsResponse); + } as Alert); } return acc; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx index e1014057ab1d7..5f04421f5bc81 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/hooks/use_fetch_browser_fields_capabilities.tsx @@ -6,9 +6,9 @@ */ import type { ValidFeatureId } from '@kbn/rule-data-utils'; -import type { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import { BASE_RAC_ALERTS_API_PATH, BrowserFields } from '@kbn/rule-registry-plugin/common'; import { useCallback, useEffect, useState } from 'react'; +import type { Alerts } from '../../../../types'; import { useKibana } from '../../../../common/lib/kibana'; import { ERROR_FETCH_BROWSER_FIELDS } from './translations'; @@ -17,7 +17,7 @@ export interface FetchAlertsArgs { } export interface FetchAlertResp { - alerts: EcsFieldsResponse[]; + alerts: Alerts; } export type UseFetchAlerts = ({ featureIds }: FetchAlertsArgs) => [boolean, FetchAlertResp]; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts new file mode 100644 index 0000000000000..133a6d5fbdd46 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/query_client.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { QueryClient } from '@tanstack/react-query'; + +export const alertsTableQueryClient = new QueryClient(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx index 214a6e21fc0a3..a515d308cf4b6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/toolbar/toolbar_visibility.tsx @@ -9,11 +9,10 @@ import { EuiDataGridToolBarAdditionalControlsOptions, EuiDataGridToolBarVisibilityOptions, } from '@elastic/eui'; -import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import React, { lazy, Suspense } from 'react'; import { BrowserFields } from '@kbn/rule-registry-plugin/common'; import { AlertsCount } from './components/alerts_count/alerts_count'; -import { BulkActionsConfig, GetInspectQuery, RowSelection } from '../../../../types'; +import type { Alerts, BulkActionsConfig, GetInspectQuery, RowSelection } from '../../../../types'; import { LastUpdatedAt } from './components/last_updated_at'; import { FieldBrowser } from '../../field_browser'; import { InspectButton } from './components/inspect'; @@ -109,7 +108,7 @@ export const getToolbarVisibility = ({ bulkActions: BulkActionsConfig[]; alertsCount: number; rowSelection: RowSelection; - alerts: EcsFieldsResponse[]; + alerts: Alerts; isLoading: boolean; updatedAt: number; columnIds: string[]; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts index 9622477db3a30..ab6793745da30 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alerts_table/types.ts @@ -4,9 +4,30 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { AlertConsumers } from '@kbn/rule-data-utils'; +import { AlertConsumers, ALERT_CASE_IDS, ALERT_STATUS } from '@kbn/rule-data-utils'; +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser'; +import { Alert, AlertsTableProps } from '../../../types'; export interface Consumer { id: AlertConsumers; name: string; } + +export type ServerError = IHttpFetchError; + +export interface CellComponentProps { + alert: Alert; + cases: AlertsTableProps['casesData']['cases']; + columnId: SystemCellId; + isLoading: boolean; + showAlertStatusWithFlapping: boolean; +} + +export type CellComponent = React.FC; + +export interface SystemCellComponentMap { + [ALERT_STATUS]: CellComponent; + [ALERT_CASE_IDS]: CellComponent; +} + +export type SystemCellId = keyof SystemCellComponentMap; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx new file mode 100644 index 0000000000000..4dd06217de0dc --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/test_utils.tsx @@ -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 React from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { of } from 'rxjs'; +import { I18nProvider } from '@kbn/i18n-react'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { render as reactRender, RenderOptions, RenderResult } from '@testing-library/react'; +import { KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; + +import { TriggersAndActionsUiServices } from '../..'; +import { createStartServicesMock } from '../../common/lib/kibana/kibana_react.mock'; + +/* eslint-disable no-console */ + +type UiRender = (ui: React.ReactElement, options?: RenderOptions) => RenderResult; + +export interface AppMockRenderer { + render: UiRender; + coreStart: TriggersAndActionsUiServices; + queryClient: QueryClient; + AppWrapper: React.FC<{ children: React.ReactElement }>; +} + +export const createAppMockRenderer = (): AppMockRenderer => { + const services = createStartServicesMock(); + const theme$ = of({ darkMode: false }); + + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + /** + * React query prints the errors in the console even though + * all tests are passings. We turn them off for testing. + */ + logger: { + log: console.log, + warn: console.warn, + error: () => {}, + }, + }); + + const AppWrapper: React.FC<{ children: React.ReactElement }> = React.memo(({ children }) => ( + + + + {children} + + + + )); + + AppWrapper.displayName = 'AppWrapper'; + + const render: UiRender = (ui, options) => { + return reactRender(ui, { + wrapper: AppWrapper, + ...options, + }); + }; + + return { + coreStart: services, + render, + queryClient, + AppWrapper, + }; +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index f99573150faaf..2ed9c2c1c8994 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -81,6 +81,7 @@ import type { import { RulesListVisibleColumns } from './application/sections/rules_list/components/rules_list_column_selector'; import { TimelineItem } from './application/sections/alerts_table/bulk_actions/components/toolbar'; import type { RulesListNotifyBadgePropsWithApi } from './application/sections/rules_list/components/notify_badge'; +import { Case } from './application/sections/alerts_table/hooks/api'; // In Triggers and Actions we treat all `Alert`s as `SanitizedRule` // so the `Params` is a black-box of Record @@ -458,9 +459,12 @@ export interface InspectQuery { } export type GetInspectQuery = () => InspectQuery; +export type Alert = EcsFieldsResponse; +export type Alerts = Alert[]; + export interface FetchAlertData { activePage: number; - alerts: EcsFieldsResponse[]; + alerts: Alerts; alertsCount: number; isInitializing: boolean; isLoading: boolean; @@ -473,6 +477,7 @@ export interface FetchAlertData { export interface AlertsTableProps { alertsTableConfiguration: AlertsTableConfigurationRegistry; + casesData: { cases: Map; isLoading: boolean }; columns: EuiDataGridColumn[]; // defaultCellActions: TGridCellAction[]; deletedEventIds: string[]; @@ -511,7 +516,7 @@ export type AlertTableFlyoutComponent = | null; export interface AlertsTableFlyoutBaseProps { - alert: EcsFieldsResponse; + alert: Alert; isLoading: boolean; id?: string; } @@ -530,7 +535,7 @@ export interface BulkActionsConfig { } export interface RenderCustomActionsRowArgs { - alert: EcsFieldsResponse; + alert: Alert; setFlyoutAlert: (data: unknown) => void; id?: string; setIsActionLoading?: (isLoading: boolean) => void; diff --git a/x-pack/plugins/triggers_actions_ui/tsconfig.json b/x-pack/plugins/triggers_actions_ui/tsconfig.json index 96a7c05c91a01..a2bd70a08e6fa 100644 --- a/x-pack/plugins/triggers_actions_ui/tsconfig.json +++ b/x-pack/plugins/triggers_actions_ui/tsconfig.json @@ -47,6 +47,7 @@ "@kbn/shared-ux-router", "@kbn/alerts-ui-shared", "@kbn/safer-lodash-set", + "@kbn/cases-components" ], "exclude": [ "target/**/*", From c230c63f6c92ba47cad8e5268b758675082c4e7d Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Tue, 21 Feb 2023 11:35:34 +0100 Subject: [PATCH 146/210] [Lens] Heatmap axis auto mode is applied correctly (#151624) ## Summary Fix #151108 This PR handles correctly the `none` => `auto` transition in the axis title component to fallback to the dimension name on `Auto`. ![heatmap_axis_titles](https://user-images.githubusercontent.com/924948/220133022-28462f77-bdf4-4698-8540-a714172c80d6.gif) There's an extra functional test which is skipped for now, waiting for https://github.com/elastic/elastic-charts/pull/1970 to expose the axis title in debug data. ### 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 - [ ] 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) --- .../axis/title/axis_title_settings.test.tsx | 29 +++++++++++++++++++ .../axis/title/axis_title_settings.tsx | 2 +- .../public/shared_components/vis_label.tsx | 15 +++++----- .../heatmap/visualization.test.ts | 2 -- .../visualizations/heatmap/visualization.tsx | 4 +-- .../functional/apps/lens/group3/heatmap.ts | 14 +++++++++ 6 files changed, 54 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx index c5baced9bb4bf..b110b51575077 100644 --- a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx +++ b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.test.tsx @@ -11,6 +11,15 @@ import { mountWithIntl as mount } from '@kbn/test-jest-helpers'; import { AxisTitleSettings, AxisTitleSettingsProps } from './axis_title_settings'; import { Label, VisLabel } from '../../vis_label'; +jest.mock('lodash', () => { + const original = jest.requireActual('lodash'); + + return { + ...original, + debounce: (fn: unknown) => fn, + }; +}); + describe('Axes Title settings', () => { let props: AxisTitleSettingsProps; beforeEach(() => { @@ -68,4 +77,24 @@ describe('Axes Title settings', () => { ); expect(component.find('[data-test-subj="lnsxAxisTitle"]').last().prop('value')).toBe(''); }); + + it('should reset the label when moving from custom to auto', () => { + let component = mount( + + ); + + // switch mode + // Perform the change down one level to check the actual value swap + act(() => { + component.find(VisLabel).find('EuiSelect').prop('onChange')!({ + target: { value: 'auto' }, + } as React.ChangeEvent); + }); + component = component.update(); + expect(component.find('[data-test-subj="lnsxAxisTitle-select"]').last().prop('value')).toBe( + 'auto' + ); + expect(component.find('[data-test-subj="lnsxAxisTitle"]').last().prop('value')).toBe(''); + expect(props.updateTitleState).toHaveBeenCalledWith({ title: undefined, visible: true }, 'x'); + }); }); diff --git a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx index 8a7e203d65f99..d46b99cd817d5 100644 --- a/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx +++ b/x-pack/plugins/lens/public/shared_components/axis/title/axis_title_settings.tsx @@ -83,7 +83,7 @@ export const AxisTitleSettings: React.FunctionComponent defaultMessage: 'Axis title', })} dataTestSubj={`lns${axis}AxisTitle`} - label={localAxisState.title || ''} + label={localAxisState.title} mode={localAxisState.visibility} placeholder={i18n.translate('xpack.lens.shared.overwriteAxisTitle', { defaultMessage: 'Overwrite axis title', diff --git a/x-pack/plugins/lens/public/shared_components/vis_label.tsx b/x-pack/plugins/lens/public/shared_components/vis_label.tsx index 79bab27bbcb6f..6d54d1633d439 100644 --- a/x-pack/plugins/lens/public/shared_components/vis_label.tsx +++ b/x-pack/plugins/lens/public/shared_components/vis_label.tsx @@ -13,11 +13,11 @@ export type LabelMode = 'auto' | 'custom' | 'none'; export interface Label { mode: LabelMode; - label: string; + label: string | undefined; } export interface VisLabelProps { - label: string; + label: string | undefined; mode: LabelMode; handleChange: (label: Label) => void; placeholder?: string; @@ -76,11 +76,12 @@ export function VisLabel({ data-test-subj={`${dataTestSubj}-select`} aria-label="Label" onChange={({ target }) => { - if (target.value === 'custom') { - handleChange({ label: '', mode: target.value as LabelMode }); - return; - } - handleChange({ label: '', mode: target.value as LabelMode }); + const title = + target.value === 'custom' ? '' : target.value === 'auto' ? undefined : label; + handleChange({ + label: title, + mode: target.value as LabelMode, + }); }} options={hasAutoOption ? modeEnhancedOptions : modeDefaultOptions} value={mode} diff --git a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts index 2cb2869339697..596c334aeac9e 100644 --- a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts +++ b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.test.ts @@ -572,8 +572,6 @@ describe('heatmap', () => { // X-axis isXAxisLabelVisible: [false], isXAxisTitleVisible: [false], - xTitle: [''], - yTitle: [''], }, }, ], diff --git a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx index 4450ec558db8b..91c9e60f38d8f 100644 --- a/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/heatmap/visualization.tsx @@ -406,11 +406,11 @@ export const getHeatmapVisualization = ({ // Y-axis isYAxisLabelVisible: false, isYAxisTitleVisible: false, - yTitle: state.gridConfig.yTitle ?? '', + yTitle: state.gridConfig.yTitle, // X-axis isXAxisLabelVisible: false, isXAxisTitleVisible: false, - xTitle: state.gridConfig.xTitle ?? '', + xTitle: state.gridConfig.xTitle, } ); diff --git a/x-pack/test/functional/apps/lens/group3/heatmap.ts b/x-pack/test/functional/apps/lens/group3/heatmap.ts index 2d51e9865cc5a..3e37ce65cc5bc 100644 --- a/x-pack/test/functional/apps/lens/group3/heatmap.ts +++ b/x-pack/test/functional/apps/lens/group3/heatmap.ts @@ -174,5 +174,19 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { key: '≥ 16,948.55', name: '≥ 16,948.55', color: '#cc5642' }, ]); }); + + // Skip for now as EC is not reporting title + it.skip('should display axis values when setting axis title mode to Auto', async () => { + await PageObjects.lens.closeDimensionEditor(); + + await PageObjects.lens.toggleToolbarPopover('lnsLeftAxisButton'); + await testSubjects.selectValue('lnsLeftAxisTitle-select', 'Auto'); + + const debugState = await PageObjects.lens.getCurrentChartDebugState('heatmapChart'); + if (!debugState) { + throw new Error('Debug state is not available'); + } + expect(debugState?.axes?.y?.[0].title).to.eql('Average of bytes'); + }); }); } From a841cf86a3e2b942b507fa7b0dbb9339cc590bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yulia=20=C4=8Cech?= <6585477+yuliacech@users.noreply.github.com> Date: Tue, 21 Feb 2023 11:39:58 +0100 Subject: [PATCH 147/210] [Fleet] Fix kubernetes filename typo (#151646) ## Summary Fixes https://github.com/elastic/kibana/issues/151167 This PR fixes the filename extension for the kubernetes manifest file: The commands in the UI assume the filename to be `elastic-agent-managed-kubernetes.yml` or `elastic-agent-standalone-kubernetes.yml`. The filename was previously using `.yaml` extension. Screenshots
    Screenshot 2023-02-20 at 17 33 52 Screenshot 2023-02-20 at 17 35 05
    --- x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts index 505f5e1b89b0a..83e2600d1beb2 100644 --- a/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts @@ -358,7 +358,7 @@ export const downloadFullAgentPolicy: FleetRequestHandler< const body = fullAgentConfigMap; const headers: ResponseHeaders = { 'content-type': 'text/x-yaml', - 'content-disposition': `attachment; filename="elastic-agent-standalone-kubernetes.yaml"`, + 'content-disposition': `attachment; filename="elastic-agent-standalone-kubernetes.yml"`, }; return response.ok({ body, @@ -438,7 +438,7 @@ export const downloadK8sManifest: FleetRequestHandler< const body = fullAgentManifest; const headers: ResponseHeaders = { 'content-type': 'text/x-yaml', - 'content-disposition': `attachment; filename="elastic-agent-managed-kubernetes.yaml"`, + 'content-disposition': `attachment; filename="elastic-agent-managed-kubernetes.yml"`, }; return response.ok({ body, From de97462358fb859590693b1cca43c20b23f30c20 Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Tue, 21 Feb 2023 11:48:03 +0100 Subject: [PATCH 148/210] [Security Solution] Get rid of rule description's fade in/out effect (#150998) **Addresses:** https://github.com/elastic/kibana/issues/150997 ## Summary It removed rule details description's fade in and out effect which was added by scrolling EUI styles. *Before:* ![Screenshot 2023-02-13 at 13 30 02](https://user-images.githubusercontent.com/3775283/218459498-28dd50ce-94eb-427f-865c-279f611b4049.png) ![Screenshot 2023-02-13 at 13 30 11](https://user-images.githubusercontent.com/3775283/218459532-56072024-8e8b-4ee1-89be-ffece60d31a7.png) *After:* ![Screenshot 2023-02-13 at 13 27 49](https://user-images.githubusercontent.com/3775283/218459699-8da6f5c3-e05d-4c9f-8122-392f3bfd6846.png) ![Screenshot 2023-02-13 at 13 28 00](https://user-images.githubusercontent.com/3775283/218459735-1c522e19-573f-47c4-9490-5828373ac5ac.png) --- .../rules/step_about_rule_details/index.tsx | 100 +++++++++++------- .../rules/step_about_rule_details/styles.ts | 12 +++ 2 files changed, 74 insertions(+), 38 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/styles.ts diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx index ac5e6c559d0d9..4d9c23240a9b2 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/index.tsx @@ -17,9 +17,10 @@ import { EuiResizeObserver, } from '@elastic/eui'; import { isEmpty } from 'lodash'; +import type { PropsWithChildren } from 'react'; import React, { memo, useCallback, useMemo, useState } from 'react'; -import styled from 'styled-components'; +import { css } from '@emotion/react'; import { HeaderSection } from '../../../../common/components/header_section'; import { MarkdownRenderer } from '../../../../common/components/markdown_editor'; import type { @@ -28,28 +29,7 @@ import type { } from '../../../pages/detection_engine/rules/types'; import * as i18n from './translations'; import { StepAboutRule } from '../step_about_rule'; - -const MyPanel = styled(EuiPanel)` - position: relative; -`; - -const FlexGroupFullHeight = styled(EuiFlexGroup)` - height: 100%; -`; - -const VerticalOverflowContainer = styled.div((props: { maxHeight: number }) => ({ - 'max-height': `${props.maxHeight}px`, - 'overflow-y': 'hidden', - 'word-break': 'break-word', -})); - -const VerticalOverflowContent = styled.div((props: { maxHeight: number }) => ({ - 'max-height': `${props.maxHeight}px`, -})); - -const AboutContent = styled.div` - height: 100%; -`; +import { fullHeight } from './styles'; const detailsOption: EuiButtonGroupOptionProps = { id: 'details', @@ -99,7 +79,12 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({ }, [stepDataDetails]); return ( - + {loading && ( <> @@ -107,7 +92,7 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({ )} {stepData != null && stepDataDetails != null && ( - + {toggleOptions.length > 0 && ( @@ -127,9 +112,9 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({ {selectedToggleOption === 'details' && ( {(resizeRef) => ( - +
    - + = ({ isLoading={false} defaultValues={stepData} /> - +
    )}
    )} @@ -154,10 +139,7 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({ data-test-subj="stepAboutDetailsNoteContent" maxHeight={aboutPanelHeight} > - + {stepDataDetails.note} @@ -167,19 +149,61 @@ const StepAboutRuleToggleDetailsComponent: React.FC = ({ data-test-subj="stepAboutDetailsSetupContent" maxHeight={aboutPanelHeight} > - + {stepDataDetails.setup} )}
    -
    + )} -
    + ); }; export const StepAboutRuleToggleDetails = memo(StepAboutRuleToggleDetailsComponent); + +interface VerticalOverflowContainerProps { + maxHeight: number; + 'data-test-subj'?: string; +} + +function VerticalOverflowContainer({ + maxHeight, + 'data-test-subj': dataTestSubject, + children, +}: PropsWithChildren): JSX.Element { + return ( +
    + {children} +
    + ); +} + +interface VerticalOverflowContentProps { + maxHeight: number; +} + +function VerticalOverflowContent({ + maxHeight, + + children, +}: PropsWithChildren): JSX.Element { + return ( +
    + {children} +
    + ); +} diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/styles.ts b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/styles.ts new file mode 100644 index 0000000000000..598e146b9b245 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_about_rule_details/styles.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { css } from '@emotion/react'; + +export const fullHeight = css` + height: 100%; +`; From 406e6c06d187a07b4c2377644e693e43c40d05f2 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Tue, 21 Feb 2023 11:50:27 +0100 Subject: [PATCH 149/210] [Discover] Remove table column after that field was deleted (#150980) Closes https://github.com/elastic/kibana/issues/150958 Closes https://github.com/elastic/kibana/issues/151531 ## Summary This PR removes the field from table and sidebar after it was added as a column but deleted in the end. Steps for testing: - Create a runtime field - Add to the table - Delete the field and observe that it is removed from the table and sidebar. --- .../components/layout/discover_layout.tsx | 18 ++++++---- .../components/sidebar/discover_field.tsx | 2 +- .../components/sidebar/discover_sidebar.tsx | 2 +- .../sidebar/discover_sidebar_responsive.tsx | 4 +-- .../apps/discover/group1/_sidebar.ts | 35 +++++++++++++++++++ 5 files changed, 51 insertions(+), 10 deletions(-) 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 cb7f9c64ff625..da47f1c1e9626 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 @@ -156,12 +156,18 @@ export function DiscoverLayout({ [filterManager, dataView, dataViews, trackUiMetric, capabilities] ); - const onFieldEdited = useCallback(async () => { - if (!dataView.isPersisted()) { - await updateAdHocDataViewId(dataView); - } - stateContainer.dataState.refetch$.next('reset'); - }, [dataView, stateContainer, updateAdHocDataViewId]); + const onFieldEdited = useCallback( + async ({ removedFieldName }: { removedFieldName?: string } = {}) => { + if (removedFieldName && currentColumns.includes(removedFieldName)) { + onRemoveColumn(removedFieldName); + } + if (!dataView.isPersisted()) { + await updateAdHocDataViewId(dataView); + } + stateContainer.dataState.refetch$.next('reset'); + }, + [dataView, stateContainer, updateAdHocDataViewId, currentColumns, onRemoveColumn] + ); const onDisableFilters = useCallback(() => { const disabledFilters = filterManager diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx index 4c45500a84c60..9c6ae0a292d80 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx @@ -232,7 +232,7 @@ export interface DiscoverFieldProps { */ onAddFilter?: (field: DataViewField | string, value: unknown, type: '+' | '-') => void; /** - * Callback to remove/deselect a the field + * Callback to remove a field column from the table * @param fieldName */ onRemoveField: (fieldName: string) => void; diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx index 72bfc8f24dcd4..92cc33852ebc0 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx @@ -173,7 +173,7 @@ export function DiscoverSidebarComponent({ }, fieldName, onDelete: async () => { - await onFieldEdited(); + await onFieldEdited({ removedFieldName: fieldName }); }, }); if (setFieldEditorRef) { 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 b2b2715067d8c..10876cf8aaabc 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 @@ -79,7 +79,7 @@ export interface DiscoverSidebarResponsiveProps { */ onChangeDataView: (id: string) => void; /** - * Callback function when removing a field + * Callback to remove a field column from the table * @param fieldName */ onRemoveField: (fieldName: string) => void; @@ -100,7 +100,7 @@ export interface DiscoverSidebarResponsiveProps { /** * callback to execute on edit runtime field */ - onFieldEdited: () => Promise; + onFieldEdited: (options?: { removedFieldName?: string }) => Promise; /** * callback to execute on create dataview */ diff --git a/test/functional/apps/discover/group1/_sidebar.ts b/test/functional/apps/discover/group1/_sidebar.ts index d57b3edfe83e0..9842cc3df554a 100644 --- a/test/functional/apps/discover/group1/_sidebar.ts +++ b/test/functional/apps/discover/group1/_sidebar.ts @@ -26,6 +26,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const fieldEditor = getService('fieldEditor'); const retry = getService('retry'); + const dataGrid = getService('dataGrid'); const INITIAL_FIELD_LIST_SUMMARY = '53 available fields. 0 empty fields. 3 meta fields.'; describe('discover sidebar', function describeIndexTests() { @@ -715,6 +716,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'test/functional/fixtures/es_archiver/index_pattern_without_timefield' ); }); + + it('should remove the table column after a field was deleted', async () => { + const newField = '_test_field_and_column_removal'; + await PageObjects.discover.addRuntimeField(newField, `emit("hi there")`); + + await retry.waitFor('form to close', async () => { + return !(await testSubjects.exists('fieldEditor')); + }); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + let selectedFields = await PageObjects.discover.getSidebarSectionFieldNames('selected'); + expect(selectedFields.includes(newField)).to.be(false); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + + await PageObjects.discover.clickFieldListItemAdd(newField); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + selectedFields = await PageObjects.discover.getSidebarSectionFieldNames('selected'); + expect(selectedFields.includes(newField)).to.be(true); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', newField]); + + await PageObjects.discover.removeField(newField); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + await retry.waitFor('sidebar to update', async () => { + return !(await PageObjects.discover.getAllFieldNames()).includes(newField); + }); + + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + }); }); }); } From c0745049731d24ce1e494b6ae0118f61a10aa3d4 Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Tue, 21 Feb 2023 12:04:18 +0100 Subject: [PATCH 150/210] [Defend Workflows] Fix Osquery cypress flaky test (#151472) --- x-pack/plugins/osquery/cypress/e2e/all/alerts.cy.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/osquery/cypress/e2e/all/alerts.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/alerts.cy.ts index e772217819e7d..fbb8722e54df8 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/alerts.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/alerts.cy.ts @@ -69,7 +69,7 @@ describe('Alert Event Details', () => { it('adds response actions with osquery with proper validation and form values', () => { cy.visit('/app/security/rules'); cy.contains(RULE_NAME).click(); - cy.contains('Edit rule settings').click(); + cy.contains('Edit rule settings').click({ force: true }); cy.getBySel('edit-rule-actions-tab').wait(500).click(); cy.contains('Response actions are run on each rule execution'); cy.getBySel(OSQUERY_RESPONSE_ACTION_ADD_BUTTON).click(); @@ -114,7 +114,7 @@ describe('Alert Event Details', () => { cy.contains('Save changes').click(); cy.contains(`${RULE_NAME} was saved`).should('exist'); cy.getBySel('toastCloseButton').click(); - cy.contains('Edit rule settings').click(); + cy.contains('Edit rule settings').click({ force: true }); cy.getBySel('edit-rule-actions-tab').wait(500).click(); cy.contains('select * from uptime'); cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { @@ -158,7 +158,7 @@ describe('Alert Event Details', () => { cy.contains(`${RULE_NAME} was saved`).should('exist'); cy.getBySel('toastCloseButton').click(); - cy.contains('Edit rule settings').click(); + cy.contains('Edit rule settings').click({ force: true }); cy.getBySel('edit-rule-actions-tab').wait(500).click(); cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { cy.contains('testpack'); @@ -198,7 +198,7 @@ describe('Alert Event Details', () => { 'You have queries in the investigation guide. Add them as response actions?'; cy.visit('/app/security/rules'); cy.contains(RULE_NAME).click(); - cy.contains('Edit rule settings').click(); + cy.contains('Edit rule settings').click({ force: true }); cy.getBySel('edit-rule-actions-tab').wait(500).click(); cy.getBySel(RESPONSE_ACTIONS_ITEM_0).within(() => { From db251edf2dd09d0b394d5927ad5ea8555eb1cbd5 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 21 Feb 2023 13:03:23 +0100 Subject: [PATCH 151/210] [Synthetics] Fix/refactor usage of default url params, fixes loading states (#150367) Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../embeddable/embeddable.tsx | 10 +++ .../exploratory_view/embeddable/index.tsx | 60 ++++++++++++-- .../constants/synthetics/client_defaults.ts | 9 ++ .../default_status_alert.journey.ts | 3 +- .../e2e/journeys/synthetics/index.ts | 2 +- .../synthetics/overview_sorting.journey.ts | 2 +- .../synthetics/synthetics_app.tsx | 10 ++- .../common/components/auto_refresh_button.tsx | 82 +++++++++++++++++++ .../common/components/last_refreshed.tsx | 71 ++++++++++++++++ .../common/components/refresh_button.tsx | 24 ++++++ .../synthetics_date_picker.test.tsx | 4 +- .../date_picker/synthetics_date_picker.tsx | 19 +---- .../header/action_menu_content.test.tsx | 2 +- .../common/header/action_menu_content.tsx | 4 + ...tart_date.ts => use_monitor_range_from.ts} | 11 ++- .../hooks/use_selected_monitor.tsx | 6 +- .../monitor_errors/errors_tab_content.tsx | 15 ++-- .../monitor_errors/failed_tests_count.tsx | 5 +- .../monitor_errors/monitor_errors.tsx | 6 ++ .../monitor_history/monitor_history.tsx | 38 ++++++--- .../monitor_summary/availability_panel.tsx | 2 + .../availability_sparklines.tsx | 2 + .../monitor_summary/duration_panel.tsx | 2 + .../monitor_summary/duration_sparklines.tsx | 2 + .../monitor_summary/duration_trend.tsx | 1 + .../monitor_complete_count.tsx | 1 + .../monitor_complete_sparklines.tsx | 1 + .../monitor_error_sparklines.tsx | 4 +- .../monitor_summary/monitor_errors_count.tsx | 4 +- .../monitor_summary/monitor_summary.tsx | 38 ++++++--- .../monitor_total_runs_count.tsx | 1 + .../monitor_summary/step_duration_panel.tsx | 1 + .../monitor_details/route_config.tsx | 23 ++---- ..._page.tsx => use_monitor_details_page.tsx} | 4 +- .../common/no_monitors_found.test.tsx | 2 +- .../common/search_field.test.tsx | 2 +- .../monitor_stats/monitor_test_runs.tsx | 6 +- .../monitor_test_runs_sparkline.tsx | 5 +- .../overview/overview/overview_alerts.tsx | 6 +- .../overview_errors/overview_errors.tsx | 4 +- .../overview_errors/overview_errors_count.tsx | 1 + .../overview_errors_sparklines.tsx | 1 + .../overview/overview/quick_filters.test.tsx | 2 +- .../components/monitors_page/route_config.tsx | 28 ++++--- .../hooks/use_network_timings.ts | 2 +- .../hooks/use_network_timings_prev.ts | 6 +- .../hooks/use_step_metrics.ts | 26 ++---- .../hooks/use_step_prev_metrics.ts | 16 ++-- .../contexts/synthetics_refresh_context.tsx | 25 ++++-- .../synthetics/hooks/use_absolute_date.ts | 29 +++++++ .../synthetics/hooks/use_url_params.test.tsx | 30 ++++--- .../apps/synthetics/hooks/use_url_params.ts | 8 +- .../public/apps/synthetics/render_app.tsx | 1 + .../public/apps/synthetics/routes.tsx | 8 +- .../apps/synthetics/state/ui/actions.ts | 2 + .../public/apps/synthetics/state/ui/index.ts | 14 ++++ .../apps/synthetics/state/ui/selectors.ts | 9 ++ .../__mocks__/synthetics_store.mock.ts | 2 + .../get_supported_url_params.test.ts | 17 ++-- .../url_params/get_supported_url_params.ts | 26 +++--- .../url_params/stringify_url_params.test.ts | 12 +-- .../utils/url_params/stringify_url_params.ts | 64 ++++++++------- .../common/header/action_menu_content.tsx | 2 +- .../monitor_list/columns/monitor_name_col.tsx | 2 +- .../monitor_list_drawer/most_recent_error.tsx | 2 +- .../legacy_uptime/hooks/use_breadcrumbs.ts | 2 +- .../legacy_uptime/lib/helper/rtl_helpers.tsx | 2 +- .../helper/url_params/stringify_url_params.ts | 52 ++++++++++++ .../plugins/ux/public/application/ux_app.tsx | 1 + 69 files changed, 651 insertions(+), 235 deletions(-) create mode 100644 x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/auto_refresh_button.tsx create mode 100644 x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/last_refreshed.tsx create mode 100644 x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/refresh_button.tsx rename x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/hooks/{use_earliest_start_date.ts => use_monitor_range_from.ts} (67%) rename x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/{monitor_details_page.tsx => use_monitor_details_page.tsx} (90%) create mode 100644 x-pack/plugins/synthetics/public/legacy_uptime/lib/helper/url_params/stringify_url_params.ts diff --git a/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx b/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx index c602f4b0d14b0..be9a04e05e73b 100644 --- a/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx +++ b/x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx @@ -32,6 +32,7 @@ import { AddToCaseAction } from '../header/add_to_case_action'; import { observabilityFeatureId } from '../../../../../common'; export interface ExploratoryEmbeddableProps { + id?: string; appId?: 'securitySolutionUI' | 'observability'; appendTitle?: JSX.Element; attributes?: AllSeries; @@ -46,6 +47,7 @@ export interface ExploratoryEmbeddableProps { legendPosition?: Position; hideTicks?: boolean; onBrushEnd?: (param: { range: number[] }) => void; + onLoad?: (loading: boolean) => void; caseOwner?: string; reportConfigMap?: ReportConfigMap; reportType: ReportViewType; @@ -58,6 +60,7 @@ export interface ExploratoryEmbeddableProps { fontSize?: number; lineHeight?: number; dataTestSubj?: string; + searchSessionId?: string; } export interface ExploratoryEmbeddableComponentProps extends ExploratoryEmbeddableProps { @@ -93,6 +96,8 @@ export default function Embeddable({ noLabel, fontSize = 27, lineHeight = 32, + searchSessionId, + onLoad, }: ExploratoryEmbeddableComponentProps) { const LensComponent = lens?.EmbeddableComponent; const LensSaveModalComponent = lens?.SaveModalComponent; @@ -188,6 +193,9 @@ export default function Embeddable({ return No lens component; } + attributesJSON.state.searchSessionId = searchSessionId; + attributesJSON.searchSessionId = searchSessionId; + return ( {isSaveOpen && attributesJSON && ( | null = null; + const lastRefreshed: Record = {}; + + const hasSameTimeRange = (props: ExploratoryEmbeddableProps) => { + const { attributes } = props; + if (!attributes || attributes?.length === 0) { + return false; + } + const series = attributes[0]; + const { time } = series; + const { from, to } = time; + return attributes.every((seriesT) => { + const { time: timeT } = seriesT; + return timeT.from === from && timeT.to === to; + }); + }; + return (props: ExploratoryEmbeddableProps) => { + if (!services.data.search.session.getSessionId()) { + services.data.search.session.start(); + } const { dataTypesIndexPatterns, attributes, customHeight } = props; if (!dataViewsService || !lens || !attributes || attributes?.length === 0) { @@ -56,6 +75,18 @@ export function getExploratoryViewEmbeddable( return lens.stateHelperApi(); }, []); + const [loadCount, setLoadCount] = useState(0); + + const onLensLoaded = useCallback( + (lensLoaded: boolean) => { + if (lensLoaded && props.id && hasSameTimeRange(props) && !lastRefreshed[props.id]) { + lastRefreshed[props.id] = series.time; + } + setLoadCount((prev) => prev + 1); + }, + [props, series.time] + ); + const { dataViews, loading } = useAppDataView({ dataViewCache, dataViewsService, @@ -63,6 +94,24 @@ export function getExploratoryViewEmbeddable( seriesDataType: series?.dataType, }); + const embedProps = useMemo(() => { + const newProps = { ...props }; + if (props.sparklineMode) { + newProps.axisTitlesVisibility = { x: false, yRight: false, yLeft: false }; + newProps.legendIsVisible = false; + newProps.hideTicks = true; + } + if (props.id && lastRefreshed[props.id] && loadCount < 2) { + newProps.attributes = props.attributes?.map((seriesT) => ({ + ...seriesT, + time: lastRefreshed[props.id!], + })); + } else if (props.id) { + lastRefreshed[props.id] = series.time; + } + return newProps; + }, [loadCount, props, series.time]); + if (Object.keys(dataViews).length === 0 || loading || !lensHelper || lensLoading) { return ( @@ -75,13 +124,6 @@ export function getExploratoryViewEmbeddable( return ; } - const embedProps = { ...props }; - if (props.sparklineMode) { - embedProps.axisTitlesVisibility = { x: false, yRight: false, yLeft: false }; - embedProps.legendIsVisible = false; - embedProps.hideTicks = true; - } - return ( @@ -92,6 +134,8 @@ export function getExploratoryViewEmbeddable( dataViewState={dataViews} lens={lens} lensFormulaHelper={lensHelper.formula} + searchSessionId={services.data.search.session.getSessionId()} + onLoad={onLensLoaded} /> diff --git a/x-pack/plugins/synthetics/common/constants/synthetics/client_defaults.ts b/x-pack/plugins/synthetics/common/constants/synthetics/client_defaults.ts index 3ea9546a1bfac..6ae9dbfef955f 100644 --- a/x-pack/plugins/synthetics/common/constants/synthetics/client_defaults.ts +++ b/x-pack/plugins/synthetics/common/constants/synthetics/client_defaults.ts @@ -14,4 +14,13 @@ export const CLIENT_DEFAULTS_SYNTHETICS = { * The end of the default date range is now. */ DATE_RANGE_END: 'now', + + /** + * The application auto refreshes every 30s by default. + */ + AUTOREFRESH_INTERVAL_SECONDS: 60, + /** + * The application's autorefresh feature is enabled. + */ + AUTOREFRESH_IS_PAUSED: false, }; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts index 3e1c7a8430afb..666366b9555e4 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alert_rules/default_status_alert.journey.ts @@ -50,7 +50,7 @@ journey(`DefaultStatusAlert`, async ({ page, params }) => { }); step('Go to monitors page', async () => { - await syntheticsApp.navigateToOverview(true); + await syntheticsApp.navigateToOverview(true, 15); }); step('should create default status alert', async () => { @@ -194,6 +194,7 @@ journey(`DefaultStatusAlert`, async ({ page, params }) => { await page.click(byTestId('alert-status-filter-active-button')); await syntheticsApp.waitForLoadingToFinish(); + await page.waitForTimeout(10 * 1000); await page.click('[aria-label="View in app"]'); await page.click(byTestId('syntheticsMonitorOverviewTab')); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts index b3dcd9aaa4421..bf4ecd526e911 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts @@ -17,7 +17,7 @@ export * from './private_locations.journey'; export * from './alerting_default.journey'; export * from './global_parameters.journey'; export * from './detail_flyout'; -// export * from './alert_rules/default_status_alert.journey'; +export * from './alert_rules/default_status_alert.journey'; export * from './test_now_mode.journey'; export * from './data_retention.journey'; export * from './monitor_details_page/monitor_summary.journey'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts index 1809fd66d1978..bed3e5f55d056 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_sorting.journey.ts @@ -32,7 +32,7 @@ journey('OverviewSorting', async ({ page, params }) => { }); step('Go to monitor-management', async () => { - await syntheticsApp.navigateToOverview(true); + await syntheticsApp.navigateToOverview(true, 15); }); step('sort alphabetical asc', async () => { diff --git a/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx b/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx index b3875a052880f..86e15182a740e 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx @@ -43,8 +43,14 @@ export function syntheticsAppPageProvider({ page, kibanaUrl }: { page: Page; kib await this.waitForMonitorManagementLoadingToFinish(); }, - async navigateToOverview(doLogin = false) { - await page.goto(overview, { waitUntil: 'networkidle' }); + async navigateToOverview(doLogin = false, refreshInterval?: number) { + if (refreshInterval) { + await page.goto(`${overview}?refreshInterval=${refreshInterval}`, { + waitUntil: 'networkidle', + }); + } else { + await page.goto(overview, { waitUntil: 'networkidle' }); + } if (doLogin) { await this.loginToKibana(); } diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/auto_refresh_button.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/auto_refresh_button.tsx new file mode 100644 index 0000000000000..6f40b000a6873 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/auto_refresh_button.tsx @@ -0,0 +1,82 @@ +/* + * Copyright 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, { useEffect, useRef } from 'react'; +import { EuiAutoRefreshButton, OnRefreshChangeProps } from '@elastic/eui'; +import { useDispatch, useSelector } from 'react-redux'; +import { CLIENT_DEFAULTS_SYNTHETICS } from '../../../../../../common/constants/synthetics/client_defaults'; +import { SyntheticsUrlParams } from '../../../utils/url_params'; +import { useUrlParams } from '../../../hooks'; +import { + selectRefreshInterval, + selectRefreshPaused, + setRefreshIntervalAction, + setRefreshPausedAction, +} from '../../../state'; +const { AUTOREFRESH_INTERVAL_SECONDS, AUTOREFRESH_IS_PAUSED } = CLIENT_DEFAULTS_SYNTHETICS; + +const replaceDefaults = ({ refreshPaused, refreshInterval }: Partial) => { + return { + refreshInterval: refreshInterval === AUTOREFRESH_INTERVAL_SECONDS ? undefined : refreshInterval, + refreshPaused: refreshPaused === AUTOREFRESH_IS_PAUSED ? undefined : refreshPaused, + }; +}; +export const AutoRefreshButton = () => { + const dispatch = useDispatch(); + + const refreshPaused = useSelector(selectRefreshPaused); + const refreshInterval = useSelector(selectRefreshInterval); + + const [getUrlsParams, updateUrlParams] = useUrlParams(); + + const { refreshInterval: urlRefreshInterval, refreshPaused: urlIsPaused } = getUrlsParams(); + + const isFirstRender = useRef(true); + + useEffect(() => { + if (isFirstRender.current) { + // sync url state with redux state on first render + dispatch(setRefreshIntervalAction(urlRefreshInterval)); + dispatch(setRefreshPausedAction(urlIsPaused)); + isFirstRender.current = false; + } else { + // sync redux state with url state on subsequent renders + if (urlRefreshInterval !== refreshInterval || urlIsPaused !== refreshPaused) { + updateUrlParams( + replaceDefaults({ + refreshInterval, + refreshPaused, + }), + true + ); + } + } + }, [updateUrlParams, refreshInterval, refreshPaused, urlRefreshInterval, urlIsPaused, dispatch]); + + const onRefreshChange = (newProps: OnRefreshChangeProps) => { + dispatch(setRefreshIntervalAction(newProps.refreshInterval / 1000)); + dispatch(setRefreshPausedAction(newProps.isPaused)); + + updateUrlParams( + replaceDefaults({ + refreshInterval: newProps.refreshInterval / 1000, + refreshPaused: newProps.isPaused, + }), + true + ); + }; + + return ( + + ); +}; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/last_refreshed.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/last_refreshed.tsx new file mode 100644 index 0000000000000..28a4ef1c5b101 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/last_refreshed.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect, useState } from 'react'; +import moment from 'moment'; +import { EuiText } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useSelector } from 'react-redux'; +import { SHORT_TIMESPAN_LOCALE, SHORT_TS_LOCALE } from '../../../../../../common/constants'; +import { useSyntheticsRefreshContext } from '../../../contexts'; +import { selectRefreshPaused } from '../../../state'; + +export function LastRefreshed() { + const { lastRefresh: lastRefreshed } = useSyntheticsRefreshContext(); + const [refresh, setRefresh] = useState(() => Date.now()); + + const refreshPaused = useSelector(selectRefreshPaused); + + useEffect(() => { + const interVal = setInterval(() => { + setRefresh(Date.now()); + }, 5000); + + return () => { + clearInterval(interVal); + }; + }, []); + + useEffect(() => { + setRefresh(Date.now()); + }, [lastRefreshed]); + + if (!lastRefreshed || refreshPaused) { + return null; + } + + const isWarning = moment().diff(moment(lastRefreshed), 'minutes') > 1; + const isDanger = moment().diff(moment(lastRefreshed), 'minutes') > 5; + + const prevLocal: string = moment.locale() ?? 'en'; + + const shortLocale = moment.locale(SHORT_TS_LOCALE) === SHORT_TS_LOCALE; + if (!shortLocale) { + moment.defineLocale(SHORT_TS_LOCALE, SHORT_TIMESPAN_LOCALE); + } + + const updatedDate = moment(lastRefreshed).from(refresh); + + // Need to reset locale so it doesn't effect other parts of the app + moment.locale(prevLocal); + + return ( + + + + ); +} diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/refresh_button.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/refresh_button.tsx new file mode 100644 index 0000000000000..83a952204ebe7 --- /dev/null +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/components/refresh_button.tsx @@ -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 React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiButton } from '@elastic/eui'; +import { useSyntheticsRefreshContext } from '../../../contexts'; + +export function RefreshButton() { + const { refreshApp } = useSyntheticsRefreshContext(); + return ( + refreshApp()}> + {REFRESH_LABEL} + + ); +} + +export const REFRESH_LABEL = i18n.translate('xpack.synthetics.overview.refresh', { + defaultMessage: 'Refresh', +}); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.test.tsx index 5a417b511c119..6fae43af920e5 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.test.tsx @@ -27,7 +27,7 @@ describe('SyntheticsDatePicker component', () => { it('uses shared date range state when there is no url date range state', async () => { const customHistory = createMemoryHistory({ - initialEntries: ['/?dateRangeStart=now-15m&dateRangeEnd=now'], + initialEntries: ['/?dateRangeStart=now-24h&dateRangeEnd=now'], }); jest.spyOn(customHistory, 'push'); @@ -37,8 +37,6 @@ describe('SyntheticsDatePicker component', () => { core: startPlugins, }); - expect(await findByText('~ 15 minutes ago')).toBeInTheDocument(); - expect(await findByText('~ 30 minutes ago')).toBeInTheDocument(); expect(customHistory.push).toHaveBeenCalledWith({ diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.tsx index 61398c562d136..82f2874f9ffa2 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/date_picker/synthetics_date_picker.tsx @@ -7,6 +7,7 @@ import React, { useContext, useEffect } from 'react'; import { EuiSuperDatePicker } from '@elastic/eui'; +import { CLIENT_DEFAULTS_SYNTHETICS } from '../../../../../../common/constants/synthetics/client_defaults'; import { useUrlParams } from '../../../hooks'; import { CLIENT_DEFAULTS } from '../../../../../../common/constants'; import { @@ -16,7 +17,7 @@ import { } from '../../../contexts'; const isSyntheticsDefaultDateRange = (dateRangeStart: string, dateRangeEnd: string) => { - const { DATE_RANGE_START, DATE_RANGE_END } = CLIENT_DEFAULTS; + const { DATE_RANGE_START, DATE_RANGE_END } = CLIENT_DEFAULTS_SYNTHETICS; return dateRangeStart === DATE_RANGE_START && dateRangeEnd === DATE_RANGE_END; }; @@ -31,12 +32,7 @@ export const SyntheticsDatePicker = ({ fullWidth }: { fullWidth?: boolean }) => // read time from state and update the url const sharedTimeState = data?.query.timefilter.timefilter.getTime(); - const { - autorefreshInterval, - autorefreshIsPaused, - dateRangeStart: start, - dateRangeEnd: end, - } = getUrlParams(); + const { dateRangeStart: start, dateRangeEnd: end } = getUrlParams(); useEffect(() => { const { from, to } = sharedTimeState ?? {}; @@ -70,8 +66,6 @@ export const SyntheticsDatePicker = ({ fullWidth }: { fullWidth?: boolean }) => start={start} end={end} commonlyUsedRanges={euiCommonlyUsedRanges} - isPaused={autorefreshIsPaused} - refreshInterval={autorefreshInterval} onTimeChange={({ start: startN, end: endN }) => { if (data?.query?.timefilter?.timefilter) { data?.query.timefilter.timefilter.setTime({ from: startN, to: endN }); @@ -81,13 +75,6 @@ export const SyntheticsDatePicker = ({ fullWidth }: { fullWidth?: boolean }) => refreshApp(); }} onRefresh={refreshApp} - onRefreshChange={({ isPaused, refreshInterval }) => { - updateUrl({ - autorefreshInterval: - refreshInterval === undefined ? autorefreshInterval : refreshInterval, - autorefreshIsPaused: isPaused, - }); - }} /> ); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.test.tsx index 343c548385515..b672e732c791e 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.test.tsx @@ -14,7 +14,7 @@ describe('ActionMenuContent', () => { const { getByRole, getByText } = render(); const settingsAnchor = getByRole('link', { name: 'Navigate to the Uptime settings page' }); - expect(settingsAnchor.getAttribute('href')).toBe('/settings?dateRangeStart=now-24h'); + expect(settingsAnchor.getAttribute('href')).toBe('/settings'); expect(getByText('Settings')); }); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx index a47d1cd986249..a81b4a76eba99 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/common/header/action_menu_content.tsx @@ -11,6 +11,8 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useHistory, useRouteMatch } from 'react-router-dom'; import { createExploratoryViewUrl } from '@kbn/observability-plugin/public'; +import { LastRefreshed } from '../components/last_refreshed'; +import { AutoRefreshButton } from '../components/auto_refresh_button'; import { useSyntheticsSettingsContext } from '../../../contexts'; import { useGetUrlParams } from '../../../hooks'; import { MONITOR_ROUTE, SETTINGS_ROUTE } from '../../../../../../common/constants'; @@ -66,6 +68,8 @@ export function ActionMenuContent(): React.ReactElement { return ( + + { +export const useMonitorRangeFrom = () => { const { monitor, loading } = useSelectedMonitor(); + const { from, to } = useRefreshedRange(30, 'days'); + return useMemo(() => { if (monitor?.created_at) { const diff = moment(monitor?.created_at).diff(moment().subtract(30, 'day'), 'days'); if (diff > 0) { - return { from: monitor?.created_at, loading }; + return { to, from: monitor?.created_at, loading }; } } - return { from: 'now-30d/d', loading }; - }, [monitor?.created_at, loading]); + return { to, from, loading }; + }, [monitor?.created_at, to, from, loading]); }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx index cea0378020c57..fe2d6028151db 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/hooks/use_selected_monitor.tsx @@ -16,6 +16,7 @@ import { selectMonitorListState, selectorMonitorDetailsState, selectorError, + selectRefreshInterval, } from '../../../state'; export const useSelectedMonitor = (monId?: string) => { @@ -26,13 +27,14 @@ export const useSelectedMonitor = (monId?: string) => { } const monitorsList = useSelector(selectEncryptedSyntheticsSavedMonitors); const { loading: monitorListLoading } = useSelector(selectMonitorListState); + const refreshInterval = useSelector(selectRefreshInterval); const monitorFromList = useMemo( () => monitorsList.find((monitor) => monitor[ConfigKey.CONFIG_ID] === monitorId) ?? null, [monitorId, monitorsList] ); const error = useSelector(selectorError); - const { lastRefresh, refreshInterval } = useSyntheticsRefreshContext(); + const { lastRefresh } = useSyntheticsRefreshContext(); const { syntheticsMonitor, syntheticsMonitorLoading, syntheticsMonitorDispatchedAt } = useSelector(selectorMonitorDetailsState); const dispatch = useDispatch(); @@ -60,7 +62,7 @@ export const useSelectedMonitor = (monId?: string) => { !syntheticsMonitorLoading && !monitorListLoading && syntheticsMonitorDispatchedAt > 0 && - Date.now() - syntheticsMonitorDispatchedAt > refreshInterval + Date.now() - syntheticsMonitorDispatchedAt > refreshInterval * 1000 ) { dispatch(getMonitorAction.get({ monitorId })); } diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/errors_tab_content.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/errors_tab_content.tsx index cc7ea08168ccc..d16e3faf353de 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/errors_tab_content.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/errors_tab_content.tsx @@ -15,7 +15,7 @@ import { MonitorErrorsCount } from '../monitor_summary/monitor_errors_count'; import { FailedTestsCount } from './failed_tests_count'; import { MonitorFailedTests } from './failed_tests'; import { ErrorsList } from './errors_list'; -import { useAbsoluteDate, useGetUrlParams } from '../../../hooks'; +import { useRefreshedRangeFromUrl } from '../../../hooks'; import { useMonitorQueryId } from '../hooks/use_monitor_query_id'; export const ErrorsTabContent = ({ @@ -25,9 +25,7 @@ export const ErrorsTabContent = ({ errorStates: PingState[]; loading: boolean; }) => { - const { dateRangeStart, dateRangeEnd } = useGetUrlParams(); - - const time = useAbsoluteDate({ from: dateRangeStart, to: dateRangeEnd }); + const time = useRefreshedRangeFromUrl(); const monitorId = useMonitorQueryId(); @@ -39,11 +37,16 @@ export const ErrorsTabContent = ({ {monitorId && ( - + )} - + diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/failed_tests_count.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/failed_tests_count.tsx index 8192142932dc8..99ef360b886b3 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/failed_tests_count.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_errors/failed_tests_count.tsx @@ -12,7 +12,7 @@ import { FAILED_TESTS_LABEL } from './failed_tests'; import { ClientPluginsStart } from '../../../../../plugin'; import { useMonitorQueryId } from '../hooks/use_monitor_query_id'; -export const FailedTestsCount = (time: { to: string; from: string }) => { +export const FailedTestsCount = ({ from, to, id }: { to: string; from: string; id: string }) => { const { observability } = useKibana().services; const { ExploratoryViewEmbeddable } = observability; @@ -27,10 +27,11 @@ export const FailedTestsCount = (time: { to: string; from: string }) => { return ( { const emptyState = !loading && errorStates.length === 0; + const redirect = useMonitorDetailsPage(); + if (redirect) { + return redirect; + } + return ( <> diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_history/monitor_history.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_history/monitor_history.tsx index b4f40aeef45c1..5dd0570cde7e3 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_history/monitor_history.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_history/monitor_history.tsx @@ -7,7 +7,8 @@ import { EuiFlexGrid, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useCallback } from 'react'; -import { useAbsoluteDate, useUrlParams } from '../../../hooks'; +import { useMonitorDetailsPage } from '../use_monitor_details_page'; +import { useRefreshedRangeFromUrl, useUrlParams } from '../../../hooks'; import { useDimensions } from '../../../hooks'; import { SyntheticsDatePicker } from '../../common/date_picker/synthetics_date_picker'; import { AvailabilityPanel } from '../monitor_summary/availability_panel'; @@ -27,9 +28,8 @@ import { useMonitorQueryId } from '../hooks/use_monitor_query_id'; const STATS_WIDTH_SINGLE_COLUMN_THRESHOLD = 360; // ✨ determined by trial and error export const MonitorHistory = () => { - const [useGetUrlParams, updateUrlParams] = useUrlParams(); - const { dateRangeStart, dateRangeEnd } = useGetUrlParams(); - const { from, to } = useAbsoluteDate({ from: dateRangeStart, to: dateRangeEnd }); + const [, updateUrlParams] = useUrlParams(); + const { from, to } = useRefreshedRangeFromUrl(); const { elementRef: statsRef, width: statsWidth } = useDimensions(); const statsColumns = statsWidth && statsWidth < STATS_WIDTH_SINGLE_COLUMN_THRESHOLD ? 1 : 2; @@ -42,6 +42,10 @@ export const MonitorHistory = () => { ); const monitorId = useMonitorQueryId(); + const redirect = useMonitorDetailsPage(); + if (redirect) { + return redirect; + } return ( @@ -70,10 +74,14 @@ export const MonitorHistory = () => { - + - + @@ -81,12 +89,22 @@ export const MonitorHistory = () => { {monitorId && ( - + )} {monitorId && ( - + )} @@ -94,10 +112,10 @@ export const MonitorHistory = () => { - + - + diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/availability_panel.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/availability_panel.tsx index cec258a0ea77f..abb5fe617d80e 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/availability_panel.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/availability_panel.tsx @@ -16,6 +16,7 @@ import { useSelectedLocation } from '../hooks/use_selected_location'; interface AvailabilityPanelprops { from: string; to: string; + id: string; } export const AvailabilityPanel = (props: AvailabilityPanelprops) => { @@ -34,6 +35,7 @@ export const AvailabilityPanel = (props: AvailabilityPanelprops) => { return ( { @@ -36,6 +37,7 @@ export const AvailabilitySparklines = (props: AvailabilitySparklinesProps) => { return ( { @@ -34,6 +35,7 @@ export const DurationPanel = (props: DurationPanelProps) => { return ( { @@ -36,6 +37,7 @@ export const DurationSparklines = (props: DurationSparklinesProps) => { return ( <> { return ( ({ diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_complete_count.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_complete_count.tsx index b9b2c191cdab5..8e8d1a0f6600a 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_complete_count.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_complete_count.tsx @@ -32,6 +32,7 @@ export const MonitorCompleteCount = (props: MonitorCompleteCountProps) => { return ( { return ( { +export const MonitorErrorSparklines = ({ from, to, monitorId, id }: Props) => { const { observability } = useKibana().services; const { ExploratoryViewEmbeddable } = observability; @@ -34,6 +35,7 @@ export const MonitorErrorSparklines = ({ from, to, monitorId }: Props) => { return ( { +export const MonitorErrorsCount = ({ monitorId, from, to, id }: MonitorErrorsCountProps) => { const { observability } = useKibana().services; const { ExploratoryViewEmbeddable } = observability; @@ -33,6 +34,7 @@ export const MonitorErrorsCount = ({ monitorId, from, to }: MonitorErrorsCountPr return ( { - const { from: fromRelative } = useEarliestStartDate(); - const toRelative = 'now'; - - const { from, to } = useAbsoluteDate({ from: fromRelative, to: toRelative }); + const { from, to } = useMonitorRangeFrom(); const monitorId = useMonitorQueryId(); const dateLabel = from === 'now-30d/d' ? LAST_30_DAYS_LABEL : TO_DATE_LABEL; + const redirect = useMonitorDetailsPage(); + if (redirect) { + return redirect; + } + return ( <> @@ -59,23 +61,35 @@ export const MonitorSummary = () => { - + - + - + - + - {monitorId && } + {monitorId && ( + + )} {monitorId && ( - + )} diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_total_runs_count.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_total_runs_count.tsx index deb02dc98dc87..ef34498c92ab9 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_total_runs_count.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_summary/monitor_total_runs_count.tsx @@ -32,6 +32,7 @@ export const MonitorTotalRunsCount = (props: MonitorTotalRunsCountProps) => { return ( ( - - - - ), + component: MonitorSummary, dataTestSubj: 'syntheticsMonitorDetailsPage', pageHeader: getMonitorSummaryHeader(history, syntheticsPath, 'overview'), }, @@ -56,11 +52,7 @@ export const getMonitorDetailsRoute = ( values: { baseTitle }, }), path: MONITOR_HISTORY_ROUTE, - component: () => ( - - - - ), + component: MonitorHistory, dataTestSubj: 'syntheticsMonitorHistoryPage', pageHeader: getMonitorSummaryHeader(history, syntheticsPath, 'history'), }, @@ -70,11 +62,7 @@ export const getMonitorDetailsRoute = ( values: { baseTitle }, }), path: MONITOR_ERRORS_ROUTE, - component: () => ( - - - - ), + component: MonitorErrors, dataTestSubj: 'syntheticsMonitorHistoryPage', pageHeader: getMonitorSummaryHeader(history, syntheticsPath, 'errors'), }, @@ -84,7 +72,7 @@ export const getMonitorDetailsRoute = ( values: { baseTitle }, }), path: MONITOR_NOT_FOUND_ROUTE, - component: () => , + component: MonitorNotFoundPage, dataTestSubj: 'syntheticsMonitorNotFoundPage', pageHeader: { breadcrumbs: [getMonitorsBreadcrumb(syntheticsPath)], @@ -127,6 +115,7 @@ const getMonitorSummaryHeader = ( pageTitle: , breadcrumbs: [getMonitorsBreadcrumb(syntheticsPath)], rightSideItems: [ + , , , , diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_details_page.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/use_monitor_details_page.tsx similarity index 90% rename from x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_details_page.tsx rename to x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/use_monitor_details_page.tsx index beb7c6e9585d4..831bd9fb446c5 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/monitor_details_page.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitor_details/use_monitor_details_page.tsx @@ -13,7 +13,7 @@ import { ConfigKey } from '../../../../../common/runtime_types'; import { useMonitorListBreadcrumbs } from '../monitors_page/hooks/use_breadcrumbs'; import { useSelectedMonitor } from './hooks/use_selected_monitor'; -export const MonitorDetailsPage: React.FC<{ children: React.ReactElement }> = ({ children }) => { +export const useMonitorDetailsPage = () => { const { monitor, error } = useSelectedMonitor(); const { monitorId } = useParams<{ monitorId: string }>(); @@ -27,5 +27,5 @@ export const MonitorDetailsPage: React.FC<{ children: React.ReactElement }> = ({ ) { return ; } - return children; + return null; }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/no_monitors_found.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/no_monitors_found.test.tsx index 36d98281cc1a0..a995b0617dd38 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/no_monitors_found.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/no_monitors_found.test.tsx @@ -18,7 +18,7 @@ describe('NoMonitorsFound', () => { useUrlParamsSpy = jest.spyOn(URL, 'useUrlParams'); updateUrlParamsMock = jest.fn(); - useUrlParamsSpy.mockImplementation(() => [jest.fn(), updateUrlParamsMock]); + useUrlParamsSpy.mockImplementation(() => [jest.fn().mockReturnValue({}), updateUrlParamsMock]); }); afterEach(() => { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/search_field.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/search_field.test.tsx index 3bd1e226cdd7d..0e0db9ffc9c84 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/search_field.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/common/search_field.test.tsx @@ -21,7 +21,7 @@ describe('SearchField', () => { useGetUrlParamsSpy = jest.spyOn(URL, 'useGetUrlParams'); updateUrlParamsMock = jest.fn(); - useUrlParamsSpy.mockImplementation(() => [jest.fn(), updateUrlParamsMock]); + useUrlParamsSpy.mockImplementation(() => [jest.fn().mockReturnValue({}), updateUrlParamsMock]); }); afterEach(() => { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs.tsx index 84865837bac6e..9fbb1efceeb2d 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs.tsx @@ -11,7 +11,7 @@ import { useKibana } from '@kbn/kibana-react-plugin/public'; import { useTheme } from '@kbn/observability-plugin/public'; import { ReportTypes } from '@kbn/observability-plugin/public'; -import { useAbsoluteDate } from '../../../../hooks'; +import { useRefreshedRange } from '../../../../hooks'; import { ClientPluginsStart } from '../../../../../../plugin'; import * as labels from '../labels'; @@ -21,7 +21,7 @@ export const MonitorTestRunsCount = ({ monitorIds }: { monitorIds: string[] }) = const { ExploratoryViewEmbeddable } = observability; - const { from: absFrom, to: absTo } = useAbsoluteDate({ from: 'now-30d', to: 'now' }); + const { from, to } = useRefreshedRange(30, 'days'); return ( 0 ? monitorIds : ['false-monitor-id'], // Show no data when monitorIds is empty }, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs_sparkline.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs_sparkline.tsx index 8b8d03cd6d879..8791e8e1ce6a8 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs_sparkline.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_stats/monitor_test_runs_sparkline.tsx @@ -10,7 +10,7 @@ import React, { useMemo } from 'react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { useTheme } from '@kbn/observability-plugin/public'; -import { useAbsoluteDate } from '../../../../hooks'; +import { useRefreshedRange } from '../../../../hooks'; import { ClientPluginsStart } from '../../../../../../plugin'; import * as labels from '../labels'; @@ -21,7 +21,7 @@ export const MonitorTestRunsSparkline = ({ monitorIds }: { monitorIds: string[] const theme = useTheme(); - const { from, to } = useAbsoluteDate({ from: 'now-30d', to: 'now' }); + const { from, to } = useRefreshedRange(30, 'days'); const attributes = useMemo(() => { return [ @@ -44,6 +44,7 @@ export const MonitorTestRunsSparkline = ({ monitorIds }: { monitorIds: string[] return ( { - const { from, to } = useAbsoluteDate({ from: 'now-12h', to: 'now' }); + const { from, to } = useRefreshedRange(12, 'hours'); const { observability } = useKibana().services; const { ExploratoryViewEmbeddable } = observability; @@ -47,6 +47,7 @@ export const OverviewAlerts = () => { { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors_count.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors_count.tsx index e2036ec82738c..1d0ce0a90fc3b 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors_count.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_errors/overview_errors_count.tsx @@ -32,6 +32,7 @@ export const OverviewErrorsCount = ({ return ( { return ( { useGetUrlParamsSpy = jest.spyOn(URL, 'useGetUrlParams'); updateUrlParamsMock = jest.fn(); - useUrlParamsSpy.mockImplementation(() => [jest.fn(), updateUrlParamsMock]); + useUrlParamsSpy.mockImplementation(() => [jest.fn().mockReturnValue({}), updateUrlParamsMock]); }); afterEach(() => { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx index 84b85cdb2579f..57f40f5676593 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx @@ -7,9 +7,10 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; -import { useHistory } from 'react-router-dom'; +import { useHistory, useLocation } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n-react'; +import { RefreshButton } from '../common/components/refresh_button'; import { OverviewPage } from './overview/overview_page'; import { MonitorsPageHeader } from './management/page_header/monitors_page_header'; import { CreateMonitorButton } from './create_monitor_button'; @@ -19,9 +20,14 @@ import { MONITORS_ROUTE, OVERVIEW_ROUTE } from '../../../../../common/constants' export const getMonitorsRoute = ( history: ReturnType, + location: ReturnType, syntheticsPath: string, baseTitle: string ): RouteProps[] => { + const sharedProps = { + pageTitle: , + rightSideItems: [, ], + }; return [ { title: i18n.translate('xpack.synthetics.overviewRoute.title', { @@ -32,9 +38,8 @@ export const getMonitorsRoute = ( component: OverviewPage, dataTestSubj: 'syntheticsOverviewPage', pageHeader: { - pageTitle: , - rightSideItems: [], - tabs: getMonitorsTabs(syntheticsPath, 'overview'), + ...sharedProps, + tabs: getMonitorsTabs(syntheticsPath, 'overview', location), }, }, { @@ -46,15 +51,18 @@ export const getMonitorsRoute = ( component: MonitorsPageWithServiceAllowed, dataTestSubj: 'syntheticsMonitorManagementPage', pageHeader: { - pageTitle: , - rightSideItems: [], - tabs: getMonitorsTabs(syntheticsPath, 'management'), + ...sharedProps, + tabs: getMonitorsTabs(syntheticsPath, 'management', location), }, }, ]; }; -const getMonitorsTabs = (syntheticsPath: string, selected: 'overview' | 'management') => { +const getMonitorsTabs = ( + syntheticsPath: string, + selected: 'overview' | 'management', + location: ReturnType +) => { return [ { label: ( @@ -63,7 +71,7 @@ const getMonitorsTabs = (syntheticsPath: string, selected: 'overview' | 'managem defaultMessage="Overview" /> ), - href: `${syntheticsPath}${OVERVIEW_ROUTE}`, + href: `${syntheticsPath}${OVERVIEW_ROUTE}${location.search}`, isSelected: selected === 'overview', 'data-test-subj': 'syntheticsMonitorOverviewTab', }, @@ -74,7 +82,7 @@ const getMonitorsTabs = (syntheticsPath: string, selected: 'overview' | 'managem defaultMessage="Management" /> ), - href: `${syntheticsPath}${MONITORS_ROUTE}`, + href: `${syntheticsPath}${MONITORS_ROUTE}${location.search}`, isSelected: selected === 'management', 'data-test-subj': 'syntheticsMonitorManagementTab', }, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts index 6f53af4cb75be..1f7d2ac810bbd 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings.ts @@ -115,7 +115,7 @@ export const useNetworkTimings = (checkGroupIdArg?: string, stepIndexArg?: numbe }, }, }, - [checkGroupId, stepIndex], + [], { name: `stepNetworkTimingsMetrics/${checkGroupId}/${stepIndex}` } ); diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts index ec6f96e15259c..65fc47865b103 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_network_timings_prev.ts @@ -158,9 +158,9 @@ export const useNetworkTimingsPrevious24Hours = ( }, }, }, - [configId, stepIndex, checkGroupId], + [], { - name: `stepNetworkPreviousTimings/${configId}/${stepIndex}`, + name: `stepNetworkPreviousTimings/${configId}/${checkGroupId}/${stepIndex}`, isRequestReady: Boolean(timestamp), } ); @@ -196,7 +196,7 @@ export const useNetworkTimingsPrevious24Hours = ( }; return { - loading, + loading: loading && !data, timings, timingsWithLabels: getTimingWithLabels(timings), }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_metrics.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_metrics.ts index 7c7d1ecb89828..fba2917c6ece2 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_metrics.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_metrics.ts @@ -5,9 +5,9 @@ * 2.0. */ -import { useEsSearch } from '@kbn/observability-plugin/public'; import { useParams } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; +import { useReduxEsSearch } from '../../../hooks/use_redux_es_search'; import { formatBytes } from './use_object_metrics'; import { formatMillisecond } from '../step_metrics/step_metrics'; import { @@ -36,7 +36,7 @@ export const useStepMetrics = (step?: JourneyStep) => { const checkGroupId = step?.monitor.check_group ?? urlParams.checkGroupId; const stepIndex = step?.synthetics.step?.index ?? urlParams.stepIndex; - const { data } = useEsSearch( + const { data } = useReduxEsSearch( { index: SYNTHETICS_INDEX_PATTERN, body: { @@ -91,11 +91,11 @@ export const useStepMetrics = (step?: JourneyStep) => { }, }, }, - [stepIndex, checkGroupId], - { name: 'stepMetrics' } + [], + { name: `stepMetrics/${checkGroupId}/${stepIndex}` } ); - const { data: transferData } = useEsSearch( + const { data: transferData } = useReduxEsSearch( { index: SYNTHETICS_INDEX_PATTERN, body: { @@ -104,9 +104,6 @@ export const useStepMetrics = (step?: JourneyStep) => { 'synthetics.payload.transfer_size': { type: 'double', }, - 'synthetics.payload.resource_size': { - type: 'double', - }, }, query: { bool: { @@ -135,17 +132,12 @@ export const useStepMetrics = (step?: JourneyStep) => { field: 'synthetics.payload.transfer_size', }, }, - resourceSize: { - sum: { - field: 'synthetics.payload.resource_size', - }, - }, }, }, }, - [stepIndex, checkGroupId], + [], { - name: 'stepMetricsFromNetworkInfos', + name: `stepMetricsFromNetworkInfos/${checkGroupId}/${stepIndex}`, } ); @@ -153,10 +145,6 @@ export const useStepMetrics = (step?: JourneyStep) => { const transferDataVal = transferData?.aggregations?.transferSize?.value ?? 0; return { - ...(data?.aggregations ?? {}), - transferData: transferData?.aggregations?.transferSize?.value ?? 0, - resourceSize: transferData?.aggregations?.resourceSize?.value ?? 0, - metrics: [ { label: STEP_DURATION_LABEL, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_prev_metrics.ts b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_prev_metrics.ts index d29c142c03083..9940620f7cc17 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_prev_metrics.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/step_details_page/hooks/use_step_prev_metrics.ts @@ -6,7 +6,6 @@ */ import { useParams } from 'react-router-dom'; -import { useEsSearch } from '@kbn/observability-plugin/public'; import { formatBytes } from './use_object_metrics'; import { formatMillisecond } from '../step_metrics/step_metrics'; import { @@ -20,6 +19,7 @@ import { import { JourneyStep } from '../../../../../../common/runtime_types'; import { median } from './use_network_timings_prev'; import { SYNTHETICS_INDEX_PATTERN } from '../../../../../../common/constants'; +import { useReduxEsSearch } from '../../../hooks/use_redux_es_search'; export const MONITOR_DURATION_US = 'monitor.duration.us'; export const SYNTHETICS_CLS = 'browser.experience.cls'; @@ -41,7 +41,7 @@ export const useStepPrevMetrics = (step?: JourneyStep) => { const checkGroupId = step?.monitor.check_group ?? urlParams.checkGroupId; const stepIndex = step?.synthetics.step?.index ?? urlParams.stepIndex; - const { data, loading } = useEsSearch( + const { data, loading } = useReduxEsSearch( { index: SYNTHETICS_INDEX_PATTERN, body: { @@ -112,10 +112,10 @@ export const useStepPrevMetrics = (step?: JourneyStep) => { }, }, }, - [monitorId, checkGroupId, stepIndex], - { name: 'previousStepMetrics' } + [], + { name: `previousStepMetrics/${monitorId}/${checkGroupId}/${stepIndex}` } ); - const { data: transferData } = useEsSearch( + const { data: transferData } = useReduxEsSearch( { index: SYNTHETICS_INDEX_PATTERN, body: { @@ -174,9 +174,9 @@ export const useStepPrevMetrics = (step?: JourneyStep) => { }, }, }, - [monitorId, checkGroupId, stepIndex], + [], { - name: 'previousStepMetricsFromNetworkInfos', + name: `previousStepMetricsFromNetworkInfos/${monitorId}/${checkGroupId}/${stepIndex}`, } ); @@ -210,7 +210,7 @@ export const useStepPrevMetrics = (step?: JourneyStep) => { const medianStepDuration = median(stepDuration); return { - loading, + loading: loading && !metrics, metrics: [ { label: STEP_DURATION_LABEL, diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/contexts/synthetics_refresh_context.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/contexts/synthetics_refresh_context.tsx index b6ee5e1616c5c..b1ac1b391696f 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/contexts/synthetics_refresh_context.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/contexts/synthetics_refresh_context.tsx @@ -6,18 +6,16 @@ */ import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { useSelector } from 'react-redux'; +import { selectRefreshInterval, selectRefreshPaused } from '../state'; interface SyntheticsRefreshContext { lastRefresh: number; - refreshInterval: number; refreshApp: () => void; } -export const APP_DEFAULT_REFRESH_INTERVAL = 1000 * 30; - const defaultContext: SyntheticsRefreshContext = { lastRefresh: 0, - refreshInterval: APP_DEFAULT_REFRESH_INTERVAL, refreshApp: () => { throw new Error('App refresh was not initialized, set it when you invoke the context'); }, @@ -28,21 +26,32 @@ export const SyntheticsRefreshContext = createContext(defaultContext); export const SyntheticsRefreshContextProvider: React.FC = ({ children }) => { const [lastRefresh, setLastRefresh] = useState(Date.now()); + const refreshPaused = useSelector(selectRefreshPaused); + const refreshInterval = useSelector(selectRefreshInterval); + const refreshApp = useCallback(() => { const refreshTime = Date.now(); setLastRefresh(refreshTime); }, [setLastRefresh]); const value = useMemo(() => { - return { lastRefresh, refreshApp, refreshInterval: APP_DEFAULT_REFRESH_INTERVAL }; + return { + lastRefresh, + refreshApp, + }; }, [lastRefresh, refreshApp]); useEffect(() => { + if (refreshPaused) { + return; + } const interval = setInterval(() => { - refreshApp(); - }, value.refreshInterval); + if (document.visibilityState !== 'hidden') { + refreshApp(); + } + }, refreshInterval * 1000); return () => clearInterval(interval); - }, [refreshApp, value.refreshInterval]); + }, [refreshPaused, refreshApp, refreshInterval]); return ; }; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_absolute_date.ts b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_absolute_date.ts index 5eb74058d6f67..cba04921a9a06 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_absolute_date.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_absolute_date.ts @@ -7,7 +7,9 @@ import datemath from '@elastic/datemath'; import { useMemo } from 'react'; +import moment, { DurationInputArg1, DurationInputArg2 } from 'moment'; import { useSyntheticsRefreshContext } from '../contexts'; +import { useGetUrlParams } from './use_url_params'; export function useAbsoluteDate({ from, to }: { from: string; to: string }) { const { lastRefresh } = useSyntheticsRefreshContext(); @@ -21,3 +23,30 @@ export function useAbsoluteDate({ from, to }: { from: string; to: string }) { [from, to, lastRefresh] ); } + +export function useRefreshedRange(inp: DurationInputArg1, unit: DurationInputArg2) { + const { lastRefresh } = useSyntheticsRefreshContext(); + + return useMemo( + () => ({ + from: moment(lastRefresh).subtract(inp, unit).toISOString(), + to: new Date(lastRefresh).toISOString(), + }), + [lastRefresh, inp, unit] + ); +} + +const isDefaultRange = (from: string, to: string) => { + return from === 'now-24h' && to === 'now'; +}; + +export function useRefreshedRangeFromUrl() { + const { dateRangeStart, dateRangeEnd } = useGetUrlParams(); + const isDefault = isDefaultRange(dateRangeStart, dateRangeEnd); + + const absRange = useAbsoluteDate({ from: dateRangeStart, to: dateRangeEnd }); + + const defaultRange = useRefreshedRange(24, 'hours'); + + return isDefault ? defaultRange : absRange; +} diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_url_params.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_url_params.test.tsx index 37a0c3ad7e56f..c067f3b17108f 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_url_params.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_url_params.test.tsx @@ -10,7 +10,9 @@ import userEvent from '@testing-library/user-event'; import { render } from '../utils/testing'; import React, { useState, Fragment } from 'react'; import { useUrlParams, SyntheticsUrlParamsHook } from './use_url_params'; -import { APP_DEFAULT_REFRESH_INTERVAL, SyntheticsRefreshContext } from '../contexts'; +import { SyntheticsRefreshContext } from '../contexts'; +import { CLIENT_DEFAULTS_SYNTHETICS } from '../../../../common/constants/synthetics/client_defaults'; +const { AUTOREFRESH_INTERVAL_SECONDS } = CLIENT_DEFAULTS_SYNTHETICS; interface MockUrlParamsComponentProps { hook: SyntheticsUrlParamsHook; @@ -30,7 +32,7 @@ const UseUrlParamsTestComponent = ({
- +
), [] ); diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/index.test.tsx b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/index.test.tsx new file mode 100644 index 0000000000000..72affc8aec491 --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/index.test.tsx @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DARK_THEME } from '@elastic/charts'; +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { TestProviders } from './mock/test_providers'; +import { DataQualityPanel } from '.'; + +describe('DataQualityPanel', () => { + describe('when no ILM phases are provided', () => { + const ilmPhases: string[] = []; + + beforeEach(() => { + render( + + + + ); + }); + + test('it renders the ILM phases empty prompt', () => { + expect(screen.getByTestId('ilmPhasesEmptyPrompt')).toBeInTheDocument(); + }); + + test('it does NOT render the body', () => { + expect(screen.queryByTestId('body')).not.toBeInTheDocument(); + }); + }); + + describe('when ILM phases are provided', () => { + const ilmPhases: string[] = ['hot', 'warm', 'unmanaged']; + + beforeEach(() => { + render( + + + + ); + }); + + test('it does NOT render the ILM phases empty prompt', () => { + expect(screen.queryByTestId('ilmPhasesEmptyPrompt')).not.toBeInTheDocument(); + }); + + test('it renders the body', () => { + expect(screen.getByTestId('body')).toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/enriched_field_metadata/index.ts b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/enriched_field_metadata/index.ts new file mode 100644 index 0000000000000..654d608d7d351 --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/enriched_field_metadata/index.ts @@ -0,0 +1,272 @@ +/* + * Copyright 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 { EnrichedFieldMetadata } from '../../types'; + +export const timestamp: EnrichedFieldMetadata = { + dashed_name: 'timestamp', + description: + 'Date/time when the event originated.\nThis is the date/time extracted from the event, typically representing when the event was generated by the source.\nIf the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline.\nRequired field for all events.', + example: '2016-05-23T08:05:34.853Z', + flat_name: '@timestamp', + level: 'core', + name: '@timestamp', + normalize: [], + required: true, + short: 'Date/time when the event originated.', + type: 'date', + indexFieldName: '@timestamp', + indexFieldType: 'date', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, + isInSameFamily: false, // `date` is not a member of any families +}; + +export const eventCategory: EnrichedFieldMetadata = { + allowed_values: [ + { + description: + 'Events in this category are related to the challenge and response process in which credentials are supplied and verified to allow the creation of a session. Common sources for these logs are Windows event logs and ssh logs. Visualize and analyze events in this category to look for failed logins, and other authentication-related activity.', + expected_event_types: ['start', 'end', 'info'], + name: 'authentication', + }, + { + description: + 'Events in the configuration category have to deal with creating, modifying, or deleting the settings or parameters of an application, process, or system.\nExample sources include security policy change logs, configuration auditing logging, and system integrity monitoring.', + expected_event_types: ['access', 'change', 'creation', 'deletion', 'info'], + name: 'configuration', + }, + { + description: + 'The database category denotes events and metrics relating to a data storage and retrieval system. Note that use of this category is not limited to relational database systems. Examples include event logs from MS SQL, MySQL, Elasticsearch, MongoDB, etc. Use this category to visualize and analyze database activity such as accesses and changes.', + expected_event_types: ['access', 'change', 'info', 'error'], + name: 'database', + }, + { + description: + 'Events in the driver category have to do with operating system device drivers and similar software entities such as Windows drivers, kernel extensions, kernel modules, etc.\nUse events and metrics in this category to visualize and analyze driver-related activity and status on hosts.', + expected_event_types: ['change', 'end', 'info', 'start'], + name: 'driver', + }, + { + description: + 'This category is used for events relating to email messages, email attachments, and email network or protocol activity.\nEmails events can be produced by email security gateways, mail transfer agents, email cloud service providers, or mail server monitoring applications.', + expected_event_types: ['info'], + name: 'email', + }, + { + description: + 'Relating to a set of information that has been created on, or has existed on a filesystem. Use this category of events to visualize and analyze the creation, access, and deletions of files. Events in this category can come from both host-based and network-based sources. An example source of a network-based detection of a file transfer would be the Zeek file.log.', + expected_event_types: ['change', 'creation', 'deletion', 'info'], + name: 'file', + }, + { + description: + 'Use this category to visualize and analyze information such as host inventory or host lifecycle events.\nMost of the events in this category can usually be observed from the outside, such as from a hypervisor or a control plane\'s point of view. Some can also be seen from within, such as "start" or "end".\nNote that this category is for information about hosts themselves; it is not meant to capture activity "happening on a host".', + expected_event_types: ['access', 'change', 'end', 'info', 'start'], + name: 'host', + }, + { + description: + 'Identity and access management (IAM) events relating to users, groups, and administration. Use this category to visualize and analyze IAM-related logs and data from active directory, LDAP, Okta, Duo, and other IAM systems.', + expected_event_types: ['admin', 'change', 'creation', 'deletion', 'group', 'info', 'user'], + name: 'iam', + }, + { + description: + 'Relating to intrusion detections from IDS/IPS systems and functions, both network and host-based. Use this category to visualize and analyze intrusion detection alerts from systems such as Snort, Suricata, and Palo Alto threat detections.', + expected_event_types: ['allowed', 'denied', 'info'], + name: 'intrusion_detection', + }, + { + description: + 'Malware detection events and alerts. Use this category to visualize and analyze malware detections from EDR/EPP systems such as Elastic Endpoint Security, Symantec Endpoint Protection, Crowdstrike, and network IDS/IPS systems such as Suricata, or other sources of malware-related events such as Palo Alto Networks threat logs and Wildfire logs.', + expected_event_types: ['info'], + name: 'malware', + }, + { + description: + 'Relating to all network activity, including network connection lifecycle, network traffic, and essentially any event that includes an IP address. Many events containing decoded network protocol transactions fit into this category. Use events in this category to visualize or analyze counts of network ports, protocols, addresses, geolocation information, etc.', + expected_event_types: [ + 'access', + 'allowed', + 'connection', + 'denied', + 'end', + 'info', + 'protocol', + 'start', + ], + name: 'network', + }, + { + description: + 'Relating to software packages installed on hosts. Use this category to visualize and analyze inventory of software installed on various hosts, or to determine host vulnerability in the absence of vulnerability scan data.', + expected_event_types: ['access', 'change', 'deletion', 'info', 'installation', 'start'], + name: 'package', + }, + { + description: + 'Use this category of events to visualize and analyze process-specific information such as lifecycle events or process ancestry.', + expected_event_types: ['access', 'change', 'end', 'info', 'start'], + name: 'process', + }, + { + description: + 'Having to do with settings and assets stored in the Windows registry. Use this category to visualize and analyze activity such as registry access and modifications.', + expected_event_types: ['access', 'change', 'creation', 'deletion'], + name: 'registry', + }, + { + description: + 'The session category is applied to events and metrics regarding logical persistent connections to hosts and services. Use this category to visualize and analyze interactive or automated persistent connections between assets. Data for this category may come from Windows Event logs, SSH logs, or stateless sessions such as HTTP cookie-based sessions, etc.', + expected_event_types: ['start', 'end', 'info'], + name: 'session', + }, + { + description: + "Use this category to visualize and analyze events describing threat actors' targets, motives, or behaviors.", + expected_event_types: ['indicator'], + name: 'threat', + }, + { + description: + 'Relating to vulnerability scan results. Use this category to analyze vulnerabilities detected by Tenable, Qualys, internal scanners, and other vulnerability management sources.', + expected_event_types: ['info'], + name: 'vulnerability', + }, + { + description: + 'Relating to web server access. Use this category to create a dashboard of web server/proxy activity from apache, IIS, nginx web servers, etc. Note: events from network observers such as Zeek http log may also be included in this category.', + expected_event_types: ['access', 'error', 'info'], + name: 'web', + }, + ], + dashed_name: 'event-category', + description: + 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy.\n`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory.\nThis field is an array. This will allow proper categorization of some events that fall in multiple categories.', + example: 'authentication', + flat_name: 'event.category', + ignore_above: 1024, + level: 'core', + name: 'category', + normalize: ['array'], + short: 'Event category. The second categorization field in the hierarchy.', + type: 'keyword', + indexFieldName: 'event.category', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, + isInSameFamily: true, // `keyword` and `keyword` are in the same family +}; + +export const eventCategoryWithUnallowedValues: EnrichedFieldMetadata = { + ...eventCategory, + indexInvalidValues: [ + { + count: 2, + fieldName: 'an_invalid_category', + }, + { + count: 1, + fieldName: 'theory', + }, + ], + isEcsCompliant: false, // because this index has unallowed values +}; + +export const hostNameWithTextMapping: EnrichedFieldMetadata = { + dashed_name: 'host-name', + description: + 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.', + flat_name: 'host.name', + ignore_above: 1024, + level: 'core', + name: 'name', + normalize: [], + short: 'Name of the host.', + type: 'keyword', + indexFieldName: 'host.name', + indexFieldType: 'text', // this index has a mapping of `text` instead of `keyword` + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: false, + isInSameFamily: false, // `keyword` and `text` are not in the family +}; + +export const hostNameKeyword: EnrichedFieldMetadata = { + indexFieldName: 'host.name.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, + isInSameFamily: false, // custom fields are never in the same family +}; + +export const someField: EnrichedFieldMetadata = { + indexFieldName: 'some.field', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, + isInSameFamily: false, // custom fields are never in the same family +}; + +export const someFieldKeyword: EnrichedFieldMetadata = { + indexFieldName: 'some.field.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, + isInSameFamily: false, // custom fields are never in the same family +}; + +export const sourceIpWithTextMapping: EnrichedFieldMetadata = { + dashed_name: 'source-ip', + description: 'IP address of the source (IPv4 or IPv6).', + flat_name: 'source.ip', + level: 'core', + name: 'ip', + normalize: [], + short: 'IP address of the source.', + type: 'ip', + indexFieldName: 'source.ip', + indexFieldType: 'text', // this index has a mapping of `text` instead of `keyword` + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: false, + isInSameFamily: false, // `ip` is not a member of any families +}; + +export const sourceIpKeyword: EnrichedFieldMetadata = { + indexFieldName: 'source.ip.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, + isInSameFamily: false, // custom fields are never in the same family +}; + +export const sourcePort: EnrichedFieldMetadata = { + dashed_name: 'source-port', + description: 'Port of the source.', + flat_name: 'source.port', + format: 'string', + level: 'core', + name: 'port', + normalize: [], + short: 'Port of the source.', + type: 'long', + indexFieldName: 'source.port', + indexFieldType: 'long', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, + isInSameFamily: false, // `long` is not a member of any families +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/ilm_explain/index.ts b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/ilm_explain/index.ts new file mode 100644 index 0000000000000..bf7bc667c9aaf --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/ilm_explain/index.ts @@ -0,0 +1,51 @@ +/* + * Copyright 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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; + +export const mockIlmExplain: Record = { + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + index: '.ds-packetbeat-8.6.1-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + index_creation_date_millis: 1675536751379, + time_since_index_creation: '3.98d', + lifecycle_date_millis: 1675536751379, + age: '3.98d', + phase: 'hot', + phase_time_millis: 1675536751809, + action: 'rollover', + action_time_millis: 1675536751809, + step: 'check-rollover-ready', + step_time_millis: 1675536751809, + phase_execution: { + policy: 'packetbeat', + version: 1, + modified_date_in_millis: 1675536751205, + }, + }, + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + index: '.ds-packetbeat-8.5.3-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + index_creation_date_millis: 1675536774084, + time_since_index_creation: '3.98d', + lifecycle_date_millis: 1675536774084, + age: '3.98d', + phase: 'hot', + phase_time_millis: 1675536774416, + action: 'rollover', + action_time_millis: 1675536774416, + step: 'check-rollover-ready', + step_time_millis: 1675536774416, + phase_execution: { + policy: 'packetbeat', + version: 1, + modified_date_in_millis: 1675536751205, + }, + }, +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/partitioned_field_metadata/mock_partitioned_field_metadata.tsx b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/partitioned_field_metadata/mock_partitioned_field_metadata.tsx new file mode 100644 index 0000000000000..dd3478bed9f96 --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/partitioned_field_metadata/mock_partitioned_field_metadata.tsx @@ -0,0 +1,521 @@ +/* + * Copyright 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 { PartitionedFieldMetadata } from '../../types'; + +export const mockPartitionedFieldMetadata: PartitionedFieldMetadata = { + all: [ + { + dashed_name: 'timestamp', + description: + 'Date/time when the event originated.\nThis is the date/time extracted from the event, typically representing when the event was generated by the source.\nIf the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline.\nRequired field for all events.', + example: '2016-05-23T08:05:34.853Z', + flat_name: '@timestamp', + level: 'core', + name: '@timestamp', + normalize: [], + required: true, + short: 'Date/time when the event originated.', + type: 'date', + indexFieldName: '@timestamp', + indexFieldType: 'date', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, + isInSameFamily: false, // `date` is not a member of any families + }, + { + allowed_values: [ + { + description: + 'Events in this category are related to the challenge and response process in which credentials are supplied and verified to allow the creation of a session. Common sources for these logs are Windows event logs and ssh logs. Visualize and analyze events in this category to look for failed logins, and other authentication-related activity.', + expected_event_types: ['start', 'end', 'info'], + name: 'authentication', + }, + { + description: + 'Events in the configuration category have to deal with creating, modifying, or deleting the settings or parameters of an application, process, or system.\nExample sources include security policy change logs, configuration auditing logging, and system integrity monitoring.', + expected_event_types: ['access', 'change', 'creation', 'deletion', 'info'], + name: 'configuration', + }, + { + description: + 'The database category denotes events and metrics relating to a data storage and retrieval system. Note that use of this category is not limited to relational database systems. Examples include event logs from MS SQL, MySQL, Elasticsearch, MongoDB, etc. Use this category to visualize and analyze database activity such as accesses and changes.', + expected_event_types: ['access', 'change', 'info', 'error'], + name: 'database', + }, + { + description: + 'Events in the driver category have to do with operating system device drivers and similar software entities such as Windows drivers, kernel extensions, kernel modules, etc.\nUse events and metrics in this category to visualize and analyze driver-related activity and status on hosts.', + expected_event_types: ['change', 'end', 'info', 'start'], + name: 'driver', + }, + { + description: + 'This category is used for events relating to email messages, email attachments, and email network or protocol activity.\nEmails events can be produced by email security gateways, mail transfer agents, email cloud service providers, or mail server monitoring applications.', + expected_event_types: ['info'], + name: 'email', + }, + { + description: + 'Relating to a set of information that has been created on, or has existed on a filesystem. Use this category of events to visualize and analyze the creation, access, and deletions of files. Events in this category can come from both host-based and network-based sources. An example source of a network-based detection of a file transfer would be the Zeek file.log.', + expected_event_types: ['change', 'creation', 'deletion', 'info'], + name: 'file', + }, + { + description: + 'Use this category to visualize and analyze information such as host inventory or host lifecycle events.\nMost of the events in this category can usually be observed from the outside, such as from a hypervisor or a control plane\'s point of view. Some can also be seen from within, such as "start" or "end".\nNote that this category is for information about hosts themselves; it is not meant to capture activity "happening on a host".', + expected_event_types: ['access', 'change', 'end', 'info', 'start'], + name: 'host', + }, + { + description: + 'Identity and access management (IAM) events relating to users, groups, and administration. Use this category to visualize and analyze IAM-related logs and data from active directory, LDAP, Okta, Duo, and other IAM systems.', + expected_event_types: [ + 'admin', + 'change', + 'creation', + 'deletion', + 'group', + 'info', + 'user', + ], + name: 'iam', + }, + { + description: + 'Relating to intrusion detections from IDS/IPS systems and functions, both network and host-based. Use this category to visualize and analyze intrusion detection alerts from systems such as Snort, Suricata, and Palo Alto threat detections.', + expected_event_types: ['allowed', 'denied', 'info'], + name: 'intrusion_detection', + }, + { + description: + 'Malware detection events and alerts. Use this category to visualize and analyze malware detections from EDR/EPP systems such as Elastic Endpoint Security, Symantec Endpoint Protection, Crowdstrike, and network IDS/IPS systems such as Suricata, or other sources of malware-related events such as Palo Alto Networks threat logs and Wildfire logs.', + expected_event_types: ['info'], + name: 'malware', + }, + { + description: + 'Relating to all network activity, including network connection lifecycle, network traffic, and essentially any event that includes an IP address. Many events containing decoded network protocol transactions fit into this category. Use events in this category to visualize or analyze counts of network ports, protocols, addresses, geolocation information, etc.', + expected_event_types: [ + 'access', + 'allowed', + 'connection', + 'denied', + 'end', + 'info', + 'protocol', + 'start', + ], + name: 'network', + }, + { + description: + 'Relating to software packages installed on hosts. Use this category to visualize and analyze inventory of software installed on various hosts, or to determine host vulnerability in the absence of vulnerability scan data.', + expected_event_types: ['access', 'change', 'deletion', 'info', 'installation', 'start'], + name: 'package', + }, + { + description: + 'Use this category of events to visualize and analyze process-specific information such as lifecycle events or process ancestry.', + expected_event_types: ['access', 'change', 'end', 'info', 'start'], + name: 'process', + }, + { + description: + 'Having to do with settings and assets stored in the Windows registry. Use this category to visualize and analyze activity such as registry access and modifications.', + expected_event_types: ['access', 'change', 'creation', 'deletion'], + name: 'registry', + }, + { + description: + 'The session category is applied to events and metrics regarding logical persistent connections to hosts and services. Use this category to visualize and analyze interactive or automated persistent connections between assets. Data for this category may come from Windows Event logs, SSH logs, or stateless sessions such as HTTP cookie-based sessions, etc.', + expected_event_types: ['start', 'end', 'info'], + name: 'session', + }, + { + description: + "Use this category to visualize and analyze events describing threat actors' targets, motives, or behaviors.", + expected_event_types: ['indicator'], + name: 'threat', + }, + { + description: + 'Relating to vulnerability scan results. Use this category to analyze vulnerabilities detected by Tenable, Qualys, internal scanners, and other vulnerability management sources.', + expected_event_types: ['info'], + name: 'vulnerability', + }, + { + description: + 'Relating to web server access. Use this category to create a dashboard of web server/proxy activity from apache, IIS, nginx web servers, etc. Note: events from network observers such as Zeek http log may also be included in this category.', + expected_event_types: ['access', 'error', 'info'], + name: 'web', + }, + ], + dashed_name: 'event-category', + description: + 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy.\n`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory.\nThis field is an array. This will allow proper categorization of some events that fall in multiple categories.', + example: 'authentication', + flat_name: 'event.category', + ignore_above: 1024, + level: 'core', + name: 'category', + normalize: ['array'], + short: 'Event category. The second categorization field in the hierarchy.', + type: 'keyword', + indexFieldName: 'event.category', + indexFieldType: 'keyword', + indexInvalidValues: [ + { count: 2, fieldName: 'an_invalid_category' }, + { count: 1, fieldName: 'theory' }, + ], + hasEcsMetadata: true, + isEcsCompliant: false, // this index has unallowed values + isInSameFamily: true, // keyword and keyword are in the same family + }, + { + dashed_name: 'host-name', + description: + 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.', + flat_name: 'host.name', + ignore_above: 1024, + level: 'core', + name: 'name', + normalize: [], + short: 'Name of the host.', + type: 'keyword', + indexFieldName: 'host.name', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: false, // text !== keyword + isInSameFamily: false, // `keyword` and `text` are not are members of the same family + }, + { + indexFieldName: 'host.name.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + indexFieldName: 'some.field', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + indexFieldName: 'some.field.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + dashed_name: 'source-ip', + description: 'IP address of the source (IPv4 or IPv6).', + flat_name: 'source.ip', + level: 'core', + name: 'ip', + normalize: [], + short: 'IP address of the source.', + type: 'ip', + indexFieldName: 'source.ip', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: false, // text !== ip + isInSameFamily: false, // `ip` is not a member of any families + }, + { + indexFieldName: 'source.ip.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + dashed_name: 'source-port', + description: 'Port of the source.', + flat_name: 'source.port', + format: 'string', + level: 'core', + name: 'port', + normalize: [], + short: 'Port of the source.', + type: 'long', + indexFieldName: 'source.port', + indexFieldType: 'long', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, // indexFieldType === type, and no indexInvalidValues + isInSameFamily: false, // `long` is not a member of any families + }, + ], + ecsCompliant: [ + { + dashed_name: 'timestamp', + description: + 'Date/time when the event originated.\nThis is the date/time extracted from the event, typically representing when the event was generated by the source.\nIf the event source has no original timestamp, this value is typically populated by the first time the event was received by the pipeline.\nRequired field for all events.', + example: '2016-05-23T08:05:34.853Z', + flat_name: '@timestamp', + level: 'core', + name: '@timestamp', + normalize: [], + required: true, + short: 'Date/time when the event originated.', + type: 'date', + indexFieldName: '@timestamp', + indexFieldType: 'date', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, // indexFieldType === type, and no indexInvalidValues + isInSameFamily: false, // `date` is not a member of any families + }, + { + dashed_name: 'source-port', + description: 'Port of the source.', + flat_name: 'source.port', + format: 'string', + level: 'core', + name: 'port', + normalize: [], + short: 'Port of the source.', + type: 'long', + indexFieldName: 'source.port', + indexFieldType: 'long', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: true, // indexFieldType === type, and no indexInvalidValues + isInSameFamily: false, // `long` is not a member of any families + }, + ], + custom: [ + { + indexFieldName: 'host.name.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + indexFieldName: 'some.field', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + indexFieldName: 'some.field.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + { + indexFieldName: 'source.ip.keyword', + indexFieldType: 'keyword', + indexInvalidValues: [], + hasEcsMetadata: false, + isEcsCompliant: false, // custom field + isInSameFamily: false, // custom fields are never in the same family + }, + ], + incompatible: [ + { + allowed_values: [ + { + description: + 'Events in this category are related to the challenge and response process in which credentials are supplied and verified to allow the creation of a session. Common sources for these logs are Windows event logs and ssh logs. Visualize and analyze events in this category to look for failed logins, and other authentication-related activity.', + expected_event_types: ['start', 'end', 'info'], + name: 'authentication', + }, + { + description: + 'Events in the configuration category have to deal with creating, modifying, or deleting the settings or parameters of an application, process, or system.\nExample sources include security policy change logs, configuration auditing logging, and system integrity monitoring.', + expected_event_types: ['access', 'change', 'creation', 'deletion', 'info'], + name: 'configuration', + }, + { + description: + 'The database category denotes events and metrics relating to a data storage and retrieval system. Note that use of this category is not limited to relational database systems. Examples include event logs from MS SQL, MySQL, Elasticsearch, MongoDB, etc. Use this category to visualize and analyze database activity such as accesses and changes.', + expected_event_types: ['access', 'change', 'info', 'error'], + name: 'database', + }, + { + description: + 'Events in the driver category have to do with operating system device drivers and similar software entities such as Windows drivers, kernel extensions, kernel modules, etc.\nUse events and metrics in this category to visualize and analyze driver-related activity and status on hosts.', + expected_event_types: ['change', 'end', 'info', 'start'], + name: 'driver', + }, + { + description: + 'This category is used for events relating to email messages, email attachments, and email network or protocol activity.\nEmails events can be produced by email security gateways, mail transfer agents, email cloud service providers, or mail server monitoring applications.', + expected_event_types: ['info'], + name: 'email', + }, + { + description: + 'Relating to a set of information that has been created on, or has existed on a filesystem. Use this category of events to visualize and analyze the creation, access, and deletions of files. Events in this category can come from both host-based and network-based sources. An example source of a network-based detection of a file transfer would be the Zeek file.log.', + expected_event_types: ['change', 'creation', 'deletion', 'info'], + name: 'file', + }, + { + description: + 'Use this category to visualize and analyze information such as host inventory or host lifecycle events.\nMost of the events in this category can usually be observed from the outside, such as from a hypervisor or a control plane\'s point of view. Some can also be seen from within, such as "start" or "end".\nNote that this category is for information about hosts themselves; it is not meant to capture activity "happening on a host".', + expected_event_types: ['access', 'change', 'end', 'info', 'start'], + name: 'host', + }, + { + description: + 'Identity and access management (IAM) events relating to users, groups, and administration. Use this category to visualize and analyze IAM-related logs and data from active directory, LDAP, Okta, Duo, and other IAM systems.', + expected_event_types: [ + 'admin', + 'change', + 'creation', + 'deletion', + 'group', + 'info', + 'user', + ], + name: 'iam', + }, + { + description: + 'Relating to intrusion detections from IDS/IPS systems and functions, both network and host-based. Use this category to visualize and analyze intrusion detection alerts from systems such as Snort, Suricata, and Palo Alto threat detections.', + expected_event_types: ['allowed', 'denied', 'info'], + name: 'intrusion_detection', + }, + { + description: + 'Malware detection events and alerts. Use this category to visualize and analyze malware detections from EDR/EPP systems such as Elastic Endpoint Security, Symantec Endpoint Protection, Crowdstrike, and network IDS/IPS systems such as Suricata, or other sources of malware-related events such as Palo Alto Networks threat logs and Wildfire logs.', + expected_event_types: ['info'], + name: 'malware', + }, + { + description: + 'Relating to all network activity, including network connection lifecycle, network traffic, and essentially any event that includes an IP address. Many events containing decoded network protocol transactions fit into this category. Use events in this category to visualize or analyze counts of network ports, protocols, addresses, geolocation information, etc.', + expected_event_types: [ + 'access', + 'allowed', + 'connection', + 'denied', + 'end', + 'info', + 'protocol', + 'start', + ], + name: 'network', + }, + { + description: + 'Relating to software packages installed on hosts. Use this category to visualize and analyze inventory of software installed on various hosts, or to determine host vulnerability in the absence of vulnerability scan data.', + expected_event_types: ['access', 'change', 'deletion', 'info', 'installation', 'start'], + name: 'package', + }, + { + description: + 'Use this category of events to visualize and analyze process-specific information such as lifecycle events or process ancestry.', + expected_event_types: ['access', 'change', 'end', 'info', 'start'], + name: 'process', + }, + { + description: + 'Having to do with settings and assets stored in the Windows registry. Use this category to visualize and analyze activity such as registry access and modifications.', + expected_event_types: ['access', 'change', 'creation', 'deletion'], + name: 'registry', + }, + { + description: + 'The session category is applied to events and metrics regarding logical persistent connections to hosts and services. Use this category to visualize and analyze interactive or automated persistent connections between assets. Data for this category may come from Windows Event logs, SSH logs, or stateless sessions such as HTTP cookie-based sessions, etc.', + expected_event_types: ['start', 'end', 'info'], + name: 'session', + }, + { + description: + "Use this category to visualize and analyze events describing threat actors' targets, motives, or behaviors.", + expected_event_types: ['indicator'], + name: 'threat', + }, + { + description: + 'Relating to vulnerability scan results. Use this category to analyze vulnerabilities detected by Tenable, Qualys, internal scanners, and other vulnerability management sources.', + expected_event_types: ['info'], + name: 'vulnerability', + }, + { + description: + 'Relating to web server access. Use this category to create a dashboard of web server/proxy activity from apache, IIS, nginx web servers, etc. Note: events from network observers such as Zeek http log may also be included in this category.', + expected_event_types: ['access', 'error', 'info'], + name: 'web', + }, + ], + dashed_name: 'event-category', + description: + 'This is one of four ECS Categorization Fields, and indicates the second level in the ECS category hierarchy.\n`event.category` represents the "big buckets" of ECS categories. For example, filtering on `event.category:process` yields all events relating to process activity. This field is closely related to `event.type`, which is used as a subcategory.\nThis field is an array. This will allow proper categorization of some events that fall in multiple categories.', + example: 'authentication', + flat_name: 'event.category', + ignore_above: 1024, + level: 'core', + name: 'category', + normalize: ['array'], + short: 'Event category. The second categorization field in the hierarchy.', + type: 'keyword', + indexFieldName: 'event.category', + indexFieldType: 'keyword', + indexInvalidValues: [ + { count: 2, fieldName: 'an_invalid_category' }, + { count: 1, fieldName: 'theory' }, + ], + hasEcsMetadata: true, + isEcsCompliant: false, // indexFieldType === type, but there are indexInvalidValues + isInSameFamily: true, // `keyword` and `keyword` are in the same family + }, + { + dashed_name: 'host-name', + description: + 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use.', + flat_name: 'host.name', + ignore_above: 1024, + level: 'core', + name: 'name', + normalize: [], + short: 'Name of the host.', + type: 'keyword', + indexFieldName: 'host.name', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: false, // text !== keyword + isInSameFamily: false, // `keyword` and `text` are not in the same family + }, + { + dashed_name: 'source-ip', + description: 'IP address of the source (IPv4 or IPv6).', + flat_name: 'source.ip', + level: 'core', + name: 'ip', + normalize: [], + short: 'IP address of the source.', + type: 'ip', + indexFieldName: 'source.ip', + indexFieldType: 'text', + indexInvalidValues: [], + hasEcsMetadata: true, + isEcsCompliant: false, // text !== ip + isInSameFamily: false, // `ip` is not a member of any families + }, + ], +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_alerts_pattern_rollup.ts b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_alerts_pattern_rollup.ts new file mode 100644 index 0000000000000..cbca7ab9e1965 --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_alerts_pattern_rollup.ts @@ -0,0 +1,98 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PatternRollup } from '../../types'; + +/** + * This `PatternRollup` containing (just) the + * `.internal.alerts-security.alerts-default-000001` + * index has NO `results`, because the index was not checked + */ +export const alertIndexNoResults: PatternRollup = { + docsCount: 25914, + error: null, + ilmExplain: { + '.internal.alerts-security.alerts-default-000001': { + index: '.internal.alerts-security.alerts-default-000001', + managed: true, + policy: '.alerts-ilm-policy', + phase: 'hot', + }, + }, + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + }, + indices: 1, + pattern: '.alerts-security.alerts-default', + results: undefined, // <-- no results + stats: { + '.internal.alerts-security.alerts-default-000001': { + health: 'green', + status: 'open', + total: { + docs: { + count: 25914, + deleted: 0, + }, + }, + }, + }, +}; + +/** + * This `PatternRollup` containing (just) the + * `.internal.alerts-security.alerts-default-000001` + * index has `results`, where the index passed the check + */ +export const alertIndexWithAllResults: PatternRollup = { + docsCount: 26093, + error: null, + ilmExplain: { + '.internal.alerts-security.alerts-default-000001': { + index: '.internal.alerts-security.alerts-default-000001', + managed: true, + policy: '.alerts-ilm-policy', + phase: 'hot', + }, + }, + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + }, + indices: 1, + pattern: '.alerts-security.alerts-default', + results: { + '.internal.alerts-security.alerts-default-000001': { + docsCount: 26093, + error: null, + ilmPhase: 'hot', + incompatible: 0, + indexName: '.internal.alerts-security.alerts-default-000001', + markdownComments: ['foo', 'bar', 'baz'], + pattern: '.alerts-security.alerts-default', + }, + }, + stats: { + '.internal.alerts-security.alerts-default-000001': { + health: 'green', + status: 'open', + total: { + docs: { + count: 26093, + deleted: 0, + }, + }, + }, + }, +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_auditbeat_pattern_rollup.ts b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_auditbeat_pattern_rollup.ts new file mode 100644 index 0000000000000..776f02f9f4e74 --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_auditbeat_pattern_rollup.ts @@ -0,0 +1,190 @@ +/* + * Copyright 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 { PatternRollup } from '../../types'; + +/** + * This `PatternRollup` containing the following indices: + * ``` + * .ds-auditbeat-8.6.1-2023.02.07-000001 + * auditbeat-custom-empty-index-1 + * auditbeat-custom-index-1 + * ``` + * has no `results`, because the indices were NOT checked + */ +export const auditbeatNoResults: PatternRollup = { + docsCount: 19127, + error: null, + ilmExplain: { + '.ds-auditbeat-8.6.1-2023.02.07-000001': { + index: '.ds-auditbeat-8.6.1-2023.02.07-000001', + managed: true, + policy: 'auditbeat', + phase: 'hot', + }, + 'auditbeat-custom-empty-index-1': { + index: 'auditbeat-custom-empty-index-1', + managed: false, + }, + 'auditbeat-custom-index-1': { + index: 'auditbeat-custom-index-1', + managed: false, + }, + }, + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 2, + }, + indices: 3, + pattern: 'auditbeat-*', + results: undefined, // <-- no results + stats: { + '.ds-auditbeat-8.6.1-2023.02.07-000001': { + uuid: 'YpxavlUVTw2x_E_QtADrpg', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 19123, + deleted: 0, + }, + }, + }, + 'auditbeat-custom-empty-index-1': { + uuid: 'Iz5FJjsLQla34mD6kBAQBw', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 0, + deleted: 0, + }, + }, + }, + 'auditbeat-custom-index-1': { + uuid: 'xJvgb2QCQPSjlr7UnW8tFA', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 4, + deleted: 0, + }, + }, + }, + }, +}; + +/** + * This `PatternRollup` containing the following indices: + * ``` + * .ds-auditbeat-8.6.1-2023.02.07-000001 + * auditbeat-custom-empty-index-1 + * auditbeat-custom-index-1 + * ``` + * has `results`, for all three indexes, because all of them were checked. + * + * The `.ds-auditbeat-8.6.1-2023.02.07-000001` passed the check. + * The `auditbeat-custom-empty-index-1` and `auditbeat-custom-index-1` + * indices both failed their checks + */ +export const auditbeatWithAllResults: PatternRollup = { + docsCount: 19127, + error: null, + ilmExplain: { + '.ds-auditbeat-8.6.1-2023.02.07-000001': { + index: '.ds-auditbeat-8.6.1-2023.02.07-000001', + managed: true, + policy: 'auditbeat', + phase: 'hot', + }, + 'auditbeat-custom-empty-index-1': { + index: 'auditbeat-custom-empty-index-1', + managed: false, + }, + 'auditbeat-custom-index-1': { + index: 'auditbeat-custom-index-1', + managed: false, + }, + }, + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 2, + }, + indices: 3, + pattern: 'auditbeat-*', + results: { + '.ds-auditbeat-8.6.1-2023.02.07-000001': { + docsCount: 19123, + error: null, + ilmPhase: 'hot', + incompatible: 0, + indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', + markdownComments: ['foo', 'bar', 'baz'], + pattern: 'auditbeat-*', + }, + 'auditbeat-custom-index-1': { + docsCount: 4, + error: null, + ilmPhase: 'unmanaged', + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + markdownComments: ['foo', 'bar', 'baz'], + pattern: 'auditbeat-*', + }, + 'auditbeat-custom-empty-index-1': { + docsCount: 0, + error: null, + ilmPhase: 'unmanaged', + incompatible: 1, + indexName: 'auditbeat-custom-empty-index-1', + markdownComments: ['foo', 'bar', 'baz'], + pattern: 'auditbeat-*', + }, + }, + stats: { + '.ds-auditbeat-8.6.1-2023.02.07-000001': { + uuid: 'YpxavlUVTw2x_E_QtADrpg', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 19123, + deleted: 0, + }, + }, + }, + 'auditbeat-custom-empty-index-1': { + uuid: 'Iz5FJjsLQla34mD6kBAQBw', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 0, + deleted: 0, + }, + }, + }, + 'auditbeat-custom-index-1': { + uuid: 'xJvgb2QCQPSjlr7UnW8tFA', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 4, + deleted: 0, + }, + }, + }, + }, +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_packetbeat_pattern_rollup.ts b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_packetbeat_pattern_rollup.ts new file mode 100644 index 0000000000000..2b39901b9c954 --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/pattern_rollup/mock_packetbeat_pattern_rollup.ts @@ -0,0 +1,154 @@ +/* + * Copyright 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 { PatternRollup } from '../../types'; + +/** + * This `PatternRollup` containing the following indices: + * ``` + * .ds-packetbeat-8.5.3-2023.02.04-000001 + * .ds-packetbeat-8.6.1-2023.02.04-000001 + * + * ``` + * has no `results`, because the indices were NOT checked + */ +export const packetbeatNoResults: PatternRollup = { + docsCount: 3258632, + error: null, + ilmExplain: { + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + index: '.ds-packetbeat-8.6.1-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + phase: 'hot', + }, + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + index: '.ds-packetbeat-8.5.3-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + phase: 'hot', + }, + }, + ilmExplainPhaseCounts: { + hot: 2, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + }, + indices: 2, + pattern: 'packetbeat-*', + results: undefined, + stats: { + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + uuid: 'x5Uuw4j4QM2YidHLNixCwg', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 1628343, + deleted: 0, + }, + }, + }, + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + uuid: 'we0vNWm2Q6iz6uHubyHS6Q', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 1630289, + deleted: 0, + }, + }, + }, + }, +}; + +/** + * This `PatternRollup` containing the following indices: + * ``` + * .ds-packetbeat-8.5.3-2023.02.04-000001 + * .ds-packetbeat-8.6.1-2023.02.04-000001 + * + * ``` + * has partial `results`, because: + * 1) Errors occurred while checking the `.ds-packetbeat-8.5.3-2023.02.04-000001` index + * 2) The `.ds-packetbeat-8.6.1-2023.02.04-000001` passed the check + */ +export const packetbeatWithSomeErrors: PatternRollup = { + docsCount: 3258632, + error: null, + ilmExplain: { + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + index: '.ds-packetbeat-8.6.1-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + phase: 'hot', + }, + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + index: '.ds-packetbeat-8.5.3-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + phase: 'hot', + }, + }, + ilmExplainPhaseCounts: { + hot: 2, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + }, + indices: 2, + pattern: 'packetbeat-*', + results: { + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + docsCount: 1630289, + error: + 'Error loading mappings for .ds-packetbeat-8.5.3-2023.02.04-000001: Error: simulated error fetching index .ds-packetbeat-8.5.3-2023.02.04-000001', + ilmPhase: 'hot', + incompatible: undefined, + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + markdownComments: ['foo', 'bar', 'baz'], + pattern: 'packetbeat-*', + }, + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + docsCount: 1628343, + error: null, + ilmPhase: 'hot', + incompatible: 0, + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + markdownComments: ['foo', 'bar', 'baz'], + pattern: 'packetbeat-*', + }, + }, + stats: { + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + uuid: 'x5Uuw4j4QM2YidHLNixCwg', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 1628343, + deleted: 0, + }, + }, + }, + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + uuid: 'we0vNWm2Q6iz6uHubyHS6Q', + health: 'yellow', + status: 'open', + total: { + docs: { + count: 1630289, + deleted: 0, + }, + }, + }, + }, +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/stats/mock_stats.tsx b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/stats/mock_stats.tsx new file mode 100644 index 0000000000000..0362dcd70a53f --- /dev/null +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/mock/stats/mock_stats.tsx @@ -0,0 +1,561 @@ +/* + * Copyright 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 { IndicesStatsIndicesStats } from '@elastic/elasticsearch/lib/api/types'; + +export const mockStats: Record = { + '.ds-packetbeat-8.6.1-2023.02.04-000001': { + uuid: 'x5Uuw4j4QM2YidHLNixCwg', + health: 'yellow', + status: 'open', + primaries: { + docs: { + count: 1628343, + deleted: 0, + }, + shard_stats: { + total_count: 1, + }, + store: { + size_in_bytes: 731583142, + total_data_set_size_in_bytes: 731583142, + reserved_in_bytes: 0, + }, + indexing: { + index_total: 0, + index_time_in_millis: 0, + index_current: 0, + index_failed: 0, + delete_total: 0, + delete_time_in_millis: 0, + delete_current: 0, + noop_update_total: 0, + is_throttled: false, + throttle_time_in_millis: 0, + }, + get: { + total: 0, + time_in_millis: 0, + exists_total: 0, + exists_time_in_millis: 0, + missing_total: 0, + missing_time_in_millis: 0, + current: 0, + }, + search: { + open_contexts: 0, + query_total: 32, + query_time_in_millis: 111, + query_current: 0, + fetch_total: 32, + fetch_time_in_millis: 0, + fetch_current: 0, + scroll_total: 0, + scroll_time_in_millis: 0, + scroll_current: 0, + suggest_total: 0, + suggest_time_in_millis: 0, + suggest_current: 0, + }, + merges: { + current: 0, + current_docs: 0, + current_size_in_bytes: 0, + total: 0, + total_time_in_millis: 0, + total_docs: 0, + total_size_in_bytes: 0, + total_stopped_time_in_millis: 0, + total_throttled_time_in_millis: 0, + total_auto_throttle_in_bytes: 20971520, + }, + refresh: { + total: 2, + total_time_in_millis: 0, + external_total: 2, + external_total_time_in_millis: 15, + listeners: 0, + }, + flush: { + total: 1, + periodic: 1, + total_time_in_millis: 0, + }, + warmer: { + current: 0, + total: 1, + total_time_in_millis: 15, + }, + query_cache: { + memory_size_in_bytes: 0, + total_count: 301, + hit_count: 0, + miss_count: 301, + cache_size: 0, + cache_count: 0, + evictions: 0, + }, + fielddata: { + memory_size_in_bytes: 1080, + evictions: 0, + }, + completion: { + size_in_bytes: 0, + }, + segments: { + count: 19, + memory_in_bytes: 0, + terms_memory_in_bytes: 0, + stored_fields_memory_in_bytes: 0, + term_vectors_memory_in_bytes: 0, + norms_memory_in_bytes: 0, + points_memory_in_bytes: 0, + doc_values_memory_in_bytes: 0, + index_writer_memory_in_bytes: 0, + version_map_memory_in_bytes: 0, + fixed_bit_set_memory_in_bytes: 304, + max_unsafe_auto_id_timestamp: -1, + file_sizes: {}, + }, + translog: { + operations: 0, + size_in_bytes: 55, + uncommitted_operations: 0, + uncommitted_size_in_bytes: 55, + earliest_last_modified_age: 136482466, + }, + request_cache: { + memory_size_in_bytes: 3680, + evictions: 0, + hit_count: 28, + miss_count: 4, + }, + recovery: { + current_as_source: 0, + current_as_target: 0, + throttle_time_in_millis: 0, + }, + bulk: { + total_operations: 0, + total_time_in_millis: 0, + total_size_in_bytes: 0, + avg_time_in_millis: 0, + avg_size_in_bytes: 0, + }, + }, + total: { + docs: { + count: 1628343, + deleted: 0, + }, + shard_stats: { + total_count: 1, + }, + store: { + size_in_bytes: 731583142, + total_data_set_size_in_bytes: 731583142, + reserved_in_bytes: 0, + }, + indexing: { + index_total: 0, + index_time_in_millis: 0, + index_current: 0, + index_failed: 0, + delete_total: 0, + delete_time_in_millis: 0, + delete_current: 0, + noop_update_total: 0, + is_throttled: false, + throttle_time_in_millis: 0, + }, + get: { + total: 0, + time_in_millis: 0, + exists_total: 0, + exists_time_in_millis: 0, + missing_total: 0, + missing_time_in_millis: 0, + current: 0, + }, + search: { + open_contexts: 0, + query_total: 32, + query_time_in_millis: 111, + query_current: 0, + fetch_total: 32, + fetch_time_in_millis: 0, + fetch_current: 0, + scroll_total: 0, + scroll_time_in_millis: 0, + scroll_current: 0, + suggest_total: 0, + suggest_time_in_millis: 0, + suggest_current: 0, + }, + merges: { + current: 0, + current_docs: 0, + current_size_in_bytes: 0, + total: 0, + total_time_in_millis: 0, + total_docs: 0, + total_size_in_bytes: 0, + total_stopped_time_in_millis: 0, + total_throttled_time_in_millis: 0, + total_auto_throttle_in_bytes: 20971520, + }, + refresh: { + total: 2, + total_time_in_millis: 0, + external_total: 2, + external_total_time_in_millis: 15, + listeners: 0, + }, + flush: { + total: 1, + periodic: 1, + total_time_in_millis: 0, + }, + warmer: { + current: 0, + total: 1, + total_time_in_millis: 15, + }, + query_cache: { + memory_size_in_bytes: 0, + total_count: 301, + hit_count: 0, + miss_count: 301, + cache_size: 0, + cache_count: 0, + evictions: 0, + }, + fielddata: { + memory_size_in_bytes: 1080, + evictions: 0, + }, + completion: { + size_in_bytes: 0, + }, + segments: { + count: 19, + memory_in_bytes: 0, + terms_memory_in_bytes: 0, + stored_fields_memory_in_bytes: 0, + term_vectors_memory_in_bytes: 0, + norms_memory_in_bytes: 0, + points_memory_in_bytes: 0, + doc_values_memory_in_bytes: 0, + index_writer_memory_in_bytes: 0, + version_map_memory_in_bytes: 0, + fixed_bit_set_memory_in_bytes: 304, + max_unsafe_auto_id_timestamp: -1, + file_sizes: {}, + }, + translog: { + operations: 0, + size_in_bytes: 55, + uncommitted_operations: 0, + uncommitted_size_in_bytes: 55, + earliest_last_modified_age: 136482466, + }, + request_cache: { + memory_size_in_bytes: 3680, + evictions: 0, + hit_count: 28, + miss_count: 4, + }, + recovery: { + current_as_source: 0, + current_as_target: 0, + throttle_time_in_millis: 0, + }, + bulk: { + total_operations: 0, + total_time_in_millis: 0, + total_size_in_bytes: 0, + avg_time_in_millis: 0, + avg_size_in_bytes: 0, + }, + }, + }, + '.ds-packetbeat-8.5.3-2023.02.04-000001': { + uuid: 'we0vNWm2Q6iz6uHubyHS6Q', + health: 'yellow', + status: 'open', + primaries: { + docs: { + count: 1630289, + deleted: 0, + }, + shard_stats: { + total_count: 1, + }, + store: { + size_in_bytes: 733175040, + total_data_set_size_in_bytes: 733175040, + reserved_in_bytes: 0, + }, + indexing: { + index_total: 0, + index_time_in_millis: 0, + index_current: 0, + index_failed: 0, + delete_total: 0, + delete_time_in_millis: 0, + delete_current: 0, + noop_update_total: 0, + is_throttled: false, + throttle_time_in_millis: 0, + }, + get: { + total: 0, + time_in_millis: 0, + exists_total: 0, + exists_time_in_millis: 0, + missing_total: 0, + missing_time_in_millis: 0, + current: 0, + }, + search: { + open_contexts: 0, + query_total: 32, + query_time_in_millis: 111, + query_current: 0, + fetch_total: 32, + fetch_time_in_millis: 0, + fetch_current: 0, + scroll_total: 0, + scroll_time_in_millis: 0, + scroll_current: 0, + suggest_total: 0, + suggest_time_in_millis: 0, + suggest_current: 0, + }, + merges: { + current: 0, + current_docs: 0, + current_size_in_bytes: 0, + total: 0, + total_time_in_millis: 0, + total_docs: 0, + total_size_in_bytes: 0, + total_stopped_time_in_millis: 0, + total_throttled_time_in_millis: 0, + total_auto_throttle_in_bytes: 20971520, + }, + refresh: { + total: 2, + total_time_in_millis: 0, + external_total: 2, + external_total_time_in_millis: 2, + listeners: 0, + }, + flush: { + total: 1, + periodic: 1, + total_time_in_millis: 0, + }, + warmer: { + current: 0, + total: 1, + total_time_in_millis: 2, + }, + query_cache: { + memory_size_in_bytes: 0, + total_count: 203, + hit_count: 0, + miss_count: 203, + cache_size: 0, + cache_count: 0, + evictions: 0, + }, + fielddata: { + memory_size_in_bytes: 1168, + evictions: 0, + }, + completion: { + size_in_bytes: 0, + }, + segments: { + count: 20, + memory_in_bytes: 0, + terms_memory_in_bytes: 0, + stored_fields_memory_in_bytes: 0, + term_vectors_memory_in_bytes: 0, + norms_memory_in_bytes: 0, + points_memory_in_bytes: 0, + doc_values_memory_in_bytes: 0, + index_writer_memory_in_bytes: 0, + version_map_memory_in_bytes: 0, + fixed_bit_set_memory_in_bytes: 320, + max_unsafe_auto_id_timestamp: -1, + file_sizes: {}, + }, + translog: { + operations: 0, + size_in_bytes: 55, + uncommitted_operations: 0, + uncommitted_size_in_bytes: 55, + earliest_last_modified_age: 136482425, + }, + request_cache: { + memory_size_in_bytes: 3688, + evictions: 0, + hit_count: 28, + miss_count: 4, + }, + recovery: { + current_as_source: 0, + current_as_target: 0, + throttle_time_in_millis: 0, + }, + bulk: { + total_operations: 0, + total_time_in_millis: 0, + total_size_in_bytes: 0, + avg_time_in_millis: 0, + avg_size_in_bytes: 0, + }, + }, + total: { + docs: { + count: 1630289, + deleted: 0, + }, + shard_stats: { + total_count: 1, + }, + store: { + size_in_bytes: 733175040, + total_data_set_size_in_bytes: 733175040, + reserved_in_bytes: 0, + }, + indexing: { + index_total: 0, + index_time_in_millis: 0, + index_current: 0, + index_failed: 0, + delete_total: 0, + delete_time_in_millis: 0, + delete_current: 0, + noop_update_total: 0, + is_throttled: false, + throttle_time_in_millis: 0, + }, + get: { + total: 0, + time_in_millis: 0, + exists_total: 0, + exists_time_in_millis: 0, + missing_total: 0, + missing_time_in_millis: 0, + current: 0, + }, + search: { + open_contexts: 0, + query_total: 32, + query_time_in_millis: 111, + query_current: 0, + fetch_total: 32, + fetch_time_in_millis: 0, + fetch_current: 0, + scroll_total: 0, + scroll_time_in_millis: 0, + scroll_current: 0, + suggest_total: 0, + suggest_time_in_millis: 0, + suggest_current: 0, + }, + merges: { + current: 0, + current_docs: 0, + current_size_in_bytes: 0, + total: 0, + total_time_in_millis: 0, + total_docs: 0, + total_size_in_bytes: 0, + total_stopped_time_in_millis: 0, + total_throttled_time_in_millis: 0, + total_auto_throttle_in_bytes: 20971520, + }, + refresh: { + total: 2, + total_time_in_millis: 0, + external_total: 2, + external_total_time_in_millis: 2, + listeners: 0, + }, + flush: { + total: 1, + periodic: 1, + total_time_in_millis: 0, + }, + warmer: { + current: 0, + total: 1, + total_time_in_millis: 2, + }, + query_cache: { + memory_size_in_bytes: 0, + total_count: 203, + hit_count: 0, + miss_count: 203, + cache_size: 0, + cache_count: 0, + evictions: 0, + }, + fielddata: { + memory_size_in_bytes: 1168, + evictions: 0, + }, + completion: { + size_in_bytes: 0, + }, + segments: { + count: 20, + memory_in_bytes: 0, + terms_memory_in_bytes: 0, + stored_fields_memory_in_bytes: 0, + term_vectors_memory_in_bytes: 0, + norms_memory_in_bytes: 0, + points_memory_in_bytes: 0, + doc_values_memory_in_bytes: 0, + index_writer_memory_in_bytes: 0, + version_map_memory_in_bytes: 0, + fixed_bit_set_memory_in_bytes: 320, + max_unsafe_auto_id_timestamp: -1, + file_sizes: {}, + }, + translog: { + operations: 0, + size_in_bytes: 55, + uncommitted_operations: 0, + uncommitted_size_in_bytes: 55, + earliest_last_modified_age: 136482425, + }, + request_cache: { + memory_size_in_bytes: 3688, + evictions: 0, + hit_count: 28, + miss_count: 4, + }, + recovery: { + current_as_source: 0, + current_as_target: 0, + throttle_time_in_millis: 0, + }, + bulk: { + total_operations: 0, + total_time_in_millis: 0, + total_size_in_bytes: 0, + avg_time_in_millis: 0, + avg_size_in_bytes: 0, + }, + }, + }, +}; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/styles.tsx b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/styles.tsx index 6b05356d5de59..d54ea9d6316e2 100644 --- a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/styles.tsx +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/styles.tsx @@ -7,6 +7,7 @@ import { EuiCode } from '@elastic/eui'; import { euiThemeVars } from '@kbn/ui-theme'; + import styled from 'styled-components'; export const CodeDanger = styled(EuiCode)` @@ -16,3 +17,7 @@ export const CodeDanger = styled(EuiCode)` export const CodeSuccess = styled(EuiCode)` color: ${euiThemeVars.euiColorSuccess}; `; + +export const CodeWarning = styled(EuiCode)` + color: ${euiThemeVars.euiColorWarning}; +`; diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/types.ts b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/types.ts index 7a0ec3698a315..9edc76bbe6220 100644 --- a/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/types.ts +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/data_quality/types.ts @@ -18,6 +18,7 @@ export interface Mappings { export interface AllowedValue { description?: string; + expected_event_types?: string[]; name?: string; } @@ -27,8 +28,11 @@ export interface EcsMetadata { description?: string; example?: string; flat_name?: string; + format?: string; + ignore_above?: number; level?: string; name?: string; + normalize?: string[]; required?: boolean; short?: string; type?: string; @@ -40,6 +44,7 @@ export type EnrichedFieldMetadata = EcsMetadata & { indexFieldType: string; indexInvalidValues: UnallowedValueCount[]; isEcsCompliant: boolean; + isInSameFamily: boolean; }; export interface PartitionedFieldMetadata { diff --git a/x-pack/packages/kbn-ecs-data-quality-dashboard/jest.config.js b/x-pack/packages/kbn-ecs-data-quality-dashboard/jest.config.js index cd5c74e9b44bc..38ee7689712b5 100644 --- a/x-pack/packages/kbn-ecs-data-quality-dashboard/jest.config.js +++ b/x-pack/packages/kbn-ecs-data-quality-dashboard/jest.config.js @@ -6,6 +6,17 @@ */ module.exports = { + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/packages/kbn-ecs-data-quality-dashboard/impl', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/**/*.{ts,tsx}', + '!/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/{__test__,__snapshots__,__examples__,*mock*,tests,test_helpers,integration_tests,types}/**/*', + '!/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/*mock*.{ts,tsx}', + '!/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/*.test.{ts,tsx}', + '!/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/*.d.ts', + '!/x-pack/packages/kbn-ecs-data-quality-dashboard/impl/*.config.ts', + ], preset: '@kbn/test', rootDir: '../../..', roots: ['/x-pack/packages/kbn-ecs-data-quality-dashboard'], From 27f2eee64f176fc1e627cb8d2ed72b628ccaa1fd Mon Sep 17 00:00:00 2001 From: Lola Date: Tue, 21 Feb 2023 14:40:55 -0500 Subject: [PATCH 197/210] Csp aws text updates (#151237) ## Summary Updating CSP aws texts in CSPM/KSPM Integration Updates Security Solution Snapshot for Security Solutions Dashboards. - Security-threat-hunting-team please review text change `xpack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap` Updates Cloud Security text in the guided card component. - platform-onboarding please review text change `packages/kbn-guided-onboarding/src/components/landing_page/guide_cards.constants.tsx` ## Elastic setup guide **Before** ![Image](https://user-images.githubusercontent.com/53792284/218277681-f02a1ddd-2e95-4195-94b3-fd1e030dcc2d.png) **After** csp-setup-guides-after ```[tasklist] - [x] Update text on the elastic setup guide on the home page from "Secure my cloud assets with posture management" to "Secure my cloud assets with cloud security posture management (CSPM)" ``` ## Security Dashboards Before image After image ```[tasklist] - [x] Update text Cloud Security to `Cloud security Posture` ``` ## Empty States ### Main empty state **Before** ![Image](https://user-images.githubusercontent.com/53792284/218278787-32ab4c82-9c49-416b-8c83-36aca6345139.png) **After** main-empty-state-after ```[tasklist] - [x] Update placeholder text on the main empty state using the copy provided above - [x] Update the "Learn more" hyperlink so that it navigates users to https://ela.st/cspm instead of https://ela.st/getting-started-with-kspm ``` ### No agent installed empty state **Before** ![Image](https://user-images.githubusercontent.com/53792284/218279865-89723988-8d63-4eee-ae73-a07bc2c74aca.png) **After** no-agents-empty-state ```[tasklist] - [x] Update placeholder text on the "No Agents Installed" empty state using the copy provided above ``` ## C/KSPM empty state Before ![Image](https://user-images.githubusercontent.com/53792284/218280334-261b1251-ae1e-4ecb-9395-f26f10677d74.png) After kspm kspm empty state cspm cspm_dashboard_empty_state ```[tasklist] - [x] Update placeholder text for the empty state on the Cloud and Kubernetes tabs - [x] The hyperlink on the Cloud tab should direct users to https://ela.st/cspm, while the hyperlink on the Kubernetes tab should direct users to https://ela.st/kspm ``` ## Posture Score / Compliance Score **Before** ![Image](https://user-images.githubusercontent.com/53792284/218280933-b1ccbfee-7216-45e6-990d-06505c6499a5.png) ![Image](https://user-images.githubusercontent.com/53792284/218281131-c99e19e1-7498-4f66-b8df-f23db369daf2.png) **After** Posture_score_column_dashboard Posture_score_column_grouped_by_findings ```[tasklist] - [x] Change the `Compliance Score` column name to `Posture Score` on both the Cloud & Kubernetes tabs in the table where we list individual clusters and cloud accounts. - [x] Change the `Compliance Score` column name to `Posture Score` on the grouped-by-resource view of the findings page. ``` ## Posture Dashboard **Before** ![Image](https://user-images.githubusercontent.com/53792284/218281551-8da3b02c-d753-4898-8ef3-284e5dfffef4.png) ![Image](https://user-images.githubusercontent.com/53792284/218281612-bad25428-9996-4983-b62f-74768d6560f1.png) **After** KSPM_Posture_Dasboard_Title_rename ```[tasklist] - [x] Update posture dashboard title from `Cloud Posture` to `Cloud Security Posture` - [x] Update the `Cloud Posture Score` title in the overall score section to `Overall Cloud Posture Score` on the Cloud tab and `Overall Kubernetes Posture Score` on the Kubernetes tab. - [x] Update Dashboard tile card title from `Cloud Posture` to `Cloud Security Posture` - [x] Update Breadcrumbs text from `Cloud Posture` to `Cloud Security Posture` ``` ## Integration **Before** ![Image](https://user-images.githubusercontent.com/53792284/218282678-c4a8dbe2-8bed-4dc6-8d8e-a4fa9ba20c64.png) ![Image](https://user-images.githubusercontent.com/53792284/218282684-c51ef857-333f-4cd9-805e-c60ed5f5cf6d.png) **After** CSPM Integration setup info text updates cspm-aws-integraion-setup **KSPM Integeration setup info text updates** kspm-aws-integration-setup **CSPM removal link** image **KSPM removal link** kspm-docs-link-removal ```[tasklist] - [x] Update Setup Access description for both CSPM & KSPM - [x] Include KSPM, and CSPM specific getting-started links in the description above (https://ela.st/kspm-get-started and https://ela.st/cspm-get-started) - [x] Remove our hyperlink to AWS docs from the setup access section ``` = --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../__snapshots__/guide_cards.test.tsx.snap | 2 +- .../landing_page/guide_cards.constants.tsx | 2 +- .../public/common/navigation/constants.ts | 27 +++++- .../public/common/navigation/types.ts | 5 ++ .../public/components/cloud_posture_page.tsx | 8 +- .../fleet_extensions/aws_credentials_form.tsx | 88 ++++++++++--------- .../public/components/no_findings_states.tsx | 3 +- .../compliance_dashboard.tsx | 16 ++-- .../benchmarks_section.test.tsx | 2 +- .../dashboard_sections/benchmarks_section.tsx | 4 +- .../dashboard_sections/summary_section.tsx | 13 +-- .../findings_by_resource_table.tsx | 4 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 16 files changed, 104 insertions(+), 75 deletions(-) diff --git a/packages/kbn-guided-onboarding/src/components/landing_page/__snapshots__/guide_cards.test.tsx.snap b/packages/kbn-guided-onboarding/src/components/landing_page/__snapshots__/guide_cards.test.tsx.snap index dd633872933f4..2b9c99e546957 100644 --- a/packages/kbn-guided-onboarding/src/components/landing_page/__snapshots__/guide_cards.test.tsx.snap +++ b/packages/kbn-guided-onboarding/src/components/landing_page/__snapshots__/guide_cards.test.tsx.snap @@ -259,7 +259,7 @@ exports[`guide cards snapshots should render all cards 1`] = ` "solution": "security", "telemetryId": "onboarding--security--cloud", "title": , }} diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts index 7de2479600074..803ebf3ab5b76 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts @@ -6,11 +6,18 @@ */ import { i18n } from '@kbn/i18n'; -import type { CspBenchmarksPage, CspPage, CspPageNavigationItem } from './types'; +import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '../../../common/constants'; +import { PosturePolicyTemplate } from '../../../common/types'; +import type { + CspBenchmarksPage, + CspIntegrationDocNavigationItem, + CspPage, + CspPageNavigationItem, +} from './types'; const NAV_ITEMS_NAMES = { DASHBOARD: i18n.translate('xpack.csp.navigation.dashboardNavItemLabel', { - defaultMessage: 'Cloud Posture', + defaultMessage: 'Cloud Security Posture', }), FINDINGS: i18n.translate('xpack.csp.navigation.findingsNavItemLabel', { defaultMessage: 'Findings', @@ -69,3 +76,19 @@ export const findingsNavigation = { id: 'cloud_security_posture-findings-resourceId', }, }; + +const ELASTIC_BASE_SHORT_URL = 'https://ela.st'; + +export const cspIntegrationDocsNavigation: Record< + PosturePolicyTemplate, + CspIntegrationDocNavigationItem +> = { + kspm: { + overviewPath: `${ELASTIC_BASE_SHORT_URL}/${KSPM_POLICY_TEMPLATE}`, + getStartedPath: `${ELASTIC_BASE_SHORT_URL}/${KSPM_POLICY_TEMPLATE}-get-started`, + }, + cspm: { + overviewPath: `${ELASTIC_BASE_SHORT_URL}/${CSPM_POLICY_TEMPLATE}`, + getStartedPath: `${ELASTIC_BASE_SHORT_URL}/${CSPM_POLICY_TEMPLATE}-get-started`, + }, +}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts index 4848ed7a19791..8bc47e489e552 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/types.ts @@ -26,3 +26,8 @@ export type CloudSecurityPosturePageId = | 'cloud_security_posture-findings' | 'cloud_security_posture-benchmarks' | 'cloud_security_posture-benchmarks-rules'; + +export interface CspIntegrationDocNavigationItem { + overviewPath: string; + getStartedPath: string; +} diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx index de9728d5d52b5..d2c5158bb2d47 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_posture_page.tsx @@ -27,6 +27,7 @@ import { CspLoadingState } from './csp_loading_state'; import { useCspIntegrationLink } from '../common/navigation/use_csp_integration_link'; import noDataIllustration from '../assets/illustrations/no_data_illustration.svg'; +import { cspIntegrationDocsNavigation } from '../common/navigation/constants'; export const LOADING_STATE_TEST_SUBJECT = 'cloud_posture_page_loading'; export const ERROR_STATE_TEST_SUBJECT = 'cloud_posture_page_error'; @@ -118,7 +119,7 @@ const packageNotInstalledRenderer = ({

} @@ -128,11 +129,10 @@ const packageNotInstalledRenderer = ({

+ ( - <> - - -

+interface AWSSetupInfoContentProps { + policyTemplate: PosturePolicyTemplate | undefined; +} + +const AWSSetupInfoContent = ({ policyTemplate }: AWSSetupInfoContentProps) => { + const { cspm, kspm } = cspIntegrationDocsNavigation; + const integrationLink = + !policyTemplate || policyTemplate === CSPM_POLICY_TEMPLATE + ? cspm.getStartedPath + : kspm.getStartedPath; + + return ( + <> + + +

+ +

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

- - - - - - -); - -const DocsLink = ( - - - documentation - - ), - }} - /> - -); + + + ); +}; const AssumeRoleDescription = (
From cfe91b199dab7e1951bb27a08a27af785de27267 Mon Sep 17 00:00:00 2001 From: Or Ouziel Date: Wed, 22 Feb 2023 09:25:35 +0200 Subject: [PATCH 209/210] [Cloud Posture] add tests for findings flyout toggling (#150551) --- .../findings_flyout/findings_flyout.tsx | 3 +- .../latest_findings_table.test.tsx | 66 +++++++++---------- .../pages/findings/layout/findings_layout.tsx | 2 + .../public/pages/findings/test_subjects.ts | 2 + 4 files changed, 38 insertions(+), 35 deletions(-) diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/findings_flyout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/findings_flyout.tsx index 8229084c10dd9..0c1f9dd288e8d 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/findings_flyout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/findings_flyout/findings_flyout.tsx @@ -33,6 +33,7 @@ import { RuleTab } from './rule_tab'; import type { BenchmarkId } from '../../../../common/types'; import { CISBenchmarkIcon } from '../../../components/cis_benchmark_icon'; import { BenchmarkName } from '../../../../common/types'; +import { FINDINGS_FLYOUT } from '../test_subjects'; const tabs = [ { @@ -112,7 +113,7 @@ export const FindingsRuleFlyout = ({ onClose, findings }: FindingFlyoutProps) => const [tab, setTab] = useState(tabs[0]); return ( - + diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.test.tsx index 968db8feb53b2..443f7c9d51de3 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/latest_findings/latest_findings_table.test.tsx @@ -19,14 +19,15 @@ const chance = new Chance(); type TableProps = PropsOf; describe('', () => { - it('renders the zero state when status success and data has a length of zero ', async () => { + const renderWrapper = (opts?: Partial) => { const props: TableProps = { loading: false, - items: [], + items: opts?.items || [], sorting: { sort: { field: '@timestamp', direction: 'desc' } }, - pagination: { pageSize: 10, pageIndex: 1, totalItemCount: 0 }, + pagination: { pageSize: 10, pageIndex: 1, totalItemCount: opts?.items?.length || 0 }, setTableOptions: jest.fn(), onAddFilter: jest.fn(), + ...opts, }; render( @@ -34,6 +35,24 @@ describe('', () => { ); + return props; + }; + + it('opens/closes the flyout when clicked on expand/close buttons ', () => { + renderWrapper({ items: [getFindingsFixture()] }); + + expect(screen.queryByTestId(TEST_SUBJECTS.FINDINGS_FLYOUT)).not.toBeInTheDocument(); + expect(screen.queryByTestId(TEST_SUBJECTS.FINDINGS_TABLE_EXPAND_COLUMN)).toBeInTheDocument(); + + userEvent.click(screen.getByTestId(TEST_SUBJECTS.FINDINGS_TABLE_EXPAND_COLUMN)); + expect(screen.getByTestId(TEST_SUBJECTS.FINDINGS_FLYOUT)).toBeInTheDocument(); + + userEvent.click(screen.getByTestId('euiFlyoutCloseButton')); + expect(screen.queryByTestId(TEST_SUBJECTS.FINDINGS_FLYOUT)).not.toBeInTheDocument(); + }); + + it('renders the zero state when status success and data has a length of zero ', async () => { + renderWrapper({ items: [] }); expect( screen.getByTestId(TEST_SUBJECTS.LATEST_FINDINGS_TABLE_NO_FINDINGS_EMPTY_STATE) @@ -42,22 +61,12 @@ describe('', () => { it('renders the table with provided items', () => { const names = chance.unique(chance.sentence, 10); - const data = names.map(getFindingsFixture); + const data = names.map((name) => { + const fixture = getFindingsFixture(); + return { ...fixture, rule: { ...fixture.rule, name } }; + }); - const props: TableProps = { - loading: false, - items: data, - sorting: { sort: { field: '@timestamp', direction: 'desc' } }, - pagination: { pageSize: 10, pageIndex: 1, totalItemCount: 0 }, - setTableOptions: jest.fn(), - onAddFilter: jest.fn(), - }; - - render( - - - - ); + renderWrapper({ items: data }); data.forEach((item) => { expect(screen.getByText(item.rule.name)).toBeInTheDocument(); @@ -66,23 +75,12 @@ describe('', () => { it('adds filter with a cell button click', () => { const names = chance.unique(chance.sentence, 10); - const data = names.map(getFindingsFixture); - - const filterProps = { onAddFilter: jest.fn() }; - const props: TableProps = { - loading: false, - items: data, - sorting: { sort: { field: '@timestamp', direction: 'desc' } }, - pagination: { pageSize: 10, pageIndex: 1, totalItemCount: 0 }, - setTableOptions: jest.fn(), - ...filterProps, - }; + const data = names.map((name) => { + const fixture = getFindingsFixture(); + return { ...fixture, rule: { ...fixture.rule, name } }; + }); - render( - - - - ); + const props = renderWrapper({ items: data }); const row = data[0]; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx index 5a37f67333f60..6b46eba1a87bc 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/layout/findings_layout.tsx @@ -28,6 +28,7 @@ import { CspEvaluationBadge } from '../../../components/csp_evaluation_badge'; import { FINDINGS_TABLE_CELL_ADD_FILTER, FINDINGS_TABLE_CELL_ADD_NEGATED_FILTER, + FINDINGS_TABLE_EXPAND_COLUMN, } from '../test_subjects'; export type OnAddFilter = (key: T, value: Serializable, negate: boolean) => void; @@ -51,6 +52,7 @@ export const getExpandColumn = ({ width: '40px', actions: [ { + 'data-test-subj': FINDINGS_TABLE_EXPAND_COLUMN, name: i18n.translate('xpack.csp.expandColumnNameLabel', { defaultMessage: 'Expand' }), description: i18n.translate('xpack.csp.expandColumnDescriptionLabel', { defaultMessage: 'Expand', diff --git a/x-pack/plugins/cloud_security_posture/public/pages/findings/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/pages/findings/test_subjects.ts index d7a2e89fad9fb..daf1edd4f8550 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/findings/test_subjects.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/findings/test_subjects.ts @@ -5,6 +5,8 @@ * 2.0. */ +export const FINDINGS_FLYOUT = 'findings_flyout'; +export const FINDINGS_TABLE_EXPAND_COLUMN = 'findings_table_expand_column'; export const FINDINGS_TABLE = 'findings_table'; export const FINDINGS_BY_RESOURCE_TABLE_NO_FINDINGS_EMPTY_STATE = 'findings-by-resource-table-no-findings-empty-state'; From c2f639d1691d2dfe647db19d655beec7122330f0 Mon Sep 17 00:00:00 2001 From: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Date: Wed, 22 Feb 2023 12:29:31 +0400 Subject: [PATCH 210/210] [Enterprise Search] Fixes an index name inconsistency bug (#151720) This fixes a bug where sometimes (after creating a crawler index) we'd see some inconsistent index name usage with unexpected redirects. This was caused by the search index component not unloading properly. Removing the `prop` usage makes sure we're no longer relying on loading/unloading to set the index name. --- .../search_index/documents_logic.test.ts | 11 +++---- .../search_index/index_name_logic.ts | 32 +++++++++---------- .../search_index/index_view_logic.test.ts | 29 ++++++++++------- ...ipelines_json_configurations_logic.test.ts | 8 +++-- .../components/search_index/search_index.tsx | 1 + .../search_index/search_index_router.tsx | 6 ++-- 6 files changed, 46 insertions(+), 41 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/documents_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/documents_logic.test.ts index 28037f346c1ad..3dd9c0f41533c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/documents_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/documents_logic.test.ts @@ -41,12 +41,11 @@ describe('DocumentsLogic', () => { beforeEach(() => { jest.clearAllMocks(); - // due to connect, need to pass props down to each logic - const indexNameProps = { indexName: 'indexName' }; - mountIndexNameLogic(undefined, indexNameProps); - mountMappingsApiLogic(undefined, indexNameProps); - mountSearchDocumentsApiLogic(undefined, indexNameProps); - mount(undefined, indexNameProps); + const indexNameLogic = mountIndexNameLogic(); + mountMappingsApiLogic(); + mountSearchDocumentsApiLogic(); + mount(); + indexNameLogic.actions.setIndexName('indexName'); }); it('has expected default values', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_name_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_name_logic.ts index b18f1dc6a15b3..c2a94b21f47b2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_name_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_name_logic.ts @@ -17,20 +17,18 @@ export interface IndexNameActions { setIndexName: (indexName: string) => { indexName: string }; } -export const IndexNameLogic = kea>( - { - actions: { - setIndexName: (indexName) => ({ indexName }), - }, - path: ['enterprise_search', 'content', 'index_name'], - reducers: ({ props }) => ({ - indexName: [ - // Short-circuiting this to empty string is necessary to enable testing logics relying on this - props.indexName ?? '', - { - setIndexName: (_, { indexName }) => indexName, - }, - ], - }), - } -); +export const IndexNameLogic = kea>({ + actions: { + setIndexName: (indexName) => ({ indexName }), + }, + path: ['enterprise_search', 'content', 'index_name'], + reducers: () => ({ + indexName: [ + // Short-circuiting this to empty string is necessary to enable testing logics relying on this + '', + { + setIndexName: (_, { indexName }) => indexName, + }, + ], + }), +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts index 3ff4355636f89..5e4256f92a97b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/index_view_logic.test.ts @@ -31,21 +31,27 @@ import { IndexViewLogic } from './index_view_logic'; // And the timeoutId is non-deterministic. We use expect.object.containing throughout this test file const DEFAULT_VALUES = { connector: undefined, + connectorError: undefined, connectorId: null, error: null, - fetchIndexApiData: undefined, - fetchIndexApiStatus: Status.IDLE, + fetchIndexApiData: {}, + fetchIndexApiStatus: Status.SUCCESS, hasAdvancedFilteringFeature: false, hasBasicFilteringFeature: false, hasFilteringFeature: false, - index: undefined, - indexData: null, + htmlExtraction: undefined, + index: { + ingestionMethod: IngestionMethod.API, + ingestionStatus: IngestionStatus.CONNECTED, + lastUpdated: null, + }, + indexData: {}, indexName: 'index-name', ingestionMethod: IngestionMethod.API, ingestionStatus: IngestionStatus.CONNECTED, isCanceling: false, isConnectorIndex: false, - isInitialLoading: true, + isInitialLoading: false, isSyncing: false, isWaitingForSync: false, lastUpdated: null, @@ -68,7 +74,7 @@ const CONNECTOR_VALUES = { describe('IndexViewLogic', () => { const { mount: apiLogicMount } = new LogicMounter(StartSyncApiLogic); const { mount: fetchIndexMount } = new LogicMounter(CachedFetchIndexApiLogic); - const indexNameLogic = new LogicMounter(IndexNameLogic); + const { mount: indexNameMount } = new LogicMounter(IndexNameLogic); const { mount } = new LogicMounter(IndexViewLogic); const { flashSuccessToast } = mockFlashMessageHelpers; const { http } = mockHttpValues; @@ -76,16 +82,15 @@ describe('IndexViewLogic', () => { beforeEach(() => { jest.clearAllMocks(); jest.useRealTimers(); - indexNameLogic.mount({ indexName: 'index-name' }, { indexName: 'index-name' }); + http.get.mockReturnValueOnce(Promise.resolve({})); + const indexNameLogic = indexNameMount(); apiLogicMount(); - fetchIndexMount({ indexName: 'index-name' }, { indexName: 'index-name' }); - mount({ indexName: 'index-name' }, { indexName: 'index-name' }); + fetchIndexMount(); + mount(); + indexNameLogic.actions.setIndexName('index-name'); }); it('has expected default values', () => { - http.get.mockReturnValueOnce(Promise.resolve(() => ({}))); - mount({ indexName: 'index-name' }, { indexName: 'index-name' }); - expect(IndexViewLogic.values).toEqual(DEFAULT_VALUES); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.test.ts index 2359cf6e67390..6fbeffd30b714 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.test.ts @@ -10,6 +10,8 @@ import { nextTick } from '@kbn/test-jest-helpers'; import { FetchCustomPipelineApiLogic } from '../../../api/index/fetch_custom_pipeline_api_logic'; +import { IndexNameLogic } from '../index_name_logic'; + import { IndexPipelinesConfigurationsLogic, IndexPipelinesConfigurationsValues, @@ -28,13 +30,15 @@ const DEFAULT_VALUES: IndexPipelinesConfigurationsValues = { describe('IndexPipelinesConfigurationsLogic', () => { const { mount } = new LogicMounter(IndexPipelinesConfigurationsLogic); + const { mount: indexNameMount } = new LogicMounter(IndexNameLogic); const { mount: mountFetchCustomPipelineApiLogic } = new LogicMounter(FetchCustomPipelineApiLogic); beforeEach(async () => { jest.clearAllMocks(); - const indexNameProps = { indexName }; + const indexNameLogic = indexNameMount(); mountFetchCustomPipelineApiLogic(); - mount(undefined, indexNameProps); + mount(); + indexNameLogic.actions.setIndexName(indexName); }); it('has expected default values', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx index b09a0a9d8a96a..0643cce0f8173 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx @@ -97,6 +97,7 @@ export const SearchIndex: React.FC = () => { useEffect(() => { if ( isConnectorIndex(index) && + index.name === indexName && index.connector.is_native && index.connector.service_type === null ) { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index_router.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index_router.tsx index 1e85b3b3e2ba9..128fb3ea8fc6e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index_router.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index_router.tsx @@ -27,12 +27,10 @@ import { SearchIndex } from './search_index'; export const SearchIndexRouter: React.FC = () => { const indexName = decodeURIComponent(useParams<{ indexName: string }>().indexName); - - const indexNameLogic = IndexNameLogic({ indexName }); - const { setIndexName } = useActions(indexNameLogic); + const { setIndexName } = useActions(IndexNameLogic); const { stopFetchIndexPoll } = useActions(IndexViewLogic); useEffect(() => { - const unmountName = indexNameLogic.mount(); + const unmountName = IndexNameLogic.mount(); const unmountView = IndexViewLogic.mount(); return () => { stopFetchIndexPoll();
@@ -230,7 +234,7 @@ export const AwsCredentialsForm = ({ input, newPolicy, updatePolicy }: Props) => return ( <> - + /> {group.info} - - {DocsLink} - + diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx index bb1ed64a89123..f8f2c9dc41e97 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states.tsx @@ -61,8 +61,7 @@ const NotDeployed = () => {

} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx index 946d4cd2a53d4..be2f5872a2dac 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.tsx @@ -32,6 +32,7 @@ import { NoFindingsStates } from '../../components/no_findings_states'; import { SummarySection } from './dashboard_sections/summary_section'; import { BenchmarksSection } from './dashboard_sections/benchmarks_section'; import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '../../../common/constants'; +import { cspIntegrationDocsNavigation } from '../../common/navigation/constants'; const noDataOptions: Record< PosturePolicyTemplate, @@ -39,7 +40,7 @@ const noDataOptions: Record< > = { kspm: { testId: KSPM_INTEGRATION_NOT_INSTALLED_TEST_SUBJECT, - docsLink: 'https://ela.st/kspm', + docsLink: cspIntegrationDocsNavigation.kspm.overviewPath, actionTitle: i18n.translate( 'xpack.csp.cloudPosturePage.kspmIntegration.packageNotInstalled.buttonLabel', { defaultMessage: 'Add a KSPM integration' } @@ -47,10 +48,10 @@ const noDataOptions: Record< actionDescription: ( + + { pageTitle={ } diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx index 30d43b2a2156b..4ba52fd85cd6b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx @@ -55,7 +55,7 @@ describe('', () => { expect(getAllByTestId(DASHBOARD_TABLE_COLUMN_SCORE_TEST_ID)[2]).toHaveTextContent('95'); }); - it('toggles sort order when clicking Compliance Score', () => { + it('toggles sort order when clicking Posture Score', () => { const { getAllByTestId, getByTestId } = renderBenchmarks(mockDashboardDataCopy); userEvent.click(getByTestId(DASHBOARD_TABLE_HEADER_SCORE_TEST_ID)); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.tsx index adc112bfa57a5..44d2795337bf4 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.tsx @@ -139,8 +139,8 @@ export const BenchmarksSection = ({
diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx index 7a4b3b3d7fd95..c5e71e0090668 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx @@ -123,6 +123,13 @@ export const SummarySection = ({ ] ); + const chartTitle = i18n.translate('xpack.csp.dashboard.summarySection.postureScorePanelTitle', { + defaultMessage: 'Overall {type} Posture Score', + values: { + type: dashboardType === KSPM_POLICY_TEMPLATE ? 'Kubernetes' : 'Cloud', + }, + }); + return ( @@ -135,11 +142,7 @@ export const SummarySection = ({ - + > = sortable: true, name: ( ), render: (complianceScore: FindingsByResourcePage['compliance_score'], data) => ( diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap index d326bbca30f53..c67f8f9280136 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/__snapshots__/index.test.tsx.snap @@ -51,7 +51,7 @@ Object { "href": "securitySolutionUI/cloud_security_posture-dashboard", "id": "cloud_security_posture-dashboard", "isSelected": false, - "name": "Cloud Posture", + "name": "Cloud Security Posture", "onClick": [Function], }, Object { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 7d2525da3b5c5..471ffd12a8cf3 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -10056,7 +10056,6 @@ "xpack.csp.dashboard.risksTable.clusterCardViewAllButtonTitle": "Afficher tous les échecs des résultats pour ce cluster", "xpack.csp.dashboard.risksTable.complianceColumnLabel": "Conformité", "xpack.csp.dashboard.risksTable.viewAllButtonTitle": "Afficher tous les échecs des résultats", - "xpack.csp.dashboard.summarySection.cloudPostureScorePanelTitle": "Score du niveau du cloud", "xpack.csp.dashboard.summarySection.complianceByCisSectionPanelTitle": "Conformité par section CIS", "xpack.csp.dashboard.summarySection.counterCard.clustersEvaluatedDescription": "Clusters évalués", "xpack.csp.dashboard.summarySection.counterCard.failingFindingsDescription": "Résultats en échec", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 506ed41c152e2..09b2831430d3f 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -10045,7 +10045,6 @@ "xpack.csp.dashboard.risksTable.clusterCardViewAllButtonTitle": "このクラスターの失敗した調査結果をすべて表示", "xpack.csp.dashboard.risksTable.complianceColumnLabel": "コンプライアンス", "xpack.csp.dashboard.risksTable.viewAllButtonTitle": "すべてのフィールド調査結果を表示", - "xpack.csp.dashboard.summarySection.cloudPostureScorePanelTitle": "クラウド態勢スコア", "xpack.csp.dashboard.summarySection.complianceByCisSectionPanelTitle": "CISセクション別のコンプライアンス", "xpack.csp.dashboard.summarySection.counterCard.clustersEvaluatedDescription": "評価されたクラスター", "xpack.csp.dashboard.summarySection.counterCard.failingFindingsDescription": "失敗した調査結果", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 07be659950899..8a3a56e2ba941 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -10060,7 +10060,6 @@ "xpack.csp.dashboard.risksTable.clusterCardViewAllButtonTitle": "查看此集群的所有失败结果", "xpack.csp.dashboard.risksTable.complianceColumnLabel": "合规性", "xpack.csp.dashboard.risksTable.viewAllButtonTitle": "查看所有失败的结果", - "xpack.csp.dashboard.summarySection.cloudPostureScorePanelTitle": "云态势分数", "xpack.csp.dashboard.summarySection.complianceByCisSectionPanelTitle": "合规性(按 CIS 部分)", "xpack.csp.dashboard.summarySection.counterCard.clustersEvaluatedDescription": "集群已评估", "xpack.csp.dashboard.summarySection.counterCard.failingFindingsDescription": "失败的结果", From 1d1848e96c6d28f9ef46803825f996f9fa3b5430 Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 21 Feb 2023 13:10:38 -0700 Subject: [PATCH 198/210] [Controls] Discard control grow changes on cancel (#151522) Closes https://github.com/elastic/kibana/issues/151206 ## Summary This PR ensures that changes to the control group `grow` property (a) triggers the `Discard changes` warning modal and (b) when the modal is confirmed, the changes are indeed discarded. https://user-images.githubusercontent.com/8698078/220419614-4cac86d9-7fd3-40f5-8c39-ef5994b11947.mov
While this fixes the attached **bug**, it raises another issue on whether or not the behaviour of auto-applying changes to the control's width/grow properties is even desired - this can be tracked in https://github.com/elastic/kibana/issues/151767. ### Checklist - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../controls/public/control_group/editor/edit_control.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/controls/public/control_group/editor/edit_control.tsx b/src/plugins/controls/public/control_group/editor/edit_control.tsx index af55644425690..ac258f8ddc3e8 100644 --- a/src/plugins/controls/public/control_group/editor/edit_control.tsx +++ b/src/plugins/controls/public/control_group/editor/edit_control.tsx @@ -83,7 +83,8 @@ export const EditControlButton = ({ embeddableId }: { embeddableId: string }) => ...panel.explicitInput, ...inputToReturn, }) && - isEqual(latestPanelState.current.width, panel.width)) + isEqual(latestPanelState.current.width, panel.width) && + isEqual(latestPanelState.current.grow, panel.grow)) ) { reject(); ref.close(); @@ -97,6 +98,7 @@ export const EditControlButton = ({ embeddableId }: { embeddableId: string }) => }).then((confirmed) => { if (confirmed) { dispatch(setControlWidth({ width: panel.width, embeddableId })); + dispatch(setControlGrow({ grow: panel.grow, embeddableId })); reject(); ref.close(); } From 0faccf92c0df82de19cc3d128bac1420af1277a3 Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Tue, 21 Feb 2023 15:13:40 -0500 Subject: [PATCH 199/210] [RAM] Add featureIds as a property for find alerts (#151567) ## Summary Resolve: https://github.com/elastic/kibana/issues/150169 ### 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 --- .../server/alert_data_client/alerts_client.ts | 38 ++++++++++++------- .../rule_registry/server/routes/find.ts | 32 +++++++++++----- .../tests/basic/find_alerts.ts | 33 +++++++++++++++- 3 files changed, 78 insertions(+), 25 deletions(-) diff --git a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts index 2ffe3451ac568..a5389b013129f 100644 --- a/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts +++ b/x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts @@ -847,25 +847,35 @@ export class AlertsClient { } public async find({ - query, aggs, - _source, - track_total_hits: trackTotalHits, - size, + featureIds, index, - sort, + query, search_after: searchAfter, + size, + sort, + track_total_hits: trackTotalHits, + _source, }: { - query?: object | undefined; - aggs?: object | undefined; - index: string | undefined; - track_total_hits?: boolean | undefined; - _source?: string[] | undefined; - size?: number | undefined; - sort?: estypes.SortOptions[] | undefined; - search_after?: Array | undefined; + aggs?: object; + featureIds?: string[]; + index?: string; + query?: object; + search_after?: Array; + size?: number; + sort?: estypes.SortOptions[]; + track_total_hits?: boolean; + _source?: string[]; }) { try { + let indexToUse = index; + if (featureIds && !isEmpty(featureIds)) { + const tempIndexToUse = await this.getAuthorizedAlertsIndices(featureIds); + if (!isEmpty(tempIndexToUse)) { + indexToUse = (tempIndexToUse ?? []).join(); + } + } + // first search for the alert by id, then use the alert info to check if user has access to it const alertsSearchResponse = await this.singleSearchAfterAndAudit({ query, @@ -873,7 +883,7 @@ export class AlertsClient { _source, track_total_hits: trackTotalHits, size, - index, + index: indexToUse, operation: ReadOperations.Find, sort, lastSortIds: searchAfter, diff --git a/x-pack/plugins/rule_registry/server/routes/find.ts b/x-pack/plugins/rule_registry/server/routes/find.ts index b2ba28fdda5da..807ed7e22f29e 100644 --- a/x-pack/plugins/rule_registry/server/routes/find.ts +++ b/x-pack/plugins/rule_registry/server/routes/find.ts @@ -24,12 +24,13 @@ export const findAlertsByQueryRoute = (router: IRouter body: buildRouteValidation( t.exact( t.partial({ + aggs: t.record(t.string, t.intersection([metricsAggsSchemas, bucketAggsSchemas])), + feature_ids: t.union([t.array(t.string), t.undefined]), index: t.string, query: t.object, - aggs: t.record(t.string, t.intersection([metricsAggsSchemas, bucketAggsSchemas])), - sort: t.union([t.array(t.object), t.undefined]), search_after: t.union([t.array(t.number), t.array(t.string), t.undefined]), size: t.union([PositiveInteger, t.undefined]), + sort: t.union([t.array(t.object), t.undefined]), track_total_hits: t.union([t.boolean, t.undefined]), _source: t.union([t.array(t.string), t.undefined]), }) @@ -42,20 +43,31 @@ export const findAlertsByQueryRoute = (router: IRouter }, async (context, request, response) => { try { - // eslint-disable-next-line @typescript-eslint/naming-convention - const { query, aggs, _source, track_total_hits, size, index, sort, search_after } = - request.body; + const { + aggs, + feature_ids: featureIds, + index, + query, + // eslint-disable-next-line @typescript-eslint/naming-convention + search_after, + size, + sort, + // eslint-disable-next-line @typescript-eslint/naming-convention + track_total_hits, + _source, + } = request.body; const racContext = await context.rac; const alertsClient = await racContext.getAlertsClient(); const alerts = await alertsClient.find({ - query, aggs, - _source, - track_total_hits, - size, + featureIds, index, - sort: sort as SortOptions[], + query, search_after, + size, + sort: sort as SortOptions[], + track_total_hits, + _source, }); if (alerts == null) { return response.notFound({ diff --git a/x-pack/test/rule_registry/security_and_spaces/tests/basic/find_alerts.ts b/x-pack/test/rule_registry/security_and_spaces/tests/basic/find_alerts.ts index cbaf32cc51a86..694c27060f191 100644 --- a/x-pack/test/rule_registry/security_and_spaces/tests/basic/find_alerts.ts +++ b/x-pack/test/rule_registry/security_and_spaces/tests/basic/find_alerts.ts @@ -6,7 +6,10 @@ */ import expect from '@kbn/expect'; -import { ALERT_WORKFLOW_STATUS } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; +import { + ALERT_RULE_CONSUMER, + ALERT_WORKFLOW_STATUS, +} from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; import { superUser, globalRead, @@ -265,6 +268,34 @@ export default ({ getService }: FtrProviderContext) => { expect(found.body.aggregations.nbr_consumer.value).to.be.equal(2); }); + it(`${superUser.username} should handle 'siem' featureIds`, async () => { + const found = await supertestWithoutAuth + .post(`${getSpaceUrlPrefix(SPACE1)}${TEST_URL}/find`) + .auth(superUser.username, superUser.password) + .set('kbn-xsrf', 'true') + .send({ + feature_ids: ['siem'], + }); + + expect(found.body.hits.hits.every((hit: any) => hit[ALERT_RULE_CONSUMER] === 'siem')).equal( + true + ); + }); + + it(`${superUser.username} should handle 'apm' featureIds`, async () => { + const found = await supertestWithoutAuth + .post(`${getSpaceUrlPrefix(SPACE1)}${TEST_URL}/find`) + .auth(superUser.username, superUser.password) + .set('kbn-xsrf', 'true') + .send({ + feature_ids: ['apm'], + }); + + expect(found.body.hits.hits.every((hit: any) => hit[ALERT_RULE_CONSUMER] === 'apm')).equal( + true + ); + }); + function addTests({ space, authorizedUsers, unauthorizedUsers, alertId, index }: TestCase) { authorizedUsers.forEach(({ username, password }) => { it(`${username} should finds alerts which match query in ${space}/${index}`, async () => { From 52276050fdbaf06a265291df17be29efafe554c3 Mon Sep 17 00:00:00 2001 From: Dominique Clarke Date: Tue, 21 Feb 2023 15:23:45 -0500 Subject: [PATCH 200/210] [Synthetics] replace references to Uptime with Synthetics (#150947) ## Summary Resolves https://github.com/elastic/kibana/issues/150896 Replaces references to Uptime in the Elastic Synthetics integration with Synthetics On the integration edit page: [A-params-monitor-A-private-location-default---Elastic-Synthetics---Integrations---Elastic.webm](https://user-images.githubusercontent.com/11356435/218196665-c5970d05-5c46-4181-97c6-fd772773322c.webm) On the integrations asseets page: [Elastic-Synthetics---Integrations---Elastic.webm](https://user-images.githubusercontent.com/11356435/218196667-2dda5903-96c0-45ac-830e-d4df78675fe9.webm) On the integrations add page: [Add-integration---Elastic-Synthetics---Integrations---Elastic.webm](https://user-images.githubusercontent.com/11356435/218196669-d29775a9-13f8-4a0c-92ae-683cd9d36cb6.webm) ### Testing 1. Create a private location in Synthetics 2. Create a monitor with that private location in Synthetics 3. Navigate to `app/integrations/detail/synthetics/policies` 4. Click on the integration policy for that app. Ensure the edit button navigates to the Synthetics edit monitor view 5. Navigate to `app/integrations/detail/synthetics/assets`. 6. Ensure the View monitors in Synthetics button navigates to the Synthetics Overview page 7. Navigate to `app/integrations/detail/synthetics/overview`. Click Add Integration. 8. Ensure the popover references Synthetics and navigates to Synthetics. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../steps/step_define_package_policy.tsx | 22 ++++++---- x-pack/plugins/fleet/public/index.ts | 2 +- .../synthetics/private_locations.journey.ts | 33 ++++++++++++-- .../add_monitor_private_location.ts | 43 ++++++++++--------- .../synthetics/synthetics_app.tsx | 1 + .../overview/actions_popover.test.tsx | 2 +- .../overview/overview/actions_popover.tsx | 2 +- .../public/apps/synthetics/hooks/index.ts | 1 + .../hooks/use_edit_monitor_locator.ts | 17 +++++--- .../fleet_package/deprecate_notice_modal.tsx | 17 +++----- .../synthetics_custom_assets_extension.tsx | 4 +- ...nthetics_policy_edit_extension_wrapper.tsx | 24 ++++++----- 12 files changed, 102 insertions(+), 66 deletions(-) rename x-pack/plugins/synthetics/public/apps/synthetics/{components/monitors_page => }/hooks/use_edit_monitor_locator.ts (61%) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx index 07cebf31baebc..f21be9579357b 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx @@ -19,6 +19,7 @@ import { EuiFlexItem, EuiLink, EuiCallOut, + EuiSpacer, } from '@elastic/eui'; import styled from 'styled-components'; @@ -102,15 +103,18 @@ export const StepDefinePackagePolicy: React.FunctionComponent<{ return validationResults ? ( <> {isManaged && ( - - } - iconType="lock" - /> + <> + + } + iconType="lock" + /> + + )} { return new FleetPlugin(initializerContext); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts index 4c83642d053ec..8cb69f498b066 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/private_locations.journey.ts @@ -59,6 +59,7 @@ journey(`PrivateLocationsSettings`, async ({ page, params }) => { await syntheticsApp.navigateToSettings(false); await page.click('text=Private Locations'); }); + step('Click button:has-text("Create location")', async () => { await page.click('button:has-text("Create location")'); await page.click('[aria-label="Location name"]'); @@ -73,8 +74,10 @@ journey(`PrivateLocationsSettings`, async ({ page, params }) => { await page.press('[aria-label="Tags"]', 'Enter'); await page.click('button:has-text("Save")'); }); + let locationId: string; - step('Click text=AlertingPrivate LocationsData Retention', async () => { + + step('Private location settings is working as expected', async () => { await page.click('text=Private Locations'); await page.click('h1:has-text("Settings")'); @@ -92,9 +95,31 @@ journey(`PrivateLocationsSettings`, async ({ page, params }) => { }); }); - step('Click text=1', async () => { - await page.click('text=1'); - await page.click('text=Test private'); + step('Integration cannot be edited in Fleet', async () => { + await page.goto(`${params.kibanaUrl}/app/integrations/detail/synthetics/policies`); + await page.waitForSelector('h1:has-text("Elastic Synthetics")'); + + await page.click('text="test-monitor-Test private-default"'); + await page.waitForSelector('h1:has-text("Edit Elastic Synthetics integration")'); + await page.waitForSelector('text="This package policy is managed by the Synthetics app."'); + }); + + step('Integration edit button leads to correct Synthetics edit page', async () => { + await page.click('text="Edit in Synthetics"'); + + await page.waitForSelector('h1:has-text("Edit Monitor")'); + await page.waitForSelector('h2:has-text("Monitor details")'); + expect(await page.inputValue('[data-test-subj="syntheticsMonitorConfigName"]')).toBe( + 'test-monitor' + ); + }); + + step('Private location cannot be deleted when a monitor is assigned to it', async () => { + await page.click('[data-test-subj="settings-page-link"]'); + await page.click('h1:has-text("Settings")'); + await page.click('text=Private Locations'); + await page.waitForSelector('td:has-text("Monitors"):has-text("1")'); + await page.waitForSelector('td:has-text("Location nam"):has-text("Test private")'); await page.click('.euiTableCellContent__hoverItem .euiToolTipAnchor'); await page.click('button:has-text("Tags")'); await page.click('[aria-label="Tags"] >> text=Area51'); diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts index 9960ff1cc207a..45a47f8280f42 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts @@ -4,8 +4,9 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { v4 as uuidv4 } from 'uuid'; import { journey, step, expect, before } from '@elastic/synthetics'; -import { assertText, byTestId, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; +import { byTestId, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; import { recordVideo } from '@kbn/observability-plugin/e2e/record_video'; import { cleanTestMonitors } from '../../synthetics/services/add_monitor'; import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; @@ -17,6 +18,7 @@ journey('AddPrivateLocationMonitor', async ({ page, params }) => { const kibanaUrl = params.kibanaUrl; const uptime = monitorManagementPageProvider({ page, kibanaUrl }); + const monitorName = `Private location monitor ${uuidv4()}`; let monitorId: string; @@ -57,37 +59,36 @@ journey('AddPrivateLocationMonitor', async ({ page, params }) => { await uptime.waitForLoadingToFinish(); await page.click('input[name="name"]'); - await page.fill('input[name="name"]', 'Private location monitor'); - await page.click('label:has-text("Test private location Private")'); + await page.fill('input[name="name"]', monitorName); + await page.click('label:has-text("Test private location Private")', TIMEOUT_60_SEC); await page.selectOption('select', 'http'); await page.click(byTestId('syntheticsUrlField')); await page.fill(byTestId('syntheticsUrlField'), 'https://www.google.com'); await page.click('text=Save monitor'); - await page.click('text=Private location monitor'); + await page.click(`text=${monitorName}`); await page.click('[data-test-subj="superDatePickerApplyTimeButton"]'); }); - step('Click [placeholder="Find apps, content, and more."]', async () => { - await page.click('[placeholder="Find apps, content, and more."]'); - await page.fill('[placeholder="Find apps, content, and more."]', 'integ'); - await Promise.all([ - page.waitForNavigation(/* { url: '${kibanaUrl}/app/integrations/browse' }*/), - page.click('text=Integrations'), - ]); - await page.click('text=Display beta integrations'); - await page.click('text=Installed integrations'); - expect(page.url()).toBe(`${kibanaUrl}/app/integrations/installed`); - await page.click(`text=Elastic Synthetics`); - await page.click('text=Integration policies'); + + step('Integration cannot be edited in Fleet', async () => { + await page.goto(`${kibanaUrl}/app/integrations/detail/synthetics/policies`); + await page.waitForSelector('h1:has-text("Elastic Synthetics")'); + await page.click(`text=${monitorName}`); + await page.waitForSelector('h1:has-text("Edit Elastic Synthetics integration")'); + await page.waitForSelector('text="This package policy is managed by the Synthetics app."'); }); - step('Click text=Edit Elastic Synthetics integration', async () => { - await assertText({ page, text: 'This table contains 1 rows out of 1 rows; Page 1 of 1.' }); - await page.click('[data-test-subj="integrationNameLink"]'); + + step('Integration edit button leads to correct Synthetics edit page', async () => { const btn = await page.locator(byTestId('syntheticsEditMonitorButton')); expect(await btn.getAttribute('href')).toBe(`/app/synthetics/edit-monitor/${monitorId}`); - await btn.click(); - await page.click('text=Private location monitor'); + await page.click('text="Edit in Synthetics"'); + + await page.waitForSelector('h1:has-text("Edit Monitor")'); + await page.waitForSelector('h2:has-text("Monitor details")'); + expect(await page.inputValue('[data-test-subj="syntheticsMonitorConfigName"]')).toBe( + monitorName + ); }); }); diff --git a/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx b/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx index 86e15182a740e..db5aeb25356b9 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx @@ -92,6 +92,7 @@ export function syntheticsAppPageProvider({ page, kibanaUrl }: { page: Page; kib if (doLogin) { await this.loginToKibana(); } + await page.waitForSelector('h1:has-text("Settings")'); }, async navigateToAddMonitor() { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx index 655e971088d33..c438b9815caca 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { fireEvent } from '@testing-library/react'; import { render } from '../../../../utils/testing/rtl_helpers'; import { ActionsPopover } from './actions_popover'; -import * as editMonitorLocatorModule from '../../hooks/use_edit_monitor_locator'; +import * as editMonitorLocatorModule from '../../../../hooks/use_edit_monitor_locator'; import * as monitorDetailLocatorModule from '../../../../hooks/use_monitor_detail_locator'; import * as monitorEnableHandlerModule from '../../../../hooks/use_monitor_enable_handler'; import { FETCH_STATUS } from '@kbn/observability-plugin/public'; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx index 95605d5de0364..ad86c58dce782 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx @@ -39,7 +39,7 @@ import { useCanUpdatePrivateMonitor, } from '../../../../hooks'; import { setFlyoutConfig } from '../../../../state/overview/actions'; -import { useEditMonitorLocator } from '../../hooks/use_edit_monitor_locator'; +import { useEditMonitorLocator } from '../../../../hooks/use_edit_monitor_locator'; import { useMonitorDetailLocator } from '../../../../hooks/use_monitor_detail_locator'; import { NoPermissionsTooltip } from '../../../common/components/permissions'; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/index.ts b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/index.ts index 25730ab50f7a1..6f95e839dcda6 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/hooks/index.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/index.ts @@ -20,3 +20,4 @@ export * from './use_composite_image'; export * from './use_dimensions'; export * from './use_fleet_permissions'; export * from './use_monitor_enable_handler'; +export * from './use_edit_monitor_locator'; diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/hooks/use_edit_monitor_locator.ts b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_edit_monitor_locator.ts similarity index 61% rename from x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/hooks/use_edit_monitor_locator.ts rename to x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_edit_monitor_locator.ts index bb531a1dbe9be..034ca4ec6807a 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/hooks/use_edit_monitor_locator.ts +++ b/x-pack/plugins/synthetics/public/apps/synthetics/hooks/use_edit_monitor_locator.ts @@ -6,15 +6,20 @@ */ import { useEffect, useState } from 'react'; - +import { LocatorClient } from '@kbn/share-plugin/common/url_service/locators'; import { syntheticsEditMonitorLocatorID } from '@kbn/observability-plugin/common'; -import { useSyntheticsStartPlugins } from '../../../contexts'; +import { useSyntheticsStartPlugins } from '../contexts'; -export function useEditMonitorLocator({ configId }: { configId: string }) { +export function useEditMonitorLocator({ + configId, + locators, +}: { + configId: string; + locators?: LocatorClient; +}) { const [editUrl, setEditUrl] = useState(undefined); - const locator = useSyntheticsStartPlugins()?.share?.url.locators.get( - syntheticsEditMonitorLocatorID - ); + const syntheticsLocators = useSyntheticsStartPlugins()?.share?.url.locators; + const locator = (locators || syntheticsLocators)?.get(syntheticsEditMonitorLocatorID); useEffect(() => { async function generateUrl() { diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx index 0375aaf210540..f3a2013820b89 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/deprecate_notice_modal.tsx @@ -23,16 +23,16 @@ export const DeprecateNoticeModal = ({ onCancel }: { onCancel: () => void }) => } onCancel={onCancel} onConfirm={() => { - application?.navigateToApp('uptime', { path: '/manage-monitors' }); + application?.navigateToApp('synthetics'); }} - confirmButtonText={GO_MONITOR_MANAGEMENT_TEXT} + confirmButtonText={GO_SYNTHETICS_TEXT} cancelButtonText={GO_BACK_TEXT} >

@@ -82,7 +82,7 @@ export const DeprecateNoticeModal = ({ onCancel }: { onCancel: () => void }) => }; const HEADER_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.headerText', { - defaultMessage: 'Synthetic Monitoring is now available out of the box in Uptime', + defaultMessage: 'Synthetic Monitoring is now available out of the box in Synthetics', }); const GO_BACK_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.goBack', { @@ -93,9 +93,6 @@ const READ_DOCS_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.rea defaultMessage: 'read docs.', }); -const GO_MONITOR_MANAGEMENT_TEXT = i18n.translate( - 'xpack.synthetics.deprecateNoticeModal.goToMonitorManagement', - { - defaultMessage: 'Go to Monitor Management', - } -); +const GO_SYNTHETICS_TEXT = i18n.translate('xpack.synthetics.deprecateNoticeModal.goToSynthetics', { + defaultMessage: 'Go to Synthetics', +}); diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx index 64d1be74e71fd..6ff5046f0792c 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_custom_assets_extension.tsx @@ -24,9 +24,9 @@ export const SyntheticsCustomAssetsExtension: PackageAssetsComponent = () => { name: i18n.translate('xpack.synthetics.fleetIntegration.assets.name', { defaultMessage: 'Monitors', }), - url: http?.basePath.prepend(`/app/${PLUGIN.ID}`) ?? '', + url: http?.basePath.prepend(`/app/${PLUGIN.SYNTHETICS_PLUGIN_ID}`) ?? '', description: i18n.translate('xpack.synthetics.fleetIntegration.assets.description', { - defaultMessage: 'View monitors in Uptime', + defaultMessage: 'View monitors in Synthetics', }), }, ]; diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx index 3ad8cc305ad0d..59e45c569fffc 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/fleet_package/synthetics_policy_edit_extension_wrapper.tsx @@ -7,9 +7,13 @@ import React, { memo, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; -import { PackagePolicyEditExtensionComponentProps } from '@kbn/fleet-plugin/public'; import { EuiButton, EuiCallOut, EuiSpacer } from '@elastic/eui'; +import type { + FleetStartServices, + PackagePolicyEditExtensionComponentProps, +} from '@kbn/fleet-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { useEditMonitorLocator } from '../../../apps/synthetics/hooks'; import { PolicyConfig, MonitorFields } from './types'; import { ConfigKey, DataStream, TLSFields } from './types'; import { SyntheticsPolicyEditExtension } from './synthetics_policy_edit_extension'; @@ -99,19 +103,17 @@ export const SyntheticsPolicyEditExtensionWrapper = memo().services?.share?.url?.locators; + + const { config_id: configId } = defaultConfig; + + const url = useEditMonitorLocator({ configId, locators }); if (currentPolicy.is_managed) { return (

{EDIT_IN_SYNTHETICS_DESC}

- {/* TODO Add a link to exact monitor*/} - + {EDIT_IN_SYNTHETICS_LABEL}
@@ -149,12 +151,12 @@ export const SyntheticsPolicyEditExtensionWrapper = memo Date: Tue, 21 Feb 2023 14:24:20 -0700 Subject: [PATCH 201/210] [Dashboard] [Controls] Unskip options list failed tests (#151770) Closes https://github.com/elastic/kibana/issues/141285 ## Summary Unskips the failed `options_list_creation_and_editing.ts` tests since the underlying [bug](https://github.com/elastic/kibana/issues/141280) is no longer present as of `v8.5.0`. **Flaky Test Runner**
### 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 ### 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) --- .../controls/options_list/options_list_creation_and_editing.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts b/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts index 231994c2d1b8d..432359d44fe52 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list/options_list_creation_and_editing.ts @@ -71,10 +71,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - // Skip on cloud until issue is fixed - // Issue: https://github.com/elastic/kibana/issues/141280 describe('Options List Control creation and editing experience', function () { - this.tags(['skipCloudFailedTest']); it('can add a new options list control from a blank state', async () => { await dashboardControls.createControl({ controlType: OPTIONS_LIST_CONTROL, From baa7d50bab8d660bce9603f24bec1890a7ae875f Mon Sep 17 00:00:00 2001 From: Khristinin Nikita Date: Tue, 21 Feb 2023 23:05:47 +0100 Subject: [PATCH 202/210] Fix exception creation (#150883) ## Disable the "create" button, if not rules are selected for exception creation from the exception management page. https://user-images.githubusercontent.com/7609147/218105755-ce0716bd-4187-48b9-b2e0-c4c678505cb3.mov Close: https://github.com/elastic/kibana/issues/147067 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../add_edit_exception.cy.ts | 62 +++++++++++++++++++ .../all_exception_lists_read_only.cy.ts | 2 + .../cypress/screens/exceptions.ts | 8 +++ .../components/add_exception_flyout/index.tsx | 7 ++- .../exceptions/pages/shared_lists/index.tsx | 1 + 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/add_edit_exception.cy.ts diff --git a/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/add_edit_exception.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/add_edit_exception.cy.ts new file mode 100644 index 0000000000000..e5b559c402b59 --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/add_edit_exception.cy.ts @@ -0,0 +1,62 @@ +/* + * Copyright 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 { + esArchiverLoad, + esArchiverUnload, + esArchiverResetKibana, +} from '../../../tasks/es_archiver'; +import { getNewRule } from '../../../objects/rule'; +import { login, visitWithoutDateRange } from '../../../tasks/login'; +import { createCustomRule, deleteCustomRule } from '../../../tasks/api_calls/rules'; +import { editException, editExceptionFlyoutItemName } from '../../../tasks/exceptions'; +import { EXCEPTIONS_URL } from '../../../urls/navigation'; + +import { + CONFIRM_BTN, + MANAGE_EXCEPTION_CREATE_BUTTON_MENU, + MANAGE_EXCEPTION_CREATE_BUTTON_EXCEPTION, + RULE_ACTION_LINK_RULE_SWITCH, +} from '../../../screens/exceptions'; + +describe('Add/edit exception from exception management page', () => { + before(() => { + esArchiverResetKibana(); + esArchiverLoad('exceptions'); + login(); + visitWithoutDateRange(EXCEPTIONS_URL); + createCustomRule(getNewRule()); + }); + + after(() => { + esArchiverUnload('exceptions'); + }); + + afterEach(() => { + deleteCustomRule(); + }); + + describe('create exception item', () => { + it('create exception item', () => { + const FIELD_DIFFERENT_FROM_EXISTING_ITEM_FIELD = 'agent.name'; + cy.get(MANAGE_EXCEPTION_CREATE_BUTTON_MENU).click(); + cy.get(MANAGE_EXCEPTION_CREATE_BUTTON_EXCEPTION).click(); + + // edit exception item name + editExceptionFlyoutItemName('Name'); + editException(FIELD_DIFFERENT_FROM_EXISTING_ITEM_FIELD, 0, 0); + + // should select some rules + cy.get(CONFIRM_BTN).should('have.attr', 'disabled'); + + // select rule + cy.get(RULE_ACTION_LINK_RULE_SWITCH).find('button').click(); + + // should be available to submit + cy.get(CONFIRM_BTN).should('not.have.attr', 'disabled'); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/all_exception_lists_read_only.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/all_exception_lists_read_only.cy.ts index ae16df825d125..bc6279113c8e5 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/all_exception_lists_read_only.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/exceptions/exceptions_management_flow/all_exception_lists_read_only.cy.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { esArchiverResetKibana } from '../../../tasks/es_archiver'; import { cleanKibana } from '../../../tasks/common'; import { ROLES } from '../../../../common/test'; import { getExceptionList } from '../../../objects/exception'; @@ -22,6 +23,7 @@ const MISSING_PRIVILEGES_CALLOUT = 'missing-user-privileges'; describe('All exception lists - read only', () => { before(() => { + esArchiverResetKibana(); cleanKibana(); }); diff --git a/x-pack/plugins/security_solution/cypress/screens/exceptions.ts b/x-pack/plugins/security_solution/cypress/screens/exceptions.ts index 37e9bb01f8d7f..8b3e2776b0c3c 100644 --- a/x-pack/plugins/security_solution/cypress/screens/exceptions.ts +++ b/x-pack/plugins/security_solution/cypress/screens/exceptions.ts @@ -112,3 +112,11 @@ export const ADD_TO_RULE_OR_LIST_SECTION = '[data-test-subj="exceptionItemAddToR export const OS_SELECTION_SECTION = '[data-test-subj="osSelectionDropdown"]'; export const OS_INPUT = '[data-test-subj="osSelectionDropdown"] [data-test-subj="comboBoxInput"]'; + +export const MANAGE_EXCEPTION_CREATE_BUTTON_MENU = + '[data-test-subj="manageExceptionListCreateButton"]'; + +export const MANAGE_EXCEPTION_CREATE_BUTTON_EXCEPTION = + '[data-test-subj="manageExceptionListCreateExceptionButton"]'; + +export const RULE_ACTION_LINK_RULE_SWITCH = '[data-test-subj="ruleActionLinkRuleSwitch"]'; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx index b91367a019244..fae192a479de4 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_exceptions/components/add_exception_flyout/index.tsx @@ -428,7 +428,10 @@ export const AddExceptionFlyout = memo(function AddExceptionFlyout({ exceptionItems.every((item) => item.entries.length === 0) || itemConditionValidationErrorExists || expireErrorExists || - (addExceptionToRadioSelection === 'add_to_lists' && isEmpty(exceptionListsToAddTo)), + (addExceptionToRadioSelection === 'add_to_lists' && isEmpty(exceptionListsToAddTo)) || + (addExceptionToRadioSelection === 'select_rules_to_add_to' && + isEmpty(selectedRulesToAddTo) && + listType === ExceptionListTypeEnum.RULE_DEFAULT), [ isSubmitting, isClosingAlerts, @@ -439,6 +442,8 @@ export const AddExceptionFlyout = memo(function AddExceptionFlyout({ addExceptionToRadioSelection, exceptionListsToAddTo, expireErrorExists, + selectedRulesToAddTo, + listType, ] ); diff --git a/x-pack/plugins/security_solution/public/exceptions/pages/shared_lists/index.tsx b/x-pack/plugins/security_solution/public/exceptions/pages/shared_lists/index.tsx index 57dc0249979d3..d87bbe252d926 100644 --- a/x-pack/plugins/security_solution/public/exceptions/pages/shared_lists/index.tsx +++ b/x-pack/plugins/security_solution/public/exceptions/pages/shared_lists/index.tsx @@ -454,6 +454,7 @@ export const SharedLists = React.memo(() => { , { onCloseCreatePopover(); setDisplayAddExceptionItemFlyout(true); From 00c81a41aa9bc57ba0d30b3680300165979eee76 Mon Sep 17 00:00:00 2001 From: Marshall Main <55718608+marshallmain@users.noreply.github.com> Date: Tue, 21 Feb 2023 14:36:15 -0800 Subject: [PATCH 203/210] [Security Solution][Alerts] Remove rules new feature tour for 8.7 (#151528) ## Summary Removes [tour](https://github.com/elastic/kibana/pull/145775) that was added for 8.6. --- .../pages/rule_management/index.tsx | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx index a26517e447d7a..95e0857874423 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/pages/rule_management/index.tsx @@ -40,7 +40,6 @@ import { AllRules } from '../../components/rules_table'; import { RulesTableContextProvider } from '../../components/rules_table/rules_table/rules_table_context'; import * as i18n from '../../../../detections/pages/detection_engine/rules/translations'; -import { RulesPageTourComponent } from '../../components/rules_table/alternative_tour/tour'; import { useInvalidateFetchRuleManagementFiltersQuery } from '../../../rule_management/api/hooks/use_fetch_rule_management_filters_query'; const RulesPageComponent: React.FC = () => { @@ -142,19 +141,17 @@ const RulesPageComponent: React.FC = () => { {i18n.IMPORT_RULE} - - - - {i18n.ADD_NEW_RULE} - - - + + + {i18n.ADD_NEW_RULE} + + {(prePackagedRuleStatus === 'ruleNeedUpdate' || From 64a5b97542bcc4c6d398f98a3769d79d9a89f5df Mon Sep 17 00:00:00 2001 From: christineweng <18648970+christineweng@users.noreply.github.com> Date: Tue, 21 Feb 2023 16:59:22 -0600 Subject: [PATCH 204/210] [Security Solution] adding cypress test for histogram actions (#151086) ## Summary Cypress tests to replace: **Alert page** - [x] C77187 | Verify that user is able to filter out, add filter the alerts from Detection trend Note that in https://docs.google.com/spreadsheets/d/1-240E5E5QhKyTd0C0b4rSQgto1KBmImt/edit#gid=1306255595, `show top n` is mentioned as part of the hover actions, however, top n is not present in histogram legends in previous release v8.6 on siem.dev ![image](https://user-images.githubusercontent.com/18648970/218589196-c9a542d6-c993-49da-925b-55070e8e2b44.png) --- .../e2e/detection_alerts/alerts_charts.cy.ts | 62 +++++++++++++++++++ .../cypress/screens/alerts.ts | 5 ++ .../cypress/screens/search_bar.ts | 2 + .../security_solution/cypress/tasks/alerts.ts | 5 ++ 4 files changed, 74 insertions(+) create mode 100644 x-pack/plugins/security_solution/cypress/e2e/detection_alerts/alerts_charts.cy.ts diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/alerts_charts.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/alerts_charts.cy.ts new file mode 100644 index 0000000000000..6080e1cd100af --- /dev/null +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_alerts/alerts_charts.cy.ts @@ -0,0 +1,62 @@ +/* + * Copyright 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 { getNewRule } from '../../objects/rule'; +import { ALERTS_HISTOGRAM_LEGEND, ALERTS_COUNT } from '../../screens/alerts'; +import { selectAlertsHistogram } from '../../tasks/alerts'; +import { createCustomRuleEnabled } from '../../tasks/api_calls/rules'; +import { cleanKibana } from '../../tasks/common'; +import { login, visit } from '../../tasks/login'; +import { ALERTS_URL } from '../../urls/navigation'; +import { + GLOBAL_SEARCH_BAR_FILTER_ITEM, + GLOBAL_SEARCH_BAR_FILTER_ITEM_DELETE, +} from '../../screens/search_bar'; +import { HOVER_ACTIONS, TIMELINE_DATA_PROVIDERS_CONTAINER } from '../../screens/timeline'; +import { closeTimelineUsingCloseButton } from '../../tasks/security_main'; +import { openActiveTimeline } from '../../tasks/timeline'; + +describe('Histogram legend hover actions', { testIsolation: false }, () => { + before(() => { + cleanKibana(); + login(); + createCustomRuleEnabled(getNewRule(), 'new custom rule'); + visit(ALERTS_URL); + selectAlertsHistogram(); + }); + + it('Filter in/out should add a filter to KQL bar', function () { + const expectedNumberOfAlerts = 2; + cy.get(ALERTS_HISTOGRAM_LEGEND).trigger('mouseover'); + cy.get(HOVER_ACTIONS.FILTER_FOR).click(); + cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should( + 'have.text', + `kibana.alert.rule.name: ${getNewRule().name}` + ); + cy.get(ALERTS_COUNT).should('have.text', `${expectedNumberOfAlerts} alerts`); + + cy.get(ALERTS_HISTOGRAM_LEGEND).trigger('mouseover'); + cy.get(HOVER_ACTIONS.FILTER_OUT).click(); + cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should( + 'have.text', + `NOT kibana.alert.rule.name: ${getNewRule().name}` + ); + cy.get(ALERTS_COUNT).should('not.exist'); + + cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM_DELETE).trigger('click'); + cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should('not.exist'); + }); + + it('Add To Timeline', function () { + cy.get(ALERTS_HISTOGRAM_LEGEND).trigger('mouseover'); + cy.get(HOVER_ACTIONS.ADD_TO_TIMELINE).click(); + openActiveTimeline(); + cy.get(TIMELINE_DATA_PROVIDERS_CONTAINER).should('be.visible'); + cy.get(TIMELINE_DATA_PROVIDERS_CONTAINER).should('contain.text', getNewRule().name); + closeTimelineUsingCloseButton(); + }); +}); diff --git a/x-pack/plugins/security_solution/cypress/screens/alerts.ts b/x-pack/plugins/security_solution/cypress/screens/alerts.ts index eb2cb28d80844..cefc14feda67d 100644 --- a/x-pack/plugins/security_solution/cypress/screens/alerts.ts +++ b/x-pack/plugins/security_solution/cypress/screens/alerts.ts @@ -152,3 +152,8 @@ export const ACTIONS_EXPAND_BUTTON = '[data-test-subj="euiDataGridCellExpandButt export const SHOW_TOP_N_HEADER = '[data-test-subj="topN-container"] [data-test-subj="header-section-title"]'; + +export const ALERTS_HISTOGRAM_LEGEND = + '[data-test-subj="alerts-histogram-panel"] [data-test-subj="withHoverActionsButton"]'; + +export const SELECT_HISTOGRAM = '[data-test-subj="chart-select-trend"]'; diff --git a/x-pack/plugins/security_solution/cypress/screens/search_bar.ts b/x-pack/plugins/security_solution/cypress/screens/search_bar.ts index a9e69625c2da9..6c57767d7709f 100644 --- a/x-pack/plugins/security_solution/cypress/screens/search_bar.ts +++ b/x-pack/plugins/security_solution/cypress/screens/search_bar.ts @@ -31,6 +31,8 @@ export const GLOBAL_SEARCH_BAR_FILTER_ITEM = '#popoverFor_filter0'; export const GLOBAL_SEARCH_BAR_FILTER_ITEM_AT = (value: number) => `#popoverFor_filter${value}`; +export const GLOBAL_SEARCH_BAR_FILTER_ITEM_DELETE = '#popoverFor_filter0 button[title^="Delete"]'; + export const GLOBAL_SEARCH_BAR_PINNED_FILTER = '.globalFilterItem-isPinned'; export const GLOBAL_KQL_INPUT = diff --git a/x-pack/plugins/security_solution/cypress/tasks/alerts.ts b/x-pack/plugins/security_solution/cypress/tasks/alerts.ts index a17d4bb004671..b8a572d1f63ee 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/alerts.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/alerts.ts @@ -36,6 +36,7 @@ import { CELL_FILTER_IN_BUTTON, CELL_SHOW_TOP_FIELD_BUTTON, ACTIONS_EXPAND_BUTTON, + SELECT_HISTOGRAM, } from '../screens/alerts'; import { LOADING_INDICATOR, REFRESH_BUTTON } from '../screens/security_header'; import { TIMELINE_COLUMN_SPINNER } from '../screens/timeline'; @@ -260,6 +261,10 @@ export const selectCountTable = () => { cy.get(SELECT_AGGREGATION_CHART).click({ force: true }); }; +export const selectAlertsHistogram = () => { + cy.get(SELECT_HISTOGRAM).click({ force: true }); +}; + export const clearGroupByTopInput = () => { cy.get(GROUP_BY_TOP_INPUT).focus(); cy.get(GROUP_BY_TOP_INPUT).type('{backspace}'); From 386ec3723721fc6dad9135663fb081a262e7ffe6 Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Tue, 21 Feb 2023 16:36:03 -0700 Subject: [PATCH 205/210] [Security Solution] Create rule from timeline using EQL query (#151091) --- .../utils/use_set_field_value_cb.test.ts | 50 ++++++++ .../common/utils/use_set_field_value_cb.ts | 42 +++++++ .../components/rules/eql_query_bar/footer.tsx | 4 + .../rules/step_define_rule/index.test.tsx | 102 ++++++++++++++++- .../rules/step_define_rule/index.tsx | 46 +++++--- .../rules/use_rule_from_timeline.test.ts | 42 +++++++ .../rules/use_rule_from_timeline.tsx | 100 +++++++++------- .../components/open_timeline/index.test.tsx | 107 +++++++++++++++--- .../components/open_timeline/index.tsx | 15 ++- .../open_timeline/open_timeline.tsx | 5 + .../timelines_table/actions_columns.tsx | 29 ++++- .../open_timeline/timelines_table/index.tsx | 7 ++ .../components/open_timeline/translations.ts | 9 +- .../components/open_timeline/types.ts | 7 +- .../public/timelines/containers/all/index.tsx | 2 + .../public/timelines/containers/helpers.ts | 16 ++- 16 files changed, 509 insertions(+), 74 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.test.ts create mode 100644 x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.ts diff --git a/x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.test.ts b/x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.test.ts new file mode 100644 index 0000000000000..5879e2a256cce --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.test.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 { act, renderHook } from '@testing-library/react-hooks'; +import { useSetFieldValueWithCallback } from './use_set_field_value_cb'; + +const initialValue = 'initial value'; +const newValue = 'new value'; +const callback = jest.fn(); +const initialProps = { field: 'theField', setFieldValue: () => {}, value: initialValue }; + +describe('set field value callback', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('invokes the callback after value is set', () => { + const { result, rerender } = renderHook((props) => useSetFieldValueWithCallback(props), { + initialProps, + }); + act(() => { + result.current(newValue, callback); + }); + rerender({ ...initialProps, value: newValue }); + expect(callback).toHaveBeenCalled(); + }); + it('invokes the callback after value is set to equal value', () => { + const { result, rerender } = renderHook((props) => useSetFieldValueWithCallback(props), { + initialProps, + }); + act(() => { + result.current(initialValue, callback); + }); + rerender(); + expect(callback).toHaveBeenCalled(); + }); + it('does not invoke the callback if value does not update', () => { + const { result, rerender } = renderHook((props) => useSetFieldValueWithCallback(props), { + initialProps, + }); + act(() => { + result.current(newValue, callback); + }); + rerender(); + expect(callback).not.toHaveBeenCalled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.ts b/x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.ts new file mode 100644 index 0000000000000..8f57dd78d8a53 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/utils/use_set_field_value_cb.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FormHook } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; +import { useCallback, useEffect, useRef, useState } from 'react'; + +export const useSetFieldValueWithCallback = ({ + field, + setFieldValue, + value, +}: { + field: string; + value: unknown; + setFieldValue: FormHook['setFieldValue']; +}) => { + const isWaitingRef = useRef(false); + const valueRef = useRef(); + const [callback, setCallback] = useState<() => void>(() => null); + + useEffect(() => { + if (isWaitingRef.current && value === valueRef.current) { + isWaitingRef.current = false; + valueRef.current = undefined; + callback(); + } + }, [value, callback]); + + return useCallback( + (v, cb) => { + setFieldValue(field, v); + + setCallback(() => cb); + valueRef.current = v; + isWaitingRef.current = true; + }, + [field, setFieldValue] + ); +}; diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/eql_query_bar/footer.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/eql_query_bar/footer.tsx index 3670a78bdb766..c9e74b6a9acf5 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/eql_query_bar/footer.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/eql_query_bar/footer.tsx @@ -198,6 +198,7 @@ export const EqlQueryBarFooter: FC = ({
{!isSizeOptionDisabled && ( @@ -210,6 +211,7 @@ export const EqlQueryBarFooter: FC = ({ )} @@ -221,6 +223,7 @@ export const EqlQueryBarFooter: FC = ({ /> @@ -232,6 +235,7 @@ export const EqlQueryBarFooter: FC = ({ /> diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.test.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.test.tsx index 524cd562dd1a7..61f40e9f0b1a9 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.test.tsx @@ -11,7 +11,16 @@ import { shallow } from 'enzyme'; import { StepDefineRule, aggregatableFields } from '.'; import { stepDefineDefaultValue } from '../../../pages/detection_engine/rules/utils'; import { mockBrowserFields } from '../../../../common/containers/source/mock'; - +import { useRuleFromTimeline } from '../../../containers/detection_engine/rules/use_rule_from_timeline'; +import { fireEvent, render, within } from '@testing-library/react'; +import { TestProviders } from '../../../../common/mock'; +jest.mock('../../../../common/components/query_bar', () => { + return { + QueryBar: jest.fn(({ filterQuery }) => { + return
{`${filterQuery.query} ${filterQuery.language}`}
; + }), + }; +}); jest.mock('../../../../common/lib/kibana'); jest.mock('../../../../common/hooks/use_selector', () => { const actual = jest.requireActual('../../../../common/hooks/use_selector'); @@ -61,6 +70,8 @@ jest.mock('react-redux', () => { }; }); +jest.mock('../../../containers/detection_engine/rules/use_rule_from_timeline'); + test('aggregatableFields', function () { expect( aggregatableFields([ @@ -108,7 +119,13 @@ test('aggregatableFields with aggregatable: true', function () { ]); }); +const mockUseRuleFromTimeline = useRuleFromTimeline as jest.Mock; +const onOpenTimeline = jest.fn(); describe('StepDefineRule', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockUseRuleFromTimeline.mockReturnValue({ onOpenTimeline, loading: false }); + }); it('renders correctly', () => { const wrapper = shallow( { expect(wrapper.find('Form[data-test-subj="stepDefineRule"]')).toHaveLength(1); }); + + const kqlQuery = { + index: ['.alerts-security.alerts-default', 'logs-*', 'packetbeat-*'], + queryBar: { + filters: [], + query: { + query: 'host.name:*', + language: 'kuery', + }, + saved_id: null, + }, + }; + + const eqlQuery = { + index: ['.alerts-security.alerts-default', 'logs-*', 'packetbeat-*'], + queryBar: { + filters: [], + query: { + query: 'process where true', + language: 'eql', + }, + saved_id: null, + }, + eqlOptions: { + eventCategoryField: 'cool.field', + tiebreakerField: 'another.field', + timestampField: 'cool.@timestamp', + query: 'process where true', + size: 77, + }, + }; + it('handleSetRuleFromTimeline correctly updates the query', () => { + mockUseRuleFromTimeline.mockImplementation((handleSetRuleFromTimeline) => { + handleSetRuleFromTimeline(kqlQuery); + return { onOpenTimeline, loading: false }; + }); + const { getAllByTestId } = render( + + + + ); + expect(getAllByTestId('query-bar')[0].textContent).toEqual( + `${kqlQuery.queryBar.query.query} ${kqlQuery.queryBar.query.language}` + ); + }); + it('handleSetRuleFromTimeline correctly updates eql query', async () => { + mockUseRuleFromTimeline + .mockImplementationOnce(() => ({ onOpenTimeline, loading: false })) + .mockImplementationOnce((handleSetRuleFromTimeline) => { + handleSetRuleFromTimeline(eqlQuery); + return { onOpenTimeline, loading: false }; + }); + const { getByTestId } = render( + + + + ); + expect(getByTestId(`eqlQueryBarTextInput`).textContent).toEqual(eqlQuery.queryBar.query.query); + fireEvent.click(getByTestId(`eql-settings-trigger`)); + expect( + within(getByTestId(`eql-event-category-field`)).queryByText( + eqlQuery.eqlOptions.eventCategoryField + ) + ).toBeInTheDocument(); + expect( + within(getByTestId(`eql-tiebreaker-field`)).queryByText(eqlQuery.eqlOptions.tiebreakerField) + ).toBeInTheDocument(); + expect( + within(getByTestId(`eql-timestamp-field`)).queryByText(eqlQuery.eqlOptions.timestampField) + ).toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.tsx index 3bf4aea61d656..39f04d8e54e62 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/step_define_rule/index.tsx @@ -29,6 +29,7 @@ import usePrevious from 'react-use/lib/usePrevious'; import type { SavedQuery } from '@kbn/data-plugin/public'; import type { DataViewBase } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; +import { useSetFieldValueWithCallback } from '../../../../common/utils/use_set_field_value_cb'; import { useRuleFromTimeline } from '../../../containers/detection_engine/rules/use_rule_from_timeline'; import { isMlRule } from '../../../../../common/machine_learning/helpers'; import { hasMlAdminPermissions } from '../../../../../common/machine_learning/has_ml_admin_permissions'; @@ -189,16 +190,6 @@ const StepDefineRuleComponent: FC = ({ }, }); - const handleSetRuleFromTimeline = useCallback( - ({ index: timelineIndex, queryBar: timelineQueryBar }) => { - setFieldValue('index', timelineIndex); - setFieldValue('queryBar', timelineQueryBar); - }, - [setFieldValue] - ); - const { onOpenTimeline, loading: timelineQueryLoading } = - useRuleFromTimeline(handleSetRuleFromTimeline); - const { index: formIndex, ruleType: formRuleType, @@ -223,6 +214,38 @@ const StepDefineRuleComponent: FC = ({ const machineLearningJobId = formMachineLearningJobId ?? initialState.machineLearningJobId; const queryBar = formQuery ?? initialState.queryBar; + const setRuleTypeCallback = useSetFieldValueWithCallback({ + field: 'ruleType', + value: ruleType, + setFieldValue, + }); + + const [optionsSelected, setOptionsSelected] = useState( + initialState.eqlOptions || {} + ); + + const handleSetRuleFromTimeline = useCallback( + ({ index: timelineIndex, queryBar: timelineQueryBar, eqlOptions }) => { + const setQuery = () => { + setFieldValue('index', timelineIndex); + setFieldValue('queryBar', timelineQueryBar); + }; + if (timelineQueryBar.query.language === 'eql') { + setRuleTypeCallback('eql', setQuery); + setOptionsSelected((prevOptions) => ({ + ...prevOptions, + ...(eqlOptions != null ? eqlOptions : {}), + })); + } else { + setQuery(); + } + }, + [setFieldValue, setRuleTypeCallback] + ); + + const { onOpenTimeline, loading: timelineQueryLoading } = + useRuleFromTimeline(handleSetRuleFromTimeline); + const [isPreviewValid, setIsPreviewValid] = useState(false); useEffect(() => { if (onPreviewDisabledStateChange) { @@ -263,9 +286,6 @@ const StepDefineRuleComponent: FC = ({ // if 'index' is selected, use these browser fields // otherwise use the dataview browserfields const previousRuleType = usePrevious(ruleType); - const [optionsSelected, setOptionsSelected] = useState( - initialState.eqlOptions || {} - ); const [isIndexPatternLoading, { browserFields, indexPatterns: initIndexPattern }] = useFetchIndex( index, false diff --git a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.test.ts b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.test.ts index 475563a0518b0..7940084dca3df 100644 --- a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.test.ts +++ b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.test.ts @@ -177,6 +177,9 @@ describe('useRuleFromTimeline', () => { }); it('when from timeline data view id === selected data view id and browser fields is not empty, set rule data to match from timeline query', async () => { + (useGetInitialUrlParamValue as jest.Mock) + .mockReturnValueOnce(() => timelineId) + .mockReturnValue(() => undefined); const { result, waitForNextUpdate } = renderHook(() => useRuleFromTimeline(setRuleQuery)); expect(result.current.loading).toEqual(true); await waitForNextUpdate(); @@ -222,6 +225,45 @@ describe('useRuleFromTimeline', () => { }); }); + it('when timeline has eql, set rule data to match from eql query', async () => { + const eqlOptions = { + eventCategoryField: 'category', + tiebreakerField: '', + timestampField: '@timestamp', + query: 'find it EQL', + size: 100, + }; + const eqlTimeline = { + data: { + timeline: { + ...mockTimeline, + id: timelineId, + savedObjectId: timelineId, + indexNames: ['awesome-*'], + dataViewId: 'custom-data-view-id', + eqlOptions, + }, + }, + }; + (resolveTimeline as jest.Mock).mockResolvedValue(eqlTimeline); + (useGetInitialUrlParamValue as jest.Mock) + .mockReturnValueOnce(() => undefined) + .mockReturnValue(() => timelineId); + const { result, waitForNextUpdate } = renderHook(() => useRuleFromTimeline(setRuleQuery)); + expect(result.current.loading).toEqual(true); + await waitForNextUpdate(); + expect(result.current.loading).toEqual(false); + expect(setRuleQuery).toHaveBeenCalledWith({ + index: ['awesome-*'], + queryBar: { + filters: [], + query: { query: 'find it EQL', language: 'eql' }, + saved_id: null, + }, + eqlOptions, + }); + }); + it('Sets rule from timeline query via callback', async () => { (useGetInitialUrlParamValue as jest.Mock).mockReturnValue(() => undefined); const { result } = renderHook(() => useRuleFromTimeline(setRuleQuery)); diff --git a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx index f9793020b6f20..4818a8c8f1acd 100644 --- a/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx +++ b/x-pack/plugins/security_solution/public/detections/containers/detection_engine/rules/use_rule_from_timeline.tsx @@ -6,9 +6,10 @@ */ import { isEmpty } from 'lodash/fp'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useDispatch } from 'react-redux'; import { i18n } from '@kbn/i18n'; +import type { EqlOptionsSelected } from '@kbn/timelines-plugin/common'; import { convertKueryToElasticSearchQuery } from '../../../../common/lib/kuery'; import { updateIsLoading } from '../../../../timelines/store/timeline/actions'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; @@ -26,34 +27,23 @@ import { getDataProviderFilter } from '../../../../timelines/components/timeline import { SourcererScopeName } from '../../../../common/store/sourcerer/model'; export const RULE_FROM_TIMELINE_URL_PARAM = 'createRuleFromTimeline'; +export const RULE_FROM_EQL_URL_PARAM = 'createRuleFromEql'; export interface RuleFromTimeline { loading: boolean; onOpenTimeline: (timeline: TimelineModel) => void; } -export const initialState = { - index: [], - queryBar: { - query: { query: '', language: 'kuery' }, - filters: [], - saved_id: null, - }, -}; - type SetRuleQuery = ({ index, queryBar, + eqlOptions, }: { index: string[]; queryBar: FieldValueQueryBar; + eqlOptions?: EqlOptionsSelected; }) => void; -/** - * When returned property updated === true, - * the index and queryBar properties have been updated from timeline data - * queried either from id in the url param or by passing a timeline to returned callback onOpenTimeline - */ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimeline => { const dispatch = useDispatch(); const { addError } = useAppToasts(); @@ -61,6 +51,8 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin SourcererScopeName.timeline ); + const isEql = useRef(false); + // selectedTimeline = timeline to set rule from const [selectedTimeline, setRuleFromTimeline] = useState(null); @@ -103,36 +95,54 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin ); // end browser field management + const getInitialUrlParamValue = useGetInitialUrlParamValue(RULE_FROM_TIMELINE_URL_PARAM); + const timelineIdFromUrl = useMemo(getInitialUrlParamValue, [getInitialUrlParamValue]); + const getInitialUrlParamValueEql = useGetInitialUrlParamValue(RULE_FROM_EQL_URL_PARAM); + const timelineIdFromUrlEql = useMemo(getInitialUrlParamValueEql, [getInitialUrlParamValueEql]); + // start set rule const handleSetRuleFromTimeline = useCallback(() => { if (selectedTimeline == null || selectedDataViewBrowserFields == null) return; - const newQuery = { - query: selectedTimeline.kqlQuery.filterQuery?.kuery?.expression ?? '', - language: selectedTimeline.kqlQuery.filterQuery?.kuery?.kind ?? 'kuery', - }; - const newFilters = selectedTimeline.filters ?? []; try { - const dataProvidersDsl = - selectedTimeline.dataProviders != null && selectedTimeline.dataProviders.length > 0 - ? convertKueryToElasticSearchQuery( - buildGlobalQuery(selectedTimeline.dataProviders, selectedDataViewBrowserFields), - { fields: [], title: selectedPatterns.join(',') } - ) - : ''; + const queryRuleFromTimeline = () => ({ + dataProviders: + selectedTimeline.dataProviders != null && selectedTimeline.dataProviders.length > 0 + ? convertKueryToElasticSearchQuery( + buildGlobalQuery(selectedTimeline.dataProviders, selectedDataViewBrowserFields), + { fields: [], title: selectedPatterns.join(',') } + ) + : '', + query: { + query: selectedTimeline.kqlQuery.filterQuery?.kuery?.expression ?? '', + language: selectedTimeline.kqlQuery.filterQuery?.kuery?.kind ?? 'kuery', + }, + filters: selectedTimeline.filters ?? [], + eqlOptions: {}, + }); + const eqlRuleFromTimeline = () => ({ + dataProviders: '', + query: { + query: selectedTimeline.eqlOptions.query ?? '', + language: 'eql', + }, + filters: [], + eqlOptions: { eqlOptions: selectedTimeline.eqlOptions }, + }); + const data = isEql.current ? eqlRuleFromTimeline() : queryRuleFromTimeline(); setLoading(false); - setRuleQuery({ index: selectedPatterns, queryBar: { filters: - dataProvidersDsl !== '' - ? [...newFilters, getDataProviderFilter(dataProvidersDsl)] - : newFilters, - query: newQuery, + data.dataProviders !== '' + ? [...data.filters, getDataProviderFilter(data.dataProviders)] + : data.filters, + query: data.query, saved_id: null, }, + ...data.eqlOptions, }); } catch (error) { setLoading(false); @@ -149,6 +159,8 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin }); } + // reset and default to query since this is the only query type the user can set after url has been initialized + isEql.current = false; // reset timeline data view once complete if (originalDataView.dataViewId !== dataViewId) { dispatch( @@ -179,10 +191,6 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin }, [handleSetRuleFromTimeline, selectedDataViewBrowserFields]); // end set rule - // start handle set rule from timeline id - const getInitialUrlParamValue = useGetInitialUrlParamValue(RULE_FROM_TIMELINE_URL_PARAM); - const timelineIdFromUrl = useMemo(getInitialUrlParamValue, [getInitialUrlParamValue]); - const getTimelineById = useCallback( (timelineId: string) => { if (selectedTimeline == null || timelineId !== selectedTimeline.id) { @@ -206,12 +214,22 @@ export const useRuleFromTimeline = (setRuleQuery: SetRuleQuery): RuleFromTimelin const [urlStateInitialized, setUrlStateInitialized] = useState(false); useEffect(() => { - if (timelineIdFromUrl != null && !urlStateInitialized) { - setUrlStateInitialized(true); - getTimelineById(timelineIdFromUrl); - setLoading(true); + if (!urlStateInitialized) { + let id: string | null = null; + if (timelineIdFromUrl != null) { + id = timelineIdFromUrl; + } else if (timelineIdFromUrlEql != null) { + id = timelineIdFromUrlEql; + isEql.current = true; + } + + if (id != null) { + setUrlStateInitialized(true); + getTimelineById(id); + setLoading(true); + } } - }, [getTimelineById, timelineIdFromUrl, urlStateInitialized]); + }, [getTimelineById, timelineIdFromUrl, timelineIdFromUrlEql, urlStateInitialized]); // end handle set rule from timeline id return { loading, onOpenTimeline }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx index 3ebfd7d93e31e..77fa04de22513 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import { renderHook } from '@testing-library/react-hooks'; import { mount } from 'enzyme'; -import { waitFor } from '@testing-library/react'; +import { fireEvent, render, waitFor } from '@testing-library/react'; import { useHistory, useParams } from 'react-router-dom'; import '../../../common/mock/match_media'; @@ -30,6 +30,10 @@ import type { UseTimelineTypesArgs, UseTimelineTypesResult } from './use_timelin import { useTimelineTypes } from './use_timeline_types'; import { deleteTimelinesByIds } from '../../containers/api'; import { useUserPrivileges } from '../../../common/components/user_privileges'; +import { + RULE_FROM_EQL_URL_PARAM, + RULE_FROM_TIMELINE_URL_PARAM, +} from '../../../detections/containers/detection_engine/rules/use_rule_from_timeline'; jest.mock('react-router-dom', () => { const originalModule = jest.requireActual('react-router-dom'); @@ -672,19 +676,94 @@ describe('StatefulOpenTimeline', () => { }); }); - test('navigates to create rule page with timeline id in URL when Create rule from timeline click', async () => { - const wrapper = mount( - - - - ); + describe('Create rule from timeline', () => { + const timeline = mockOpenTimelineQueryResults.timeline[0]; + beforeEach(() => { + const lastTimeline = getAllTimeline('', [timeline])[0]; + (useGetAllTimeline as jest.Mock).mockReturnValue({ + fetchAllTimeline: jest.fn(), + timelines: [ + { + ...lastTimeline, + queryType: { + hasQuery: true, + hasEql: true, + }, + }, + ], + loading: false, + totalCount: 1, + refetch: jest.fn(), + }); + }); + test('navigates to create rule page with timeline id in URL when Create rule from timeline query click', async () => { + const { getAllByTestId } = render( + + + + ); - wrapper.find('[data-test-subj="euiCollapsedItemActionsButton"]').first().simulate('click'); - wrapper.find('[data-test-subj="create-rule-from-timeline"]').first().simulate('click'); + fireEvent.click(getAllByTestId('euiCollapsedItemActionsButton')[0]); + fireEvent.click(getAllByTestId('create-rule-from-timeline')[0]); + expect(mockNavigateTo.mock.calls[0][0].path).toEqual( + `?${RULE_FROM_TIMELINE_URL_PARAM}='${timeline?.savedObjectId}'` + ); + }); + test('navigates to create rule page with timeline id in URL when Create rule from timeline eql click', async () => { + const { getAllByTestId } = render( + + + + ); + + fireEvent.click(getAllByTestId('euiCollapsedItemActionsButton')[0]); + fireEvent.click(getAllByTestId('create-rule-from-eql')[0]); + expect(mockNavigateTo.mock.calls[0][0].path).toEqual( + `?${RULE_FROM_EQL_URL_PARAM}='${timeline?.savedObjectId}'` + ); + }); + + test('Does not display Create rule from timeline/eql when no query', async () => { + const lastTimeline = getAllTimeline('', [timeline])[0]; + (useGetAllTimeline as jest.Mock).mockReturnValue({ + fetchAllTimeline: jest.fn(), + timelines: [ + { + ...lastTimeline, + queryType: { + hasQuery: false, + hasEql: false, + }, + }, + ], + loading: false, + totalCount: 1, + refetch: jest.fn(), + }); + const { getAllByTestId, queryByTestId } = render( + + + + ); + + fireEvent.click(getAllByTestId('euiCollapsedItemActionsButton')[0]); + expect(queryByTestId('create-rule-from-eql')).not.toBeInTheDocument(); + expect(queryByTestId('create-rule-from-timeline')).not.toBeInTheDocument(); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.tsx index b21f2f1507a24..d4328b50f6c9e 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.tsx @@ -9,7 +9,10 @@ import React, { useEffect, useState, useCallback, useMemo } from 'react'; import { useDispatch } from 'react-redux'; import { encode } from '@kbn/rison'; -import { RULE_FROM_TIMELINE_URL_PARAM } from '../../../detections/containers/detection_engine/rules/use_rule_from_timeline'; +import { + RULE_FROM_EQL_URL_PARAM, + RULE_FROM_TIMELINE_URL_PARAM, +} from '../../../detections/containers/detection_engine/rules/use_rule_from_timeline'; import { useNavigation } from '../../../common/lib/kibana'; import { SecurityPageName } from '../../../../common/constants'; import { useShallowEqualSelector } from '../../../common/hooks/use_selector'; @@ -288,6 +291,15 @@ export const StatefulOpenTimelineComponent = React.memo( [navigateTo] ); + const onCreateRuleFromEql: OnCreateRuleFromTimeline = useCallback( + (savedObjectId) => + navigateTo({ + deepLinkId: SecurityPageName.rulesCreate, + path: `?${RULE_FROM_EQL_URL_PARAM}=${encode(savedObjectId)}`, + }), + [navigateTo] + ); + /** Resets the selection state such that all timelines are unselected */ const resetSelectionState = useCallback(() => { setSelectedItems([]); @@ -339,6 +351,7 @@ export const StatefulOpenTimelineComponent = React.memo( importDataModalToggle={importDataModalToggle} onAddTimelinesToFavorites={undefined} onCreateRule={onCreateRule} + onCreateRuleFromEql={onCreateRuleFromEql} onDeleteSelected={onDeleteSelected} onlyFavorites={onlyFavorites} onOpenTimeline={openTimeline} diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/open_timeline.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/open_timeline.tsx index d588746686448..2f86996b6ef58 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/open_timeline.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/open_timeline.tsx @@ -45,6 +45,7 @@ export const OpenTimeline = React.memo( itemIdToExpandedNotesRowMap, importDataModalToggle, onCreateRule, + onCreateRuleFromEql, onDeleteSelected, onlyFavorites, onOpenTimeline, @@ -152,10 +153,12 @@ export const OpenTimeline = React.memo( const actionTimelineToShow = useMemo(() => { if (kibanaSecuritySolutionsPrivileges.crud) { const createRule: ActionTimelineToShow[] = ['createRule']; + const createRuleFromEql: ActionTimelineToShow[] = ['createRuleFromEql']; const timelineActions: ActionTimelineToShow[] = [ 'createFrom', 'duplicate', ...(onCreateRule != null ? createRule : []), + ...(onCreateRuleFromEql != null ? createRuleFromEql : []), ]; if (timelineStatus !== TimelineStatus.immutable) { @@ -180,6 +183,7 @@ export const OpenTimeline = React.memo( return []; }, [ onCreateRule, + onCreateRuleFromEql, timelineStatus, onDeleteSelected, deleteTimelines, @@ -278,6 +282,7 @@ export const OpenTimeline = React.memo( itemIdToExpandedNotesRowMap={itemIdToExpandedNotesRowMap} enableExportTimelineDownloader={enableExportTimelineDownloader} onCreateRule={onCreateRule} + onCreateRuleFromEql={onCreateRuleFromEql} onOpenDeleteTimelineModal={onOpenDeleteTimelineModal} onOpenTimeline={onOpenTimeline} onSelectionChange={onSelectionChange} diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/actions_columns.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/actions_columns.tsx index 75c52a34c3e7e..c96eb8efda11b 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/actions_columns.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/actions_columns.tsx @@ -27,6 +27,7 @@ export const getActionsColumns = ({ onOpenDeleteTimelineModal, onOpenTimeline, onCreateRule, + onCreateRuleFromEql, hasCrudAccess, }: { actionTimelineToShow: ActionTimelineToShow[]; @@ -35,6 +36,7 @@ export const getActionsColumns = ({ onOpenDeleteTimelineModal?: OnOpenDeleteTimelineModal; onOpenTimeline: OnOpenTimeline; onCreateRule?: OnCreateRuleFromTimeline; + onCreateRuleFromEql?: OnCreateRuleFromTimeline; hasCrudAccess: boolean; }): [TimelineActionsOverflowColumns] => { const createTimelineFromTemplate = { @@ -149,7 +151,31 @@ export const getActionsColumns = ({ timeline.status !== TimelineStatus.immutable, description: i18n.CREATE_RULE_FROM_TIMELINE, 'data-test-subj': 'create-rule-from-timeline', - available: () => actionTimelineToShow.includes('createRule') && onCreateRule != null, + available: ({ queryType }: OpenTimelineResult) => + actionTimelineToShow.includes('createRule') && + onCreateRule != null && + queryType != null && + queryType.hasQuery, + }; + + const createRuleFromTimelineCorrelation = { + name: i18n.CREATE_RULE_FROM_TIMELINE_CORRELATION, + icon: 'indexEdit', + onClick: (selectedTimeline: OpenTimelineResult) => { + if (onCreateRuleFromEql != null && selectedTimeline.savedObjectId) + onCreateRuleFromEql(selectedTimeline.savedObjectId); + }, + enabled: (timeline: OpenTimelineResult) => + onCreateRuleFromEql != null && + timeline.savedObjectId != null && + timeline.status !== TimelineStatus.immutable, + description: i18n.CREATE_RULE_FROM_TIMELINE, + 'data-test-subj': 'create-rule-from-eql', + available: ({ queryType }: OpenTimelineResult) => + actionTimelineToShow.includes('createRuleFromEql') && + onCreateRuleFromEql != null && + queryType != null && + queryType.hasEql, }; return [ { @@ -162,6 +188,7 @@ export const getActionsColumns = ({ exportTimelineAction, deleteTimelineColumn, createRuleFromTimeline, + createRuleFromTimelineCorrelation, ], }, ]; diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/index.tsx index 9634a31714b15..6591cd141718d 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/timelines_table/index.tsx @@ -56,6 +56,7 @@ export const getTimelinesTableColumns = ({ enableExportTimelineDownloader, itemIdToExpandedNotesRowMap, onCreateRule, + onCreateRuleFromEql, onOpenDeleteTimelineModal, onOpenTimeline, onToggleShowNotes, @@ -68,6 +69,7 @@ export const getTimelinesTableColumns = ({ enableExportTimelineDownloader?: EnableExportTimelineDownloader; itemIdToExpandedNotesRowMap: Record; onCreateRule?: OnCreateRuleFromTimeline; + onCreateRuleFromEql?: OnCreateRuleFromTimeline; onOpenDeleteTimelineModal?: OnOpenDeleteTimelineModal; onOpenTimeline: OnOpenTimeline; onSelectionChange: OnSelectionChange; @@ -88,6 +90,7 @@ export const getTimelinesTableColumns = ({ ...(actionTimelineToShow.length ? getActionsColumns({ onCreateRule, + onCreateRuleFromEql, actionTimelineToShow, deleteTimelines, enableExportTimelineDownloader, @@ -107,6 +110,7 @@ export interface TimelinesTableProps { itemIdToExpandedNotesRowMap: Record; enableExportTimelineDownloader?: EnableExportTimelineDownloader; onCreateRule?: OnCreateRuleFromTimeline; + onCreateRuleFromEql?: OnCreateRuleFromTimeline; onOpenDeleteTimelineModal?: OnOpenDeleteTimelineModal; onOpenTimeline: OnOpenTimeline; onSelectionChange: OnSelectionChange; @@ -137,6 +141,7 @@ export const TimelinesTable = React.memo( itemIdToExpandedNotesRowMap, enableExportTimelineDownloader, onCreateRule, + onCreateRuleFromEql, onOpenDeleteTimelineModal, onOpenTimeline, onSelectionChange, @@ -188,6 +193,7 @@ export const TimelinesTable = React.memo( itemIdToExpandedNotesRowMap, enableExportTimelineDownloader, onCreateRule, + onCreateRuleFromEql, onOpenDeleteTimelineModal, onOpenTimeline, onSelectionChange, @@ -202,6 +208,7 @@ export const TimelinesTable = React.memo( itemIdToExpandedNotesRowMap, enableExportTimelineDownloader, onCreateRule, + onCreateRuleFromEql, onOpenDeleteTimelineModal, onOpenTimeline, onSelectionChange, diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/translations.ts index a49d301b61154..24c7b2d90d161 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/translations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/translations.ts @@ -119,7 +119,14 @@ export const ONLY_FAVORITES = i18n.translate( export const CREATE_RULE_FROM_TIMELINE = i18n.translate( 'xpack.securitySolution.open.timeline.createRuleFromTimelineTooltip', { - defaultMessage: 'Create rule from timeline', + defaultMessage: 'Create query rule from timeline', + } +); + +export const CREATE_RULE_FROM_TIMELINE_CORRELATION = i18n.translate( + 'xpack.securitySolution.open.timeline.createRuleFromTimelineEqlTooltip', + { + defaultMessage: 'Create EQL rule from timeline', } ); diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts index ae684966cb298..948af7fd53faf 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/types.ts @@ -57,6 +57,7 @@ export interface OpenTimelineResult { noteIds?: string[] | null; notes?: TimelineResultNote[] | null; pinnedEventIds?: Readonly> | null; + queryType?: { hasEql: boolean; hasQuery: boolean }; savedObjectId?: string | null; status?: TimelineStatus | null; title?: string | null; @@ -135,7 +136,8 @@ export type ActionTimelineToShow = | 'delete' | 'export' | 'selectable' - | 'createRule'; + | 'createRule' + | 'createRuleFromEql'; export interface OpenTimelineProps { /** Invoked when the user clicks the delete (trash) icon on an individual timeline */ @@ -152,6 +154,9 @@ export interface OpenTimelineProps { importDataModalToggle?: boolean; /** If this callback is specified, a "Create rule from timeline" button will be displayed, and this callback will be invoked when the button is clicked */ onCreateRule?: OnCreateRuleFromTimeline; + + /** If this callback is specified, a "Create rule from timeline correlation" button will be displayed, and this callback will be invoked when the button is clicked */ + onCreateRuleFromEql?: OnCreateRuleFromTimeline; /** If this callback is specified, a "Favorite Selected" button will be displayed, and this callback will be invoked when the button is clicked */ onAddTimelinesToFavorites?: OnAddTimelinesToFavorites; /** If this callback is specified, a "Delete Selected" button will be displayed, and this callback will be invoked when the button is clicked */ diff --git a/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx b/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx index 9c70762cdce24..df25032abcbda 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/containers/all/index.tsx @@ -10,6 +10,7 @@ import memoizeOne from 'memoize-one'; import { useCallback, useState, useEffect } from 'react'; import { useDispatch } from 'react-redux'; +import { getTimelineQueryTypes } from '../helpers'; import { InputsModelId } from '../../../common/store/inputs/constants'; import type { OpenTimelineResult } from '../../components/open_timeline/types'; import { errorToToaster, useStateToaster } from '../../../common/components/toasters'; @@ -93,6 +94,7 @@ export const getAllTimeline = memoizeOne( updatedBy: timeline.updatedBy, timelineType: timeline.timelineType ?? TimelineType.default, templateTimelineId: timeline.templateTimelineId, + queryType: getTimelineQueryTypes(timeline), })) ); diff --git a/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts b/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts index 43648ecbd485d..42faed90559be 100644 --- a/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts +++ b/x-pack/plugins/security_solution/public/timelines/containers/helpers.ts @@ -5,12 +5,26 @@ * 2.0. */ +import type { TimelineResult } from '../../../common/types'; import { TableId } from '../../../common/types'; import { DEFAULT_ALERTS_INDEX } from '../../../common/constants'; +export const getTimelineQueryTypes = (timeline: TimelineResult) => ({ + hasQuery: + (timeline.kqlQuery != null && + timeline.kqlQuery.filterQuery != null && + timeline.kqlQuery.filterQuery.kuery != null && + timeline.kqlQuery.filterQuery.kuery.expression !== '') || + (timeline.dataProviders != null && timeline.dataProviders.length > 0) || + (timeline.filters != null && timeline.filters.length > 0), + hasEql: + timeline.eqlOptions != null && + timeline.eqlOptions.query != null && + timeline.eqlOptions.query.length > 0, +}); + export const detectionsTimelineIds = [TableId.alertsOnAlertsPage, TableId.alertsOnRuleDetailsPage]; -// TODO: Once we are past experimental phase `useRuleRegistry` should be removed export const skipQueryForDetectionsPage = ( id: string, defaultIndex: string[], From 0764bd1b7d36f97577d3c55eab5623b28f3e304d Mon Sep 17 00:00:00 2001 From: Joseph Crail Date: Tue, 21 Feb 2023 16:46:00 -0800 Subject: [PATCH 206/210] [Profiling] Restore show information window (#151538) ## Summary This PR returns the show information window to the flamegraph view. We also added a minor UI improvement to keep the flamegraph view visually synced up with the differential flamegraph view. Fixes https://github.com/elastic/prodfiler/issues/3009 ### Screenshots The "Show information window" toggle is visible and disabled. ![image](https://user-images.githubusercontent.com/6038/219519101-5e8a9797-faa4-4ffe-ab72-1281df7759dc.png) The "Show information window" toggle is visible and enabled. ![image](https://user-images.githubusercontent.com/6038/219519115-8b9b5539-82f5-4eb9-b667-4b283e6f39d8.png) --- .../components/flame_graphs_view/index.tsx | 295 ++++++++++-------- 1 file changed, 167 insertions(+), 128 deletions(-) diff --git a/x-pack/plugins/profiling/public/components/flame_graphs_view/index.tsx b/x-pack/plugins/profiling/public/components/flame_graphs_view/index.tsx index 3f418227fdc3f..7d249c533f3af 100644 --- a/x-pack/plugins/profiling/public/components/flame_graphs_view/index.tsx +++ b/x-pack/plugins/profiling/public/components/flame_graphs_view/index.tsx @@ -27,10 +27,45 @@ import { AsyncComponent } from '../async_component'; import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; import { FlameGraph } from '../flamegraph'; import { PrimaryAndComparisonSearchBar } from '../primary_and_comparison_search_bar'; +import { PrimaryProfilingSearchBar } from '../profiling_app_page_template/primary_profiling_search_bar'; import { ProfilingAppPageTemplate } from '../profiling_app_page_template'; import { RedirectTo } from '../redirect_to'; import { FlameGraphNormalizationOptions, NormalizationMenu } from './normalization_menu'; +export function FlameGraphInformationWindowSwitch({ + showInformationWindow, + onChange, +}: { + showInformationWindow: boolean; + onChange: () => void; +}) { + return ( + + ); +} + +export function FlameGraphSearchPanel({ + children, + searchBar, +}: { + children: React.ReactNode; + searchBar: JSX.Element; +}) { + return ( + + {searchBar} + + {children} + + ); +} + export function FlameGraphsView({ children }: { children: React.ReactElement }) { const { path, @@ -132,136 +167,140 @@ export function FlameGraphsView({ children }: { children: React.ReactElement }) return ; } + const searchBar = isDifferentialView ? ( + + ) : ( + + ); + + const differentialComparisonMode = ( + + + + +

+ {i18n.translate( + 'xpack.profiling.flameGraphsView.differentialFlameGraphComparisonModeTitle', + { defaultMessage: 'Format' } + )} +

+
+
+ + { + if (!('comparisonRangeFrom' in query)) { + return; + } + + profilingRouter.push(routePath, { + path, + query: { + ...query, + ...(nextComparisonMode === FlameGraphComparisonMode.Absolute + ? { + comparisonMode: FlameGraphComparisonMode.Absolute, + normalizationMode: FlameGraphNormalizationMode.Time, + } + : { comparisonMode: FlameGraphComparisonMode.Relative }), + }, + }); + }} + options={[ + { + id: FlameGraphComparisonMode.Absolute, + label: i18n.translate( + 'xpack.profiling.flameGraphsView.differentialFlameGraphComparisonModeAbsoluteButtonLabel', + { + defaultMessage: 'Abs', + } + ), + }, + { + id: FlameGraphComparisonMode.Relative, + label: i18n.translate( + 'xpack.profiling.flameGraphsView.differentialFlameGraphComparisonModeRelativeButtonLabel', + { + defaultMessage: 'Rel', + } + ), + }, + ]} + /> + +
+
+ ); + + const differentialComparisonNormalization = ( + + + + { + profilingRouter.push(routePath, { + path: routePath, + query: { + ...query, + ...pick(options, 'baseline', 'comparison'), + normalizationMode: options.mode, + }, + }); + }} + totalSeconds={ + (new Date(timeRange.end).getTime() - new Date(timeRange.start).getTime()) / 1000 + } + comparisonTotalSeconds={ + (new Date(comparisonTimeRange.end!).getTime() - + new Date(comparisonTimeRange.start!).getTime()) / + 1000 + } + options={ + (normalizationMode === FlameGraphNormalizationMode.Time + ? { mode: FlameGraphNormalizationMode.Time } + : { + mode: FlameGraphNormalizationMode.Scale, + baseline, + comparison, + }) as FlameGraphNormalizationOptions + } + /> + + + + ); + + const informationWindowSwitch = ( + + setShowInformationWindow((prev) => !prev)} + /> + + ); + return ( - + - {isDifferentialView ? ( - - - - - - - - - -

- {i18n.translate( - 'xpack.profiling.flameGraphsView.differentialFlameGraphComparisonModeTitle', - { defaultMessage: 'Format' } - )} -

-
-
- - { - if (!('comparisonRangeFrom' in query)) { - return; - } - - profilingRouter.push(routePath, { - path, - query: { - ...query, - ...(nextComparisonMode === FlameGraphComparisonMode.Absolute - ? { - comparisonMode: FlameGraphComparisonMode.Absolute, - normalizationMode: FlameGraphNormalizationMode.Time, - } - : { comparisonMode: FlameGraphComparisonMode.Relative }), - }, - }); - }} - options={[ - { - id: FlameGraphComparisonMode.Absolute, - label: i18n.translate( - 'xpack.profiling.flameGraphsView.differentialFlameGraphComparisonModeAbsoluteButtonLabel', - { - defaultMessage: 'Abs', - } - ), - }, - { - id: FlameGraphComparisonMode.Relative, - label: i18n.translate( - 'xpack.profiling.flameGraphsView.differentialFlameGraphComparisonModeRelativeButtonLabel', - { - defaultMessage: 'Rel', - } - ), - }, - ]} - /> - -
-
- {comparisonMode === FlameGraphComparisonMode.Absolute ? ( - - - - { - profilingRouter.push(routePath, { - path: routePath, - // @ts-expect-error Code gets too complicated to satisfy TS constraints - query: { - ...query, - ...pick(options, 'baseline', 'comparison'), - normalizationMode: options.mode, - }, - }); - }} - totalSeconds={ - (new Date(timeRange.end).getTime() - - new Date(timeRange.start).getTime()) / - 1000 - } - comparisonTotalSeconds={ - (new Date(comparisonTimeRange.end!).getTime() - - new Date(comparisonTimeRange.start!).getTime()) / - 1000 - } - options={ - (normalizationMode === FlameGraphNormalizationMode.Time - ? { mode: FlameGraphNormalizationMode.Time } - : { - mode: FlameGraphNormalizationMode.Scale, - baseline, - comparison, - }) as FlameGraphNormalizationOptions - } - /> - - - - ) : undefined} - - { - setShowInformationWindow((prev) => !prev); - }} - label={i18n.translate('xpack.profiling.flameGraph.showInformationWindow', { - defaultMessage: 'Show information window', - })} - /> - -
-
-
- ) : null} + + + {isDifferentialView && differentialComparisonMode} + {isDifferentialView && + comparisonMode === FlameGraphComparisonMode.Absolute && + differentialComparisonNormalization} + {informationWindowSwitch} + + Date: Wed, 22 Feb 2023 00:51:44 -0500 Subject: [PATCH 207/210] [api-docs] 2023-02-22 Daily api_docs build (#151822) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/256 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.devdocs.json | 413 +++++++++ api_docs/cases.mdx | 4 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_chat.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.devdocs.json | 90 +- api_docs/content_management.mdx | 4 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/deprecations_by_api.mdx | 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/ecs_data_quality_dashboard.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/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 | 205 +++++ api_docs/fleet.mdx | 4 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_utils.mdx | 2 +- api_docs/kbn_alerts.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_analytics_shippers_gainsight.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mocks.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- .../kbn_content_management_table_list.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- 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 +- ...core_saved_objects_api_server_internal.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_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_internal.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_doc_links.devdocs.json | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs.devdocs.json | 852 ++++++++++++------ api_docs/kbn_ecs.mdx | 4 +- api_docs/kbn_ecs_data_quality_dashboard.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 | 32 +- 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_field_types.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_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_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../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_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- ...ared_ux_avatar_user_profile_components.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- ...hared_ux_button_exit_full_screen_mocks.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_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_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 60 ++ api_docs/observability.mdx | 6 +- api_docs/osquery.mdx | 2 +- api_docs/plugin_directory.mdx | 22 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.devdocs.json | 52 +- api_docs/rule_registry.mdx | 4 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/security.devdocs.json | 30 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 16 + api_docs/triggers_actions_ui.mdx | 4 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_field_list.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 486 files changed, 1916 insertions(+), 826 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 3e926c99476ef..a257c12adbd18 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-02-21 +date: 2023-02-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 8b7c1387882a8..74cb31efe5258 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index c0df2688bc350..f98a2c66e218c 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-02-21 +date: 2023-02-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 adada612c63f6..3c414acb8bda5 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-02-21 +date: 2023-02-22 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 0a1ea8fbc3f59..99082a8c0e8f4 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 390aea6cfea56..2c1caa102e88b 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-02-21 +date: 2023-02-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 bd2371a5e5b5e..c8c099671d3e1 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-02-21 +date: 2023-02-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 2eb95893c4fb7..752b7215e8ae7 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.devdocs.json b/api_docs/cases.devdocs.json index 182b65687cabd..22ad30c92f35e 100644 --- a/api_docs/cases.devdocs.json +++ b/api_docs/cases.devdocs.json @@ -1602,6 +1602,23 @@ } ], "misc": [ + { + "parentPluginId": "cases", + "id": "def-common.APP_ID", + "type": "string", + "tags": [], + "label": "APP_ID", + "description": [ + "\nApplication" + ], + "signature": [ + "\"cases\"" + ], + "path": "x-pack/plugins/cases/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.Case", @@ -1707,6 +1724,133 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.CaseResponse", + "type": "Type", + "tags": [], + "label": "CaseResponse", + "description": [], + "signature": [ + "{ description: string; status: ", + { + "pluginId": "@kbn/cases-components", + "scope": "common", + "docId": "kibKbnCasesComponentsPluginApi", + "section": "def-common.CaseStatuses", + "text": "CaseStatuses" + }, + "; tags: string[]; title: string; connector: { id: string; } & (({ type: ", + "ConnectorTypes", + ".casesWebhook; fields: null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".jira; fields: { issueType: string | null; priority: string | null; parent: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".none; fields: null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".resilient; fields: { incidentTypes: string[] | null; severityCode: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".serviceNowITSM; fields: { impact: string | null; severity: string | null; urgency: string | null; category: string | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".serviceNowSIR; fields: { category: string | null; destIp: boolean | null; malwareHash: boolean | null; malwareUrl: boolean | null; priority: string | null; sourceIp: boolean | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; severity: ", + "CaseSeverity", + "; assignees: { uid: string; }[]; } & { duration: number | null; closed_at: string | null; closed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; external_service: ({ connector_id: string; } & { connector_name: string; external_id: string; external_title: string; external_url: string; pushed_at: string; pushed_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; } & { id: string; totalComment: number; totalAlerts: number; version: string; } & { comments?: ((({ comment: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".elasticSearchDoc; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".savedObject; soType: string; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })) & { id: string; version: string; })[] | undefined; }" + ], + "path": "x-pack/plugins/cases/common/api/cases/case.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.CASES_URL", @@ -1724,6 +1868,260 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.CasesBulkGetRequestCertainFields", + "type": "Type", + "tags": [], + "label": "CasesBulkGetRequestCertainFields", + "description": [], + "signature": [ + "Omit<{ ids: string[]; } & { fields?: string | string[] | undefined; }, \"fields\"> & { fields?: Field[] | undefined; }" + ], + "path": "x-pack/plugins/cases/common/api/cases/case.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "cases", + "id": "def-common.CasesBulkGetResponseCertainFields", + "type": "Type", + "tags": [], + "label": "CasesBulkGetResponseCertainFields", + "description": [], + "signature": [ + "Omit<{ cases: ({ description: string; status: ", + { + "pluginId": "@kbn/cases-components", + "scope": "common", + "docId": "kibKbnCasesComponentsPluginApi", + "section": "def-common.CaseStatuses", + "text": "CaseStatuses" + }, + "; tags: string[]; title: string; connector: { id: string; } & (({ type: ", + "ConnectorTypes", + ".casesWebhook; fields: null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".jira; fields: { issueType: string | null; priority: string | null; parent: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".none; fields: null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".resilient; fields: { incidentTypes: string[] | null; severityCode: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".serviceNowITSM; fields: { impact: string | null; severity: string | null; urgency: string | null; category: string | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".serviceNowSIR; fields: { category: string | null; destIp: boolean | null; malwareHash: boolean | null; malwareUrl: boolean | null; priority: string | null; sourceIp: boolean | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; severity: ", + "CaseSeverity", + "; assignees: { uid: string; }[]; } & { duration: number | null; closed_at: string | null; closed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; external_service: ({ connector_id: string; } & { connector_name: string; external_id: string; external_title: string; external_url: string; pushed_at: string; pushed_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; } & { id: string; totalComment: number; totalAlerts: number; version: string; } & { comments?: ((({ comment: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".elasticSearchDoc; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".savedObject; soType: string; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })) & { id: string; version: string; })[] | undefined; })[]; errors: { error: string; message: string; status: number | undefined; caseId: string; }[]; }, \"cases\"> & { cases: Pick<{ description: string; status: ", + { + "pluginId": "@kbn/cases-components", + "scope": "common", + "docId": "kibKbnCasesComponentsPluginApi", + "section": "def-common.CaseStatuses", + "text": "CaseStatuses" + }, + "; tags: string[]; title: string; connector: { id: string; } & (({ type: ", + "ConnectorTypes", + ".casesWebhook; fields: null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".jira; fields: { issueType: string | null; priority: string | null; parent: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".none; fields: null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".resilient; fields: { incidentTypes: string[] | null; severityCode: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".serviceNowITSM; fields: { impact: string | null; severity: string | null; urgency: string | null; category: string | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".serviceNowSIR; fields: { category: string | null; destIp: boolean | null; malwareHash: boolean | null; malwareUrl: boolean | null; priority: string | null; sourceIp: boolean | null; subcategory: string | null; } | null; } & { name: string; }) | ({ type: ", + "ConnectorTypes", + ".swimlane; fields: { caseId: string | null; } | null; } & { name: string; })); settings: { syncAlerts: boolean; }; owner: string; severity: ", + "CaseSeverity", + "; assignees: { uid: string; }[]; } & { duration: number | null; closed_at: string | null; closed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; external_service: ({ connector_id: string; } & { connector_name: string; external_id: string; external_title: string; external_url: string; pushed_at: string; pushed_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; } & { id: string; totalComment: number; totalAlerts: number; version: string; } & { comments?: ((({ comment: string; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".user; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".alert; alertId: string | string[]; index: string | string[]; rule: { id: string | null; name: string | null; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".actions; comment: string; actions: { targets: { hostname: string; endpointId: string; }[]; type: string; }; owner: string; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | (({ externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".elasticSearchDoc; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".externalReference; owner: string; } | { externalReferenceId: string; externalReferenceStorage: { type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.ExternalReferenceStorageType", + "text": "ExternalReferenceStorageType" + }, + ".savedObject; soType: string; }; externalReferenceAttachmentTypeId: string; externalReferenceMetadata: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; } | null; type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".externalReference; owner: string; }) & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; }) | ({ type: ", + { + "pluginId": "cases", + "scope": "common", + "docId": "kibCasesPluginApi", + "section": "def-common.CommentType", + "text": "CommentType" + }, + ".persistableState; owner: string; persistableStateAttachmentTypeId: string; persistableStateAttachmentState: { [x: string]: ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.JsonValue", + "text": "JsonValue" + }, + "; }; } & { created_at: string; created_by: { email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }; owner: string; pushed_at: string | null; pushed_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; updated_at: string | null; updated_by: ({ email: string | null | undefined; full_name: string | null | undefined; username: string | null | undefined; } & { profile_uid?: string | undefined; }) | null; })) & { id: string; version: string; })[] | undefined; }, \"id\" | \"version\" | \"owner\" | Field>[]; }" + ], + "path": "x-pack/plugins/cases/common/api/cases/case.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.CasesFeatures", @@ -1805,6 +2203,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "cases", + "id": "def-common.INTERNAL_BULK_GET_CASES_URL", + "type": "string", + "tags": [], + "label": "INTERNAL_BULK_GET_CASES_URL", + "description": [], + "signature": [ + "\"/internal/cases/_bulk_get\"" + ], + "path": "x-pack/plugins/cases/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "cases", "id": "def-common.OBSERVABILITY_OWNER", diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 1a59ab69ccccf..c101ceb2e6eaf 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 87 | 0 | 71 | 28 | +| 92 | 0 | 75 | 28 | ## Client diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 419e785e6fa23..1b7e764158d98 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-02-21 +date: 2023-02-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 f0eeee257c076..94c21a617fa14 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_chat.mdx b/api_docs/cloud_chat.mdx index 1b66211c3606a..8db4fd37cb73a 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 15a13dd2ba2ad..48a2b1d911e48 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-02-21 +date: 2023-02-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 1d37f83f96702..8c103e71b3970 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-02-21 +date: 2023-02-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 bb69cb33d2319..833923e335df6 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-02-21 +date: 2023-02-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 bb9ab23be4031..c25cb6d2b7354 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-02-21 +date: 2023-02-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 e7214f8f32f32..09222fa654d76 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.devdocs.json b/api_docs/content_management.devdocs.json index 779fcfac4f572..896f476aaffb2 100644 --- a/api_docs/content_management.devdocs.json +++ b/api_docs/content_management.devdocs.json @@ -128,6 +128,72 @@ "classes": [], "functions": [], "interfaces": [ + { + "parentPluginId": "contentManagement", + "id": "def-common.BulkGetIn", + "type": "Interface", + "tags": [], + "label": "BulkGetIn", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.BulkGetIn", + "text": "BulkGetIn" + }, + "" + ], + "path": "src/plugins/content_management/common/rpc/bulk_get.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "contentManagement", + "id": "def-common.BulkGetIn.contentTypeId", + "type": "Uncategorized", + "tags": [], + "label": "contentTypeId", + "description": [], + "signature": [ + "T" + ], + "path": "src/plugins/content_management/common/rpc/bulk_get.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.BulkGetIn.ids", + "type": "Array", + "tags": [], + "label": "ids", + "description": [], + "signature": [ + "string[]" + ], + "path": "src/plugins/content_management/common/rpc/bulk_get.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "contentManagement", + "id": "def-common.BulkGetIn.options", + "type": "Uncategorized", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "Options | undefined" + ], + "path": "src/plugins/content_management/common/rpc/bulk_get.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "contentManagement", "id": "def-common.CreateIn", @@ -562,7 +628,7 @@ "label": "ProcedureName", "description": [], "signature": [ - "\"create\" | \"update\" | \"get\" | \"delete\" | \"search\"" + "\"create\" | \"update\" | \"get\" | \"delete\" | \"search\" | \"bulkGet\"" ], "path": "src/plugins/content_management/common/rpc/constants.ts", "deprecated": false, @@ -579,7 +645,7 @@ "label": "procedureNames", "description": [], "signature": [ - "readonly [\"get\", \"create\", \"update\", \"delete\", \"search\"]" + "readonly [\"get\", \"bulkGet\", \"create\", \"update\", \"delete\", \"search\"]" ], "path": "src/plugins/content_management/common/rpc/constants.ts", "deprecated": false, @@ -617,6 +683,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "contentManagement", + "id": "def-common.schemas.bulkGet", + "type": "Object", + "tags": [], + "label": "bulkGet", + "description": [], + "signature": [ + { + "pluginId": "contentManagement", + "scope": "common", + "docId": "kibContentManagementPluginApi", + "section": "def-common.ProcedureSchemas", + "text": "ProcedureSchemas" + } + ], + "path": "src/plugins/content_management/common/rpc/rpc.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "contentManagement", "id": "def-common.schemas.create", diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index de9413917e3c1..5b06857b73d19 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.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 | |-------------------|-----------|------------------------|-----------------| -| 41 | 0 | 41 | 3 | +| 46 | 0 | 46 | 3 | ## Client diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 2031219295dc0..75827a22e17bd 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-02-21 +date: 2023-02-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 a498d9daf1215..b186ea13d3731 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-02-21 +date: 2023-02-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 47ccf22f1d4c0..56c213af3d15d 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-02-21 +date: 2023-02-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 5ae45f329d207..4a226601fd315 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-02-21 +date: 2023-02-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 b1841ff331163..8aab1229fe283 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-02-21 +date: 2023-02-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 0bcaf823d1053..2afc84872d01d 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-02-21 +date: 2023-02-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 2928c1d74b072..3daeaef637aeb 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-02-21 +date: 2023-02-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 1dcd1ce588b5a..3cfe54158cc2e 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-02-21 +date: 2023-02-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 06034d231565c..c58a005b3cb09 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-02-21 +date: 2023-02-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 93c19543506a5..45717e846a01c 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-02-21 +date: 2023-02-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 de2998519b208..91bd0f29ba3e0 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-02-21 +date: 2023-02-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 c1ce80e4c5782..ae3bdeb2edcba 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index b1c36f670e74f..1f1af64c0c9f6 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index ef311a52fa2a8..6f1cfe203b95b 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 9a3512c26dfa5..cd8436f4ca388 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index e19682fd4a70f..b80bce172a949 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-02-21 +date: 2023-02-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 6af7f3c703902..6f56c66d3c5f4 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-02-21 +date: 2023-02-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 14819947d3e54..d42353b6c11cb 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 1e6a21f7c8171..16b1019ecd3ed 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 161766f380f10..4224021b55423 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-02-21 +date: 2023-02-22 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 efe75258646d6..84ff2ca16e22e 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-02-21 +date: 2023-02-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 4d58390c80b3c..d4adf39f2b968 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-02-21 +date: 2023-02-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 8184578800fdf..14d20ebf5d61c 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-02-21 +date: 2023-02-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 722fe7bde8d81..51fcf854a986e 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-02-21 +date: 2023-02-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 d2f42a849ddb1..7d58d610b1dbd 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index c0d159cf945b0..73e836f34ba81 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 80baa289f0e2e..cd3691170c384 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-02-21 +date: 2023-02-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 b9dccdadd3bc3..9ce0190f9f154 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-02-21 +date: 2023-02-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 5811a29f8bfad..9351452fcea4c 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-02-21 +date: 2023-02-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 88bdd4792667e..e34b0a5ea27e3 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-02-21 +date: 2023-02-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 a6caeb0d77c18..c0014c266d305 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-02-21 +date: 2023-02-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 f43139104ef14..deb956943c728 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-02-21 +date: 2023-02-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 93a50653e87f8..ee50c931cbfca 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-02-21 +date: 2023-02-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 56a58c391c375..683b1b0d518f0 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-02-21 +date: 2023-02-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 362ca0c24aea2..38ed006c11b39 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-02-21 +date: 2023-02-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 72fdf146aa441..d7f20a1cde784 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-02-21 +date: 2023-02-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 ddbaeb42b1332..5b8406d386c8f 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-02-21 +date: 2023-02-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 10a0bcb9bf6ad..7884000068cc6 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-02-21 +date: 2023-02-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 a5797770c3a7c..b4d2041ed7541 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-02-21 +date: 2023-02-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 f43af727a8cc1..e4563923867a6 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-02-21 +date: 2023-02-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 9e3bba7f9e307..36869e492a9fa 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-02-21 +date: 2023-02-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 5b0aacb51f4ea..99bdec890e1ab 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-02-21 +date: 2023-02-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 3d3220e6d71d5..582a3304e3985 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-02-21 +date: 2023-02-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 5e5cbfb19c6e9..7ee3e730809da 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-02-21 +date: 2023-02-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 675ad45079f83..1055d8332ffed 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-02-21 +date: 2023-02-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 283f0825aebf7..c306185cef512 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -511,6 +511,211 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices", + "type": "Interface", + "tags": [], + "label": "FleetStartServices", + "description": [], + "signature": [ + { + "pluginId": "fleet", + "scope": "public", + "docId": "kibFleetPluginApi", + "section": "def-public.FleetStartServices", + "text": "FleetStartServices" + }, + " extends ", + { + "pluginId": "@kbn/core-lifecycle-browser", + "scope": "common", + "docId": "kibKbnCoreLifecycleBrowserPluginApi", + "section": "def-common.CoreStart", + "text": "CoreStart" + }, + ",", + "FleetStartDeps" + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.storage", + "type": "Object", + "tags": [], + "label": "storage", + "description": [], + "signature": [ + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.Storage", + "text": "Storage" + } + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.share", + "type": "CompoundType", + "tags": [], + "label": "share", + "description": [], + "signature": [ + "{ toggleShareContextMenu: (options: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.ShowShareMenuOptions", + "text": "ShowShareMenuOptions" + }, + ") => void; } & { url: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.BrowserUrlService", + "text": "BrowserUrlService" + }, + "; navigate(options: ", + "RedirectOptions", + "<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + }, + ">): void; }" + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.cloud", + "type": "CompoundType", + "tags": [], + "label": "cloud", + "description": [], + "signature": [ + "(", + { + "pluginId": "cloud", + "scope": "public", + "docId": "kibCloudPluginApi", + "section": "def-public.CloudSetup", + "text": "CloudSetup" + }, + " & ", + { + "pluginId": "cloud", + "scope": "public", + "docId": "kibCloudPluginApi", + "section": "def-public.CloudStart", + "text": "CloudStart" + }, + ") | undefined" + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.discover", + "type": "Object", + "tags": [], + "label": "discover", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "public", + "docId": "kibDiscoverPluginApi", + "section": "def-public.DiscoverStart", + "text": "DiscoverStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.spaces", + "type": "Object", + "tags": [], + "label": "spaces", + "description": [], + "signature": [ + { + "pluginId": "spaces", + "scope": "public", + "docId": "kibSpacesPluginApi", + "section": "def-public.SpacesApi", + "text": "SpacesApi" + }, + " | undefined" + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.authz", + "type": "Object", + "tags": [], + "label": "authz", + "description": [], + "signature": [ + { + "pluginId": "fleet", + "scope": "common", + "docId": "kibFleetPluginApi", + "section": "def-common.FleetAuthz", + "text": "FleetAuthz" + } + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-public.FleetStartServices.guidedOnboarding", + "type": "Object", + "tags": [], + "label": "guidedOnboarding", + "description": [], + "signature": [ + { + "pluginId": "guidedOnboarding", + "scope": "public", + "docId": "kibGuidedOnboardingPluginApi", + "section": "def-public.GuidedOnboardingPluginStart", + "text": "GuidedOnboardingPluginStart" + } + ], + "path": "x-pack/plugins/fleet/public/plugin.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "fleet", "id": "def-public.IntegrationsAppBrowseRouteState", diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 953b463a74548..d02798efed168 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-02-21 +date: 2023-02-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 | |-------------------|-----------|------------------------|-----------------| -| 1079 | 3 | 974 | 26 | +| 1087 | 3 | 982 | 27 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 6202396e1e7cb..d3459f079141a 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-02-21 +date: 2023-02-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 7bbd0b618c908..5eb36e6d2d4f3 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-02-21 +date: 2023-02-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 b1940dbc190b2..8a2a31e1b5fc1 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-02-21 +date: 2023-02-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 231db4c6bebdb..9e3231ebde6c8 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-02-21 +date: 2023-02-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 c6c75389f83a3..2468270d9ada0 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-02-21 +date: 2023-02-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 ea16aa53a349b..95309df53584c 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-02-21 +date: 2023-02-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 704f12fc8722c..a24ceb4e08626 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index bca3c11993651..13978e702b5f2 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-02-21 +date: 2023-02-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 17875d743a453..170b4930f9f05 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-02-21 +date: 2023-02-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 f9b3a60039b24..0eca67952998b 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index c9696a8715dbc..d601d7690ee28 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index ab74febebf3da..b38f867e15aa0 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts.mdx b/api_docs/kbn_alerts.mdx index 427b8b5e49ce6..44cc18ce152e4 100644 --- a/api_docs/kbn_alerts.mdx +++ b/api_docs/kbn_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts title: "@kbn/alerts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index e216fcc07dda8..f101504bb48ca 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-02-21 +date: 2023-02-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 f635927f86b0b..4d579c4710176 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-02-21 +date: 2023-02-22 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 e2d5952a3729f..ea4e28b8f2e8b 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index f02f5e1c1c212..7547d77bdc0e9 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-02-21 +date: 2023-02-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 e5d41537a41fd..0f3aa1b5cf946 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-02-21 +date: 2023-02-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 5c5ef1306ffec..26d8da36afd33 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-02-21 +date: 2023-02-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 d9b6680f5bc8f..c0032039d5cbf 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-02-21 +date: 2023-02-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_analytics_shippers_gainsight.mdx b/api_docs/kbn_analytics_shippers_gainsight.mdx index 4d3dff27228a7..0532a61460614 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-gainsight'] --- import kbnAnalyticsShippersGainsightObj from './kbn_analytics_shippers_gainsight.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 635d6bd97cbb2..6dbb6a3609174 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-02-21 +date: 2023-02-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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index fafa6c8e15455..80ecc8815df12 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-02-21 +date: 2023-02-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 4fb4669907449..6c52bea38b1fd 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-02-21 +date: 2023-02-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 0fe3cdd8230a9..46a47c1581576 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-02-21 +date: 2023-02-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 2db64454f2fed..4d8428447469d 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 2df6c87d68c6d..5833d2ba3df00 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-02-21 +date: 2023-02-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 4095c4a302ca3..317810b0333cc 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-02-21 +date: 2023-02-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 3fc4f3a6dfbfa..92e75675aeaaf 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-02-21 +date: 2023-02-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 cb0ec12455375..0cef396bffa2a 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-02-21 +date: 2023-02-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 cbbaab83c591d..cb472c16b3406 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-02-21 +date: 2023-02-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 7b27011a7c775..5fa0d302f386d 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-02-21 +date: 2023-02-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 7cc043207929f..c0b72619c3f00 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-02-21 +date: 2023-02-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 32ef0cd5402a5..17a0ea5332890 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-02-21 +date: 2023-02-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 b732297b203fc..c4d4fc73c9276 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-02-21 +date: 2023-02-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_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index 3af81131ee414..5dac4f32adb6c 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index dd9ec036c7ca7..fe6a3ea0e5272 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-02-21 +date: 2023-02-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 4482c7f5dff18..c220185aa000f 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-02-21 +date: 2023-02-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 e1ee7cdc865a9..01c59112c239d 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-02-21 +date: 2023-02-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 0aa3db7aff995..136a1368b2986 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-02-21 +date: 2023-02-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 02cf81a71786b..2a84d532cc7c5 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-02-21 +date: 2023-02-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_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index ea0f9f2e35dc9..4cdb7bd6c864c 100644 --- a/api_docs/kbn_content_management_table_list.mdx +++ b/api_docs/kbn_content_management_table_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list title: "@kbn/content-management-table-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list'] --- import kbnContentManagementTableListObj from './kbn_content_management_table_list.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 966d45b50d665..9a6b81fbcd30f 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-02-21 +date: 2023-02-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 39288e860fd13..92024f3712226 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 fa4f7b3aa1112..864193a84d074 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 66d85ba70e6ac..eb6a29cb9644d 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-02-21 +date: 2023-02-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 1c99d0541add8..7d5043e2e9291 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 7d80eb71e06ee..f2bb8b313921a 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 e940ee965a119..2ef17b5a00d8b 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-02-21 +date: 2023-02-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 6c2c21928f147..fa21277c99eff 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 68468e5fb340b..3b0e3beb439b3 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 72ee977d01ee9..0bb533a58e003 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-02-21 +date: 2023-02-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 3d2f5364882b4..a6a6afe493aa8 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 3710af98fb348..7ddb7caa05fc9 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 e880d11da6141..e586cf57d11a6 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 9ee2552a2662b..adc9ad098e3f7 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 412fdaf7d4956..a543d9d6abe6e 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-02-21 +date: 2023-02-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 da8667ec9f4a5..68f675d2f7b40 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 d6b453ce2cdff..a3d6e47b82c12 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 6cf8d2552bcbb..cc2d611962165 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 4a0d4e62fcdcb..4edaa1944f399 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-02-21 +date: 2023-02-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 8e0e23e4a006f..1144bd453a657 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-02-21 +date: 2023-02-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 8da4a0abfb4f6..00ec9c6918cc6 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 8220f61b3b760..b844aa16894d1 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-02-21 +date: 2023-02-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 b6abbdc10bce1..e0e005cc73040 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 dee1ad581964d..7a6250780061e 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 1ef5500a4a112..3adbf742482f0 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-02-21 +date: 2023-02-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 0d1bfd645fd6b..1e1a95e81a549 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 41652a24b2de2..76b82bb483d99 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 510c39c764001..06d2fc271d7c2 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-02-21 +date: 2023-02-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 41c69f6a08c32..504ccdfb4b0a1 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-02-21 +date: 2023-02-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 bc2b2aff1d9af..c932593f181bd 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 627967fc335b4..4303b73519fc1 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 8ef75740987eb..2ce0848b300f0 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-02-21 +date: 2023-02-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 7901f9a98a7e4..a16ced6c58004 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 e2d7bcda0a2a9..7699a97f2e5c0 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 40bb2bbfc1b85..65bcfeb6e3280 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-02-21 +date: 2023-02-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 27b6d914c85f6..0259af4a2d603 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-02-21 +date: 2023-02-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 bc66b55f84bc6..3f67e1513fbdb 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 8a9ccdacf34fe..55669cff7fcdd 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 32f0252b272b9..b29fac3f1ba6a 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-02-21 +date: 2023-02-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 c525c3a50c64d..c5cc6b5c0a074 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 abb6ba6f2cfec..6b49b420e5b05 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-02-21 +date: 2023-02-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 e3b7db75215b8..d2a48b99e821e 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 ac9a8ab04a956..be2c94e6b7c87 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 1b841b939d068..7435d517d2608 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 ff9026332740a..88d24d6e7a5d6 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-02-21 +date: 2023-02-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 ff08543c85012..44819cd3529d0 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 b489cb0a0e5fc..6f1d357fe621f 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 41eb176aeb1b1..a0e4b51510097 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 da9070bbd9d5b..e175438b3479f 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 91a1eb7e95d14..63fba0e6131d2 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-02-21 +date: 2023-02-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 4ac62f82f9a47..50a269c58f111 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 5a3747e4e07f2..b2e3a4bb5878f 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 0732a260a34ce..3fc01b7d68aae 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-02-21 +date: 2023-02-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 20f52ba6731eb..50360bc76b83b 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-02-21 +date: 2023-02-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 124a09ff69906..31d18de764c04 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 f519ee25f8939..fc7ecb1101b32 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 affcecc3d105c..f4fbd702bebee 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-02-21 +date: 2023-02-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 09744283fb995..d861cfbff935b 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 9ae008e7d011a..48361a89b17b8 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-02-21 +date: 2023-02-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 24b19ae8f1d73..1204969db77da 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 0dc8effe9371b..f344c111a01f7 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 193eb2c930e79..11342669fccce 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-02-21 +date: 2023-02-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 5ce70258f0b49..8a342ebb5fe82 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 144b306e15894..bf5a6dd183df2 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-02-21 +date: 2023-02-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 a83b82030ec1c..b451b1729fbd2 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-02-21 +date: 2023-02-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 c1ae8be00852a..693c9b3896489 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 ec2499cd82c66..15b472c612510 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 0e95e8581367e..608dc2a7f43f7 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 292c9086ece26..86cc83d1c4665 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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.mdx b/api_docs/kbn_core_http_server.mdx index d06fc41f1decb..e7549d47de2fe 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-02-21 +date: 2023-02-22 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 5f70eaeac6401..d1e94c5570913 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 6812b745be87e..87dc62e5d452d 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 b51b90da236ea..ede9c902005ae 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-02-21 +date: 2023-02-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 f0197ce673b94..5c7fbee728cbb 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 bc9fbd36bef6d..1d40cfd813e89 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-02-21 +date: 2023-02-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 5608bbe492830..973d179d55cf0 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 0396bf48da5d1..d86e4225507a1 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 179135ccbfd40..4b757b514f144 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 d459bf1aeaa3a..5f3b5317f36d5 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 205ac88f5e470..bcfd7fdd2b950 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 6d6d9a2bb00f2..90e6fa94adfca 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-02-21 +date: 2023-02-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 306399cce5929..8c115b0f3c4fc 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 c53509c3542d8..632df357250b0 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-02-21 +date: 2023-02-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 b08743a11140a..017fae40e6765 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 b6e432314e9bb..4be638c9a4730 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 c78fcd55ebefc..b91004a22f116 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-02-21 +date: 2023-02-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 939b44ee1b714..dbe135950c523 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-02-21 +date: 2023-02-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 8053ab596c478..b6fb01da2f86a 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 140fd197caed0..90dbf178f1a11 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 d36475ee881a3..54e52d609628e 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 1daf6aad8e8fe..f6f0efbf8ac4b 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 10e6282332ea7..bf86e0307a776 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-02-21 +date: 2023-02-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 43685ad91870f..833425d24409e 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 069d9964aaae0..56753984ac2d5 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 8acfeb3f25e3c..603fe381f870c 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-02-21 +date: 2023-02-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 4c64ebacd23f6..5271ba85bb8cf 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-02-21 +date: 2023-02-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 6e24319a666e3..5d1e806aaaeeb 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 c65c52f49f473..4094ffa9279ce 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 77a16b07643c2..7bbcf245b2654 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-02-21 +date: 2023-02-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 26a3363d26fbc..631e0151740d6 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 47a6777732623..9b269fea20985 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 46f1c5fc8196c..9fd7a30065d13 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-02-21 +date: 2023-02-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 fade1b5a20320..37a81e48fb305 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 339686def13c0..47298a50463c1 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 92bea55f56f76..fc627fc8cd415 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-02-21 +date: 2023-02-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 33347b183b6a7..4584ddefeb046 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 4ff83cf8191d2..0e9a904c09835 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-02-21 +date: 2023-02-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 dc367f111add3..7af3419dac952 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 e0d550041cfc5..36b4b5b764626 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-02-21 +date: 2023-02-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 e4b629ab32037..fbb30254f1632 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 2b735abc2620b..002488742db38 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 8c265cb3c7e6c..c84e51b6284a3 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 06b40ffd1cdb3..66e44d5d323bf 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 a060864d5066e..31a641a09f371 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 f0edb4776f5ad..e7e5661abf931 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-02-21 +date: 2023-02-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 a7cde7f878840..e59bb460fd89c 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-02-21 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_saved_objects_api_server_internal.mdx index 8b9e4f3ba610b..29c07b02f6c92 100644 --- a/api_docs/kbn_core_saved_objects_api_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-internal title: "@kbn/core-saved-objects-api-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-internal plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-internal'] --- import kbnCoreSavedObjectsApiServerInternalObj from './kbn_core_saved_objects_api_server_internal.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 f73eab4ae5a5b..50cb340388b7c 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 3a7bbd2e54977..55f92d7fe094c 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 1bfa37135bf73..e3f24535b399f 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 c9f7d61a8cd39..f79a5328c145c 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-02-21 +date: 2023-02-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 50387786c60ff..3988c40ca812d 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 8605324724902..e83c272b4f4a4 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 0e20bceeb2556..9257f125a7a8f 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-02-21 +date: 2023-02-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 9284ecaae1c2e..ba31ad24940a6 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 7b3b9b8536d31..455fe0aa30903 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 32f3c5b7b6655..0d7df56f344f2 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 a1d597c1c6fe5..10decba9473ff 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 3d87c55f1428c..16739d78d82dd 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-02-21 +date: 2023-02-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 d56b7f4bbfd15..df1906cd3d36c 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 4404fda72564c..f6c6032dda09b 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 7ce5cb45bdeb1..5059eb4c600d3 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-02-21 +date: 2023-02-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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 9c64990d286b0..651efcc5127be 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-02-21 +date: 2023-02-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 424888c8aa2b6..3394b59a4e384 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-02-21 +date: 2023-02-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 6477075fa3bfc..76a4a454d2741 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-02-21 +date: 2023-02-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 6782772b8c228..451104ef23225 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 4b77a88937a30..05ddf5ec40ab7 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 ae5239538d38d..33e4d2581b485 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-02-21 +date: 2023-02-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 f70e4c3534ed7..aeab2763123c6 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-02-21 +date: 2023-02-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 14d9281233b2e..289d9f3ee3ff9 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-02-21 +date: 2023-02-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_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 0270000c32ef3..f7af932306c4e 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-02-21 +date: 2023-02-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 996595528a76e..98f0fdf81c560 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-02-21 +date: 2023-02-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 68891b4c19a72..5347ab6ce4a8c 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-02-21 +date: 2023-02-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_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index ec326db54267f..446420ce5cba7 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 12ceb96f1f953..e8415191c6f2d 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 1433e8e0b8451..80d8d789e59f1 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-02-21 +date: 2023-02-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 ce0be9d0eecfc..4219007df1164 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-02-21 +date: 2023-02-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 b56e363c1707b..fa1ce48f374ed 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-02-21 +date: 2023-02-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 4383dc30150f4..96536c2679aba 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-02-21 +date: 2023-02-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 141a3b67487b1..0b7f73027b692 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-02-21 +date: 2023-02-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 0b18ce294fb2e..d95fc2e2168f0 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 cb352de9c7071..cdea14facbf0f 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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 4a7b514af95dd..a3004471ffad8 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-02-21 +date: 2023-02-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 0ba98d7e11377..71c7a8855bbbb 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-02-21 +date: 2023-02-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 e711636756b4a..1d500f2ffe217 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-02-21 +date: 2023-02-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_crypto.mdx b/api_docs/kbn_crypto.mdx index 0eb371a73845b..a4ec585d44796 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-02-21 +date: 2023-02-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 ed21fc5391ab5..1b910aad919f4 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index ea9449b2b1c96..dfe1f317447aa 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 3908f6b4f8204..257691719951d 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 3cfd155383384..2deb130739bd1 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-02-21 +date: 2023-02-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 37baabb24a6eb..b9e9cb6e2132a 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-02-21 +date: 2023-02-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 33e17e03beb13..84d9d9c9fe907 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-02-21 +date: 2023-02-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 e44589c5ad5c8..ab9a84010f7f1 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index b829e281babcd..75685baffbc4a 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -658,7 +658,7 @@ "label": "observability", "description": [], "signature": [ - "{ readonly guide: string; readonly infrastructureThreshold: string; readonly logsThreshold: string; readonly metricsThreshold: string; readonly monitorStatus: string; readonly monitorUptime: string; readonly tlsCertificate: string; readonly uptimeDurationAnomaly: string; readonly monitorLogs: string; readonly analyzeMetrics: string; readonly monitorUptimeSynthetics: string; readonly userExperience: string; readonly createAlerts: string; readonly syntheticsCommandReference: string; readonly syntheticsProjectMonitors: string; }" + "{ readonly guide: string; readonly infrastructureThreshold: string; readonly logsThreshold: string; readonly metricsThreshold: string; readonly monitorStatus: string; readonly monitorUptime: string; readonly tlsCertificate: string; readonly uptimeDurationAnomaly: string; readonly monitorLogs: string; readonly analyzeMetrics: string; readonly monitorUptimeSynthetics: string; readonly userExperience: string; readonly createAlerts: string; readonly syntheticsCommandReference: string; readonly syntheticsProjectMonitors: string; readonly syntheticsMigrateFromIntegration: 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 004ce641602e4..7cdb6bb36ab2d 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-02-21 +date: 2023-02-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 ed1b9fa7f8442..9c31bda65af2d 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 49148bf13e43e..1f86b4a42c1f1 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.devdocs.json b/api_docs/kbn_ecs.devdocs.json index 32c5b52fbc08d..8d623867a82be 100644 --- a/api_docs/kbn_ecs.devdocs.json +++ b/api_docs/kbn_ecs.devdocs.json @@ -1570,7 +1570,7 @@ "\nECS version this event conforms to. `ecs.version` is a required field and must exist in all events.\nWhen querying across multiple indices -- which may conform to slightly different ECS versions -- this field lets integrations adjust to the schema version of the events." ], "signature": [ - "\"8.6.0\"" + "\"8.6.1\"" ], "path": "packages/kbn-ecs/generated/ecs.ts", "deprecated": false, @@ -6780,7 +6780,7 @@ "label": "indicator", "description": [], "signature": [ - "{ as?: { number?: number | undefined; organization?: { name?: string | undefined; } | undefined; } | undefined; confidence?: string | undefined; description?: string | undefined; email?: { address?: string | undefined; } | undefined; file?: { accessed?: string | undefined; attributes?: string[] | undefined; code_signature?: { digest_algorithm?: string | undefined; exists?: boolean | undefined; signing_id?: string | undefined; status?: string | undefined; subject_name?: string | undefined; team_id?: string | undefined; timestamp?: string | undefined; trusted?: boolean | undefined; valid?: boolean | undefined; } | undefined; created?: string | undefined; ctime?: string | undefined; device?: string | undefined; directory?: string | undefined; drive_letter?: string | undefined; elf?: { architecture?: string | undefined; byte_order?: string | undefined; cpu_type?: string | undefined; creation_date?: string | undefined; exports?: Record[] | undefined; header?: { abi_version?: string | undefined; class?: string | undefined; data?: string | undefined; entrypoint?: number | undefined; object_version?: string | undefined; os_abi?: string | undefined; type?: string | undefined; version?: string | undefined; } | undefined; imports?: Record[] | undefined; sections?: Record[] | undefined; segments?: Record[] | undefined; shared_libraries?: string[] | undefined; telfhash?: string | undefined; } | undefined; extension?: string | undefined; fork_name?: string | undefined; gid?: string | undefined; group?: string | undefined; hash?: { md5?: string | undefined; sha1?: string | undefined; sha256?: string | undefined; sha384?: string | undefined; sha512?: string | undefined; ssdeep?: string | undefined; tlsh?: string | undefined; } | undefined; inode?: string | undefined; mime_type?: string | undefined; mode?: string | undefined; mtime?: string | undefined; name?: string | undefined; owner?: string | undefined; path?: string | undefined; pe?: { architecture?: string | undefined; company?: string | undefined; description?: string | undefined; file_version?: string | undefined; imphash?: string | undefined; original_file_name?: string | undefined; pehash?: string | undefined; product?: string | undefined; } | undefined; size?: number | undefined; target_path?: string | undefined; type?: string | undefined; uid?: string | undefined; x509?: { alternative_names?: string[] | undefined; issuer?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; not_after?: string | undefined; not_before?: string | undefined; public_key_algorithm?: string | undefined; public_key_curve?: string | undefined; public_key_exponent?: number | undefined; public_key_size?: number | undefined; serial_number?: string | undefined; signature_algorithm?: string | undefined; subject?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; version_number?: string | undefined; } | undefined; } | undefined; first_seen?: string | undefined; geo?: { city_name?: string | undefined; continent_code?: string | undefined; continent_name?: string | undefined; country_iso_code?: string | undefined; country_name?: string | undefined; location?: { lat: number; lon: number; } | undefined; name?: string | undefined; postal_code?: string | undefined; region_iso_code?: string | undefined; region_name?: string | undefined; timezone?: string | undefined; } | undefined; ip?: string | undefined; last_seen?: string | undefined; marking?: { tlp?: string | undefined; } | undefined; modified_at?: string | undefined; port?: number | undefined; provider?: string | undefined; reference?: string | undefined; registry?: { data?: { bytes?: string | undefined; strings?: string[] | undefined; type?: string | undefined; } | undefined; hive?: string | undefined; key?: string | undefined; path?: string | undefined; value?: string | undefined; } | undefined; scanner_stats?: number | undefined; sightings?: number | undefined; type?: string | undefined; url?: { domain?: string | undefined; extension?: string | undefined; fragment?: string | undefined; full?: string | undefined; original?: string | undefined; password?: string | undefined; path?: string | undefined; port?: number | undefined; query?: string | undefined; registered_domain?: string | undefined; scheme?: string | undefined; subdomain?: string | undefined; top_level_domain?: string | undefined; username?: string | undefined; } | undefined; x509?: { alternative_names?: string[] | undefined; issuer?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; not_after?: string | undefined; not_before?: string | undefined; public_key_algorithm?: string | undefined; public_key_curve?: string | undefined; public_key_exponent?: number | undefined; public_key_size?: number | undefined; serial_number?: string | undefined; signature_algorithm?: string | undefined; subject?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; version_number?: string | undefined; } | undefined; } | undefined" + "{ as?: { number?: number | undefined; organization?: { name?: string | undefined; } | undefined; } | undefined; confidence?: string | undefined; description?: string | undefined; email?: { address?: string | undefined; } | undefined; file?: { accessed?: string | undefined; attributes?: string[] | undefined; code_signature?: { digest_algorithm?: string | undefined; exists?: boolean | undefined; signing_id?: string | undefined; status?: string | undefined; subject_name?: string | undefined; team_id?: string | undefined; timestamp?: string | undefined; trusted?: boolean | undefined; valid?: boolean | undefined; } | undefined; created?: string | undefined; ctime?: string | undefined; device?: string | undefined; directory?: string | undefined; drive_letter?: string | undefined; elf?: { architecture?: string | undefined; byte_order?: string | undefined; cpu_type?: string | undefined; creation_date?: string | undefined; exports?: Record[] | undefined; header?: { abi_version?: string | undefined; class?: string | undefined; data?: string | undefined; entrypoint?: number | undefined; object_version?: string | undefined; os_abi?: string | undefined; type?: string | undefined; version?: string | undefined; } | undefined; imports?: Record[] | undefined; sections?: Record[] | undefined; segments?: Record[] | undefined; shared_libraries?: string[] | undefined; telfhash?: string | undefined; } | undefined; extension?: string | undefined; fork_name?: string | undefined; gid?: string | undefined; group?: string | undefined; hash?: { md5?: string | undefined; sha1?: string | undefined; sha256?: string | undefined; sha384?: string | undefined; sha512?: string | undefined; ssdeep?: string | undefined; tlsh?: string | undefined; } | undefined; inode?: string | undefined; mime_type?: string | undefined; mode?: string | undefined; mtime?: string | undefined; name?: string | undefined; owner?: string | undefined; path?: string | undefined; pe?: { architecture?: string | undefined; company?: string | undefined; description?: string | undefined; file_version?: string | undefined; imphash?: string | undefined; original_file_name?: string | undefined; pehash?: string | undefined; product?: string | undefined; } | undefined; size?: number | undefined; target_path?: string | undefined; type?: string | undefined; uid?: string | undefined; x509?: { alternative_names?: string[] | undefined; issuer?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; not_after?: string | undefined; not_before?: string | undefined; public_key_algorithm?: string | undefined; public_key_curve?: string | undefined; public_key_exponent?: number | undefined; public_key_size?: number | undefined; serial_number?: string | undefined; signature_algorithm?: string | undefined; subject?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; version_number?: string | undefined; } | undefined; } | undefined; first_seen?: string | undefined; geo?: { city_name?: string | undefined; continent_code?: string | undefined; continent_name?: string | undefined; country_iso_code?: string | undefined; country_name?: string | undefined; location?: { lat: number; lon: number; } | undefined; name?: string | undefined; postal_code?: string | undefined; region_iso_code?: string | undefined; region_name?: string | undefined; timezone?: string | undefined; } | undefined; ip?: string | undefined; last_seen?: string | undefined; marking?: { tlp?: string | undefined; tlp_version?: string | undefined; } | undefined; modified_at?: string | undefined; port?: number | undefined; provider?: string | undefined; reference?: string | undefined; registry?: { data?: { bytes?: string | undefined; strings?: string[] | undefined; type?: string | undefined; } | undefined; hive?: string | undefined; key?: string | undefined; path?: string | undefined; value?: string | undefined; } | undefined; scanner_stats?: number | undefined; sightings?: number | undefined; type?: string | undefined; url?: { domain?: string | undefined; extension?: string | undefined; fragment?: string | undefined; full?: string | undefined; original?: string | undefined; password?: string | undefined; path?: string | undefined; port?: number | undefined; query?: string | undefined; registered_domain?: string | undefined; scheme?: string | undefined; subdomain?: string | undefined; top_level_domain?: string | undefined; username?: string | undefined; } | undefined; x509?: { alternative_names?: string[] | undefined; issuer?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; not_after?: string | undefined; not_before?: string | undefined; public_key_algorithm?: string | undefined; public_key_curve?: string | undefined; public_key_exponent?: number | undefined; public_key_size?: number | undefined; serial_number?: string | undefined; signature_algorithm?: string | undefined; subject?: { common_name?: string[] | undefined; country?: string[] | undefined; distinguished_name?: string | undefined; locality?: string[] | undefined; organization?: string[] | undefined; organizational_unit?: string[] | undefined; state_or_province?: string[] | undefined; } | undefined; version_number?: string | undefined; } | undefined; } | undefined" ], "path": "packages/kbn-ecs/generated/threat.ts", "deprecated": false, @@ -6827,20 +6827,6 @@ "path": "packages/kbn-ecs/generated/threat.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsThreat.threat", - "type": "Object", - "tags": [], - "label": "threat", - "description": [], - "signature": [ - "{ indicator?: { marking?: { tlp?: { version?: string | undefined; } | undefined; } | undefined; } | undefined; } | undefined" - ], - "path": "packages/kbn-ecs/generated/threat.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false @@ -8350,7 +8336,7 @@ "label": "EcsVersion", "description": [], "signature": [ - "\"8.6.0\"" + "\"8.6.1\"" ], "path": "packages/kbn-ecs/generated/index.ts", "deprecated": false, @@ -142151,10 +142137,150 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp", + "type": "Object", + "tags": [], + "label": "'threat.enrichments.indicator.marking.tlp'", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.dashed_name", + "type": "string", + "tags": [], + "label": "dashed_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.example", + "type": "string", + "tags": [], + "label": "example", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.expected_values", + "type": "Array", + "tags": [], + "label": "expected_values", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.flat_name", + "type": "string", + "tags": [], + "label": "flat_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.ignore_above", + "type": "number", + "tags": [], + "label": "ignore_above", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.level", + "type": "string", + "tags": [], + "label": "level", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.normalize", + "type": "Array", + "tags": [], + "label": "normalize", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.short", + "type": "string", + "tags": [], + "label": "short", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version", "type": "Object", "tags": [], - "label": "'threat.enrichments.indicator.marking.tlp.version'", + "label": "'threat.enrichments.indicator.marking.tlp_version'", "description": [], "path": "packages/kbn-ecs/generated/ecs_flat.ts", "deprecated": false, @@ -142162,7 +142288,7 @@ "children": [ { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.dashed_name", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.dashed_name", "type": "string", "tags": [], "label": "dashed_name", @@ -142173,7 +142299,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.description", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.description", "type": "string", "tags": [], "label": "description", @@ -142184,7 +142310,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.example", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.example", "type": "number", "tags": [], "label": "example", @@ -142195,7 +142321,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.flat_name", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.flat_name", "type": "string", "tags": [], "label": "flat_name", @@ -142206,7 +142332,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.ignore_above", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.ignore_above", "type": "number", "tags": [], "label": "ignore_above", @@ -142217,7 +142343,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.level", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.level", "type": "string", "tags": [], "label": "level", @@ -142228,7 +142354,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.name", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.name", "type": "string", "tags": [], "label": "name", @@ -142239,7 +142365,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.normalize", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.normalize", "type": "Array", "tags": [], "label": "normalize", @@ -142253,7 +142379,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.short", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.short", "type": "string", "tags": [], "label": "short", @@ -142264,7 +142390,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp.version.type", + "id": "def-common.EcsFlat.threat.enrichments.indicator.marking.tlp_version.type", "type": "string", "tags": [], "label": "type", @@ -166692,6 +166818,132 @@ } ] }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version", + "type": "Object", + "tags": [], + "label": "'threat.indicator.marking.tlp_version'", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.dashed_name", + "type": "string", + "tags": [], + "label": "dashed_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.example", + "type": "number", + "tags": [], + "label": "example", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.flat_name", + "type": "string", + "tags": [], + "label": "flat_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.ignore_above", + "type": "number", + "tags": [], + "label": "ignore_above", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.level", + "type": "string", + "tags": [], + "label": "level", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.normalize", + "type": "Array", + "tags": [], + "label": "normalize", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.short", + "type": "string", + "tags": [], + "label": "short", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsFlat.threat.indicator.marking.tlp_version.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_flat.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/ecs", "id": "def-common.EcsFlat.threat.indicator.modified_at", @@ -175551,132 +175803,6 @@ } ] }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version", - "type": "Object", - "tags": [], - "label": "'threat.threat.indicator.marking.tlp.version'", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.dashed_name", - "type": "string", - "tags": [], - "label": "dashed_name", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.description", - "type": "string", - "tags": [], - "label": "description", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.example", - "type": "number", - "tags": [], - "label": "example", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.flat_name", - "type": "string", - "tags": [], - "label": "flat_name", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.ignore_above", - "type": "number", - "tags": [], - "label": "ignore_above", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.level", - "type": "string", - "tags": [], - "label": "level", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.normalize", - "type": "Array", - "tags": [], - "label": "normalize", - "description": [], - "signature": [ - "never[]" - ], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.short", - "type": "string", - "tags": [], - "label": "short", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsFlat.threat.threat.indicator.marking.tlp.version.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_flat.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, { "parentPluginId": "@kbn/ecs", "id": "def-common.EcsFlat.tls.cipher", @@ -345721,10 +345847,10 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp", "type": "Object", "tags": [], - "label": "'threat.enrichments.indicator.marking.tlp.version'", + "label": "'threat.enrichments.indicator.marking.tlp'", "description": [], "path": "packages/kbn-ecs/generated/ecs_nested.ts", "deprecated": false, @@ -345732,7 +345858,7 @@ "children": [ { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.dashed_name", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.dashed_name", "type": "string", "tags": [], "label": "dashed_name", @@ -345743,7 +345869,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.description", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.description", "type": "string", "tags": [], "label": "description", @@ -345754,7 +345880,147 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.example", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.example", + "type": "string", + "tags": [], + "label": "example", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.expected_values", + "type": "Array", + "tags": [], + "label": "expected_values", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.flat_name", + "type": "string", + "tags": [], + "label": "flat_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.ignore_above", + "type": "number", + "tags": [], + "label": "ignore_above", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.level", + "type": "string", + "tags": [], + "label": "level", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.normalize", + "type": "Array", + "tags": [], + "label": "normalize", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.short", + "type": "string", + "tags": [], + "label": "short", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version", + "type": "Object", + "tags": [], + "label": "'threat.enrichments.indicator.marking.tlp_version'", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.dashed_name", + "type": "string", + "tags": [], + "label": "dashed_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.example", "type": "number", "tags": [], "label": "example", @@ -345765,7 +346031,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.flat_name", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.flat_name", "type": "string", "tags": [], "label": "flat_name", @@ -345776,7 +346042,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.ignore_above", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.ignore_above", "type": "number", "tags": [], "label": "ignore_above", @@ -345787,7 +346053,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.level", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.level", "type": "string", "tags": [], "label": "level", @@ -345798,7 +346064,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.name", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.name", "type": "string", "tags": [], "label": "name", @@ -345809,7 +346075,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.normalize", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.normalize", "type": "Array", "tags": [], "label": "normalize", @@ -345823,7 +346089,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.short", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.short", "type": "string", "tags": [], "label": "short", @@ -345834,7 +346100,7 @@ }, { "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp.version.type", + "id": "def-common.EcsNested.threat.fields.threat.enrichments.indicator.marking.tlp_version.type", "type": "string", "tags": [], "label": "type", @@ -370262,6 +370528,132 @@ } ] }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version", + "type": "Object", + "tags": [], + "label": "'threat.indicator.marking.tlp_version'", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.dashed_name", + "type": "string", + "tags": [], + "label": "dashed_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.example", + "type": "number", + "tags": [], + "label": "example", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.flat_name", + "type": "string", + "tags": [], + "label": "flat_name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.ignore_above", + "type": "number", + "tags": [], + "label": "ignore_above", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.level", + "type": "string", + "tags": [], + "label": "level", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.normalize", + "type": "Array", + "tags": [], + "label": "normalize", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.short", + "type": "string", + "tags": [], + "label": "short", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ecs", + "id": "def-common.EcsNested.threat.fields.threat.indicator.marking.tlp_version.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/kbn-ecs/generated/ecs_nested.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/ecs", "id": "def-common.EcsNested.threat.fields.threat.indicator.modified_at", @@ -379120,132 +379512,6 @@ "trackAdoption": false } ] - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version", - "type": "Object", - "tags": [], - "label": "'threat.threat.indicator.marking.tlp.version'", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.dashed_name", - "type": "string", - "tags": [], - "label": "dashed_name", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.description", - "type": "string", - "tags": [], - "label": "description", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.example", - "type": "number", - "tags": [], - "label": "example", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.flat_name", - "type": "string", - "tags": [], - "label": "flat_name", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.ignore_above", - "type": "number", - "tags": [], - "label": "ignore_above", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.level", - "type": "string", - "tags": [], - "label": "level", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.name", - "type": "string", - "tags": [], - "label": "name", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.normalize", - "type": "Array", - "tags": [], - "label": "normalize", - "description": [], - "signature": [ - "never[]" - ], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.short", - "type": "string", - "tags": [], - "label": "short", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ecs", - "id": "def-common.EcsNested.threat.fields.threat.threat.indicator.marking.tlp.version.type", - "type": "string", - "tags": [], - "label": "type", - "description": [], - "path": "packages/kbn-ecs/generated/ecs_nested.ts", - "deprecated": false, - "trackAdoption": false - } - ] } ] }, diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 488cebb89a3b6..95d72a575996d 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.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 | |-------------------|-----------|------------------------|-----------------| -| 35102 | 0 | 34695 | 0 | +| 35125 | 0 | 34718 | 0 | ## Common diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index f0092b0f8bb11..4bb6302bb165f 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-02-21 +date: 2023-02-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_es.mdx b/api_docs/kbn_es.mdx index de79ec32efbca..070d93a08d00b 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-02-21 +date: 2023-02-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 2f5e0c942eb0f..15253132f300a 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-02-21 +date: 2023-02-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 93fa195ba86cd..a08a01774a28d 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-02-21 +date: 2023-02-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 94daa358e2546..15f5ca2dcacdb 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -3616,7 +3616,15 @@ "section": "def-common.Filter", "text": "Filter" }, - "[] | undefined) => boolean" + "[] | undefined, comparatorOptions?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterCompareOptions", + "text": "FilterCompareOptions" + }, + " | undefined) => boolean" ], "path": "packages/kbn-es-query/src/filters/helpers/only_disabled.ts", "deprecated": false, @@ -3665,6 +3673,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.onlyDisabledFiltersChanged.$3", + "type": "Object", + "tags": [], + "label": "comparatorOptions", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterCompareOptions", + "text": "FilterCompareOptions" + }, + " | undefined" + ], + "path": "packages/kbn-es-query/src/filters/helpers/only_disabled.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [ diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 22bee16d0585c..12b22ea813f83 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-02-21 +date: 2023-02-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 | |-------------------|-----------|------------------------|-----------------| -| 250 | 1 | 192 | 15 | +| 251 | 1 | 193 | 15 | ## Common diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 16e8ec6d3ae5c..64d6b0993ae37 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-02-21 +date: 2023-02-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 0837f234cf360..97f6d6680f269 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-02-21 +date: 2023-02-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_field_types.mdx b/api_docs/kbn_field_types.mdx index 8213f9ee28f66..d2c3dc8088d43 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 68e4f0d3116fb..8d33659226e2c 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-02-21 +date: 2023-02-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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index affa92183f493..6285bd78aad1c 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-02-21 +date: 2023-02-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_generate.mdx b/api_docs/kbn_generate.mdx index 3fd8dc4fad5c3..a12b731e81a82 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 5e2a8257212e6..1fb38a717abf6 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-02-21 +date: 2023-02-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 dfcaeb8177ede..933afc75407ab 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-02-21 +date: 2023-02-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 d832fa1f08892..a433c650e6636 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-02-21 +date: 2023-02-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 904c8e9030cd9..d8c608dda917f 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-02-21 +date: 2023-02-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 64a8be7ee09a6..c189c00ae487d 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-02-21 +date: 2023-02-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 6055316ebaff3..c3965c5a54d8c 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-02-21 +date: 2023-02-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 2cb9c9a8cfa3a..7b89b37412f27 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-02-21 +date: 2023-02-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 9ff4b65f97fcc..2c328b138b0ed 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-02-21 +date: 2023-02-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 40b31612ad951..e7eae573de8f3 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index abc36c4c5455c..7e8856c341331 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-02-21 +date: 2023-02-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 1e18a8d3b7586..8f6ef7d12cfae 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-02-21 +date: 2023-02-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_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 234d28e295b15..27990ece5fc2e 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-02-21 +date: 2023-02-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 c85a757c4ed59..6186787494de9 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-02-21 +date: 2023-02-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 97a034693722e..584ffc19f24fc 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-02-21 +date: 2023-02-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 ae7075c556124..7473276664b6a 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-02-21 +date: 2023-02-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 78b6689e3620b..c61c2d5b5b1ee 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-02-21 +date: 2023-02-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_logging.mdx b/api_docs/kbn_logging.mdx index b52baaa950073..1a5486690d201 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-02-21 +date: 2023-02-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 0f17dea4d5288..f650b29e4c6ca 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 09afe4a531470..0f86a458ef364 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-02-21 +date: 2023-02-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_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 87352e3142191..f33c3258798d8 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 0b2ad6dcde023..b2f900ba95a6c 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-02-21 +date: 2023-02-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_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index b5a408b845b23..5b4aea536a671 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-02-21 +date: 2023-02-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_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index a17bf71066b85..e983c66de8941 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-02-21 +date: 2023-02-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 de78d68d1e53e..d05f4b24ea6a8 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-02-21 +date: 2023-02-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_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 41209eacc44a6..a562498f029bf 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-02-21 +date: 2023-02-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 9e80df4909ede..080e636896bf6 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-02-21 +date: 2023-02-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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 6bc362697e9a2..caee19e6bf1cf 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-02-21 +date: 2023-02-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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 596fe6523a2d2..927faf5319566 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-02-21 +date: 2023-02-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_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 99b64dfadbf3a..9944e12d0adb5 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-02-21 +date: 2023-02-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_monaco.mdx b/api_docs/kbn_monaco.mdx index 9a2501165adad..689dfe081bf8b 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 447ef2dddf8e1..7522ca07a0cbb 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-02-21 +date: 2023-02-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 b1f02f021a94e..2a93e781316a8 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-02-21 +date: 2023-02-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 f12bb05c5e02a..152fe5e3ca41a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-02-21 +date: 2023-02-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_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index bc4d50e4a8ec0..203f3cee97663 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-02-21 +date: 2023-02-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_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 6b2260140b27b..b400ae67ba67a 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-02-21 +date: 2023-02-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 0b7384d58217f..9eef0e20e6173 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index e38e032918779..f1307f4ee611e 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 18856c87584df..7515ba1dede62 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-02-21 +date: 2023-02-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 139bc59f09efd..a6795262f5ad7 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-02-21 +date: 2023-02-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 450ab51bb769e..fd451237e9748 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-02-21 +date: 2023-02-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 a3afc7e6e394c..a4d97d360ed83 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-02-21 +date: 2023-02-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_rison.mdx b/api_docs/kbn_rison.mdx index ef8fbeddce1b6..93592dd5f1941 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index ce2c207c44cb9..cb19994ce5109 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-02-21 +date: 2023-02-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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 213798600769a..e3dc7195c25c7 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index add3cfd3ddcb2..cd2efdb8ab695 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-02-21 +date: 2023-02-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 e1e4d7c386a6a..8d250e2a4fab0 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-02-21 +date: 2023-02-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 4a2c126f2c3f4..648ddb83dcba6 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-02-21 +date: 2023-02-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_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 741e6e52093bc..ac65688098133 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-02-21 +date: 2023-02-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 d64bd39381a14..9e2f3c66e32a0 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-02-21 +date: 2023-02-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 c1933b1d716a9..5d865ae5787cb 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-02-21 +date: 2023-02-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 d18659ef45b36..1bfb2c392e0f3 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-02-21 +date: 2023-02-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 7830db8ad32bf..1b8b85d173f05 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-02-21 +date: 2023-02-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 959df4c94ed3d..c4e0abe6b5080 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-02-21 +date: 2023-02-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 edfb2c6cdcc37..9c900ecd8652f 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-02-21 +date: 2023-02-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 8fa3a18ea5633..048f7ab49a733 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-02-21 +date: 2023-02-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 a93c450c85fcf..02ec6d3200784 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-02-21 +date: 2023-02-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 940401dcb1966..df55f55ed2e06 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-02-21 +date: 2023-02-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 455c90cf9eae3..1395de4f17b34 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-02-21 +date: 2023-02-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 ee287d3470065..b36dda44e671d 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-02-21 +date: 2023-02-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.mdx b/api_docs/kbn_server_http_tools.mdx index 1b5ebe0ee3ab9..ed54250119af9 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-02-21 +date: 2023-02-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 20564c2a15c2c..ce4d9fdde00cf 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-02-21 +date: 2023-02-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_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 8dd64775f30e8..262c77e7f062b 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-02-21 +date: 2023-02-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 6cfe61898f43f..c1e50f7dba731 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-02-21 +date: 2023-02-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_avatar_user_profile_components.mdx b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx index af72da48648c7..3914362340354 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-user-profile-components'] --- import kbnSharedUxAvatarUserProfileComponentsObj from './kbn_shared_ux_avatar_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 9a1487ae5aca8..b5d1660e9df95 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-02-21 +date: 2023-02-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_exit_full_screen_mocks.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx index 8b7a45e188408..689e8ad2e124c 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen-mocks'] --- import kbnSharedUxButtonExitFullScreenMocksObj from './kbn_shared_ux_button_exit_full_screen_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 84d5531642146..17c2dfb715875 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-02-21 +date: 2023-02-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 d6b422d937535..a2fea2e3111fb 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-02-21 +date: 2023-02-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 08f0073f79005..a67cf07e5b28b 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-02-21 +date: 2023-02-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_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 98e19c9f6c08e..5913a20118344 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-02-21 +date: 2023-02-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 e0f939a4b42ac..a6801384bf8b8 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-02-21 +date: 2023-02-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 bfd3ddd58aef3..198ae5b49b00d 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-02-21 +date: 2023-02-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 0e75a42baf3a8..493f47f4e9b67 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-02-21 +date: 2023-02-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 98cc4fdf9bf71..6640872b7d604 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-02-21 +date: 2023-02-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_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 0a87ef2e49859..59fd93a6babed 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-02-21 +date: 2023-02-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 41a8a4bc37989..9893d1871bf06 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-02-21 +date: 2023-02-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 b925d3df6c55e..bfcde889bef09 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-02-21 +date: 2023-02-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 c01f812af5a4b..bd926c128a8f3 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-02-21 +date: 2023-02-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 4b68fa6dc58ca..df204af883f7a 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-02-21 +date: 2023-02-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 1c703a2369b3c..49eddd8a9f06c 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-02-21 +date: 2023-02-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 3768fbcd49cc6..4510a233a9511 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-02-21 +date: 2023-02-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 6b1e2b8a5984b..5092b87c3d55f 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-02-21 +date: 2023-02-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 ec00c6ac80b1a..1ced6ba3f37bb 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-02-21 +date: 2023-02-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 42ab9f9f06b3b..177fa9c24afd1 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-02-21 +date: 2023-02-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 16b4ac7220b90..db05046ebedf6 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-02-21 +date: 2023-02-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 bdb90364b95ee..0dfdcc4f8b2c0 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-02-21 +date: 2023-02-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 120916cd68c1d..8d8dcd15f257d 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-02-21 +date: 2023-02-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 eb96fd40af573..8d46675145ce2 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-02-21 +date: 2023-02-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 b6d1deae0b930..84ec584b3fd88 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-02-21 +date: 2023-02-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 f427553fea303..653125f0b90f9 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-02-21 +date: 2023-02-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 d3cedcf51828e..bde06d7261bc4 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-02-21 +date: 2023-02-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 26a062a60edee..7a304119b3b06 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-02-21 +date: 2023-02-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 b39d624eb71e4..06c5add7a7c6c 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-02-21 +date: 2023-02-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 66fac2533b311..daafb4f8465c2 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-02-21 +date: 2023-02-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 35cc667e36f5a..fabe1be18825b 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-02-21 +date: 2023-02-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 049ebcb17cb97..7aeae3a3a6b1a 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-02-21 +date: 2023-02-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 be11e8095ce12..3bea26b657ab2 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-02-21 +date: 2023-02-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 0d993dc36582b..22e4e29361eeb 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-02-21 +date: 2023-02-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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 08ebaf46f88dc..cef4a3bf686d4 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-02-21 +date: 2023-02-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 3c3692c849172..f3577ce09bd65 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 471d20db13daf..e0ce41f2d312a 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-02-21 +date: 2023-02-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_std.mdx b/api_docs/kbn_std.mdx index 6af2033dfd0e7..b934c66b352b7 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-02-21 +date: 2023-02-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 2fa8c47bf0f20..02f78612b0e19 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-02-21 +date: 2023-02-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 013b04a6ab6a3..e81a3caac6a1b 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-02-21 +date: 2023-02-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 6487d555a588c..15343a9d10fd3 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-02-21 +date: 2023-02-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 0e7fb7d9c2538..e37e7404e01bd 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 355290bae78bf..8c623011ee80b 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-02-21 +date: 2023-02-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 5443337f7498c..823128b1507ce 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-02-21 +date: 2023-02-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_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 1987689104e19..7f38834280a2c 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 5b5f002032916..da196b99a2eb5 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-02-21 +date: 2023-02-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 e8c2d9140e38d..b0186a7eaef38 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-02-21 +date: 2023-02-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 4f630f5bb6c26..709dc8fe5d4a7 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-02-21 +date: 2023-02-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 590c9f141a32c..6699e3ae3a72e 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-02-21 +date: 2023-02-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 2d95a6167fe2b..406b0d31950b9 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 9c162f36e195c..ad5ab07afb3b4 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-02-21 +date: 2023-02-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 9e569eb13c66f..baea6336505ac 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-02-21 +date: 2023-02-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 28c69ad56caa3..332d054c84c64 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-02-21 +date: 2023-02-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 a81f4e3a573cb..979da7e8af8b6 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 0c8e51749bce7..7d0023fc7afd3 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 471920263bfca..0ad6d61a8d1c6 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-02-21 +date: 2023-02-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 a1cd10b5d2323..5963e56f66d7e 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-02-21 +date: 2023-02-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 443a6f043921b..e247b5efe098b 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-02-21 +date: 2023-02-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 16cacfa325773..008b6803db948 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-02-21 +date: 2023-02-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 b5294a551334e..6acfa2346e9fb 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-02-21 +date: 2023-02-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 40ce8a38d116e..790f98e3ddd5d 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-02-21 +date: 2023-02-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 77bedb1b11517..9ff6e16060236 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-02-21 +date: 2023-02-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 8ebf24f36e2e5..492b0b8e9eff8 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 561435c2be514..34e21f90f69ca 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 6d6bbc6a02f26..43029c741cf22 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-02-21 +date: 2023-02-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 f02a89ac26fcb..5263f92208fec 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-02-21 +date: 2023-02-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 3eb4448752b3e..df6f491f4f595 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 6635a01a23bb7..f8ea753a35c43 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 228899752c821..022b03256e6b1 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-02-21 +date: 2023-02-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 76588c2a1f27a..0416a4f58c2fa 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-02-21 +date: 2023-02-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 c1ef320f6acc1..4788c5b1b8020 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-02-21 +date: 2023-02-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 9a21cb27a02d1..a9fe231cb944b 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 9c86e4b570f5f..ac81901ba529d 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-02-21 +date: 2023-02-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 9c56b9606c241..0f547a2ec7bfd 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2380,6 +2380,20 @@ "deprecated": false, "trackAdoption": false, "children": [ + { + "parentPluginId": "observability", + "id": "def-public.ExploratoryEmbeddableProps.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "observability", "id": "def-public.ExploratoryEmbeddableProps.appId", @@ -2630,6 +2644,38 @@ ], "returnComment": [] }, + { + "parentPluginId": "observability", + "id": "def-public.ExploratoryEmbeddableProps.onLoad", + "type": "Function", + "tags": [], + "label": "onLoad", + "description": [], + "signature": [ + "((loading: boolean) => void) | undefined" + ], + "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observability", + "id": "def-public.ExploratoryEmbeddableProps.onLoad.$1", + "type": "boolean", + "tags": [], + "label": "loading", + "description": [], + "signature": [ + "boolean" + ], + "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "observability", "id": "def-public.ExploratoryEmbeddableProps.caseOwner", @@ -2800,6 +2846,20 @@ "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.ExploratoryEmbeddableProps.searchSessionId", + "type": "string", + "tags": [], + "label": "searchSessionId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability/public/components/shared/exploratory_view/embeddable/embeddable.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 920856da040ca..2bdf7a44c55a8 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,20 +8,20 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; -Contact [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) for questions regarding this plugin. +Contact [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) for questions regarding this plugin. **Code health stats** | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 615 | 43 | 609 | 32 | +| 619 | 43 | 613 | 32 | ## Client diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 18a3338a0bd36..5857090cae573 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index c859b841720ff..823e0e09fc7ab 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 573 | 469 | 39 | +| 573 | 469 | 38 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 67651 | 515 | 58481 | 1232 | +| 67699 | 515 | 58528 | 1234 | ## Plugin Directory @@ -35,7 +35,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 89 | 1 | 74 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Canvas application to Kibana | 9 | 0 | 8 | 3 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 87 | 0 | 71 | 28 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | The Case management system in Kibana | 92 | 0 | 75 | 28 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 270 | 16 | 255 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 41 | 0 | 11 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Chat available on Elastic Cloud deployments for quicker assistance. | 1 | 0 | 0 | 0 | @@ -47,7 +47,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | cloudLinks | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 17 | 0 | 2 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 13 | 0 | 13 | 1 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 41 | 0 | 41 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 46 | 0 | 46 | 3 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 270 | 0 | 266 | 9 | | crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | @@ -90,7 +90,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 62 | 0 | 62 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 254 | 1 | 45 | 5 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 1 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1079 | 3 | 974 | 26 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1087 | 3 | 982 | 27 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 68 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -127,7 +127,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | -| | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 615 | 43 | 609 | 32 | +| | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 619 | 43 | 613 | 32 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | painlessLab | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 219 | 7 | 163 | 12 | @@ -135,7 +135,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 36 | 0 | 16 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 21 | 0 | 21 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 257 | 0 | 228 | 13 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 258 | 0 | 229 | 13 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 24 | 0 | 19 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 216 | 2 | 175 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 16 | 0 | 16 | 0 | @@ -164,7 +164,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 257 | 1 | 214 | 20 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the transforms features provided by Elastic. Transforms enable you to convert existing Elasticsearch indices into summarized indices, which provide opportunities for new insights and analytics. | 4 | 0 | 4 | 1 | | translations | [@elastic/kibana-localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 559 | 11 | 530 | 49 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 560 | 11 | 531 | 50 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds UI Actions service to Kibana | 134 | 2 | 92 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Extends UI Actions plugin with more functionality | 206 | 0 | 140 | 9 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list which can be integrated into apps | 267 | 0 | 242 | 7 | @@ -394,12 +394,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-docs](https://github.com/orgs/elastic/teams/kibana-docs) | - | 68 | 0 | 68 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 19 | 0 | 11 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 35102 | 0 | 34695 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 35125 | 0 | 34718 | 0 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 9 | 0 | 1 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 4 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 0 | 14 | 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) | - | 250 | 1 | 192 | 15 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 251 | 1 | 193 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 12 | 0 | 12 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 16 | 0 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index b9618c23b8f65..ca90f53818d29 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-02-21 +date: 2023-02-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 db28fdc75ba51..92a6bf72ba860 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index df53b30d642e5..80802750fb4e7 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-02-21 +date: 2023-02-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 9cb366395527d..b643c0c5e765d 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-02-21 +date: 2023-02-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 a253b1d85aad9..c4ec0e27c4ed1 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 9e7abc7076580..899300a8b0ad8 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -321,9 +321,9 @@ "section": "def-common.RuleTypeParams", "text": "RuleTypeParams" }, - " = never>({ query, aggs, _source, track_total_hits: trackTotalHits, size, index, sort, search_after: searchAfter, }: { query?: object | undefined; aggs?: object | undefined; index: string | undefined; track_total_hits?: boolean | undefined; _source?: string[] | undefined; size?: number | undefined; sort?: ", + " = never>({ aggs, featureIds, index, query, search_after: searchAfter, size, sort, track_total_hits: trackTotalHits, _source, }: { aggs?: object | undefined; featureIds?: string[] | undefined; index?: string | undefined; query?: object | undefined; search_after?: (string | number)[] | undefined; size?: number | undefined; sort?: ", "SortOptions", - "[] | undefined; search_after?: (string | number)[] | undefined; }) => Promise<", + "[] | undefined; track_total_hits?: boolean | undefined; _source?: string[] | undefined; }) => Promise<", "SearchResponse", ">, Record[]>; getCurrent: []>; bulkGet: (params?: ", + ">(params: ", { "pluginId": "security", "scope": "public", "docId": "kibSecurityPluginApi", - "section": "def-public.UserProfileGetCurrentParams", - "text": "UserProfileGetCurrentParams" + "section": "def-public.UserProfileBulkGetParams", + "text": "UserProfileBulkGetParams" }, - " | undefined) => Promise<", + ") => Promise<", { "pluginId": "security", "scope": "common", "docId": "kibSecurityPluginApi", - "section": "def-common.GetUserProfileResponse", - "text": "GetUserProfileResponse" + "section": "def-common.UserProfile", + "text": "UserProfile" }, - ">; bulkGet: []>; getCurrent: (params: ", + ">(params?: ", { "pluginId": "security", "scope": "public", "docId": "kibSecurityPluginApi", - "section": "def-public.UserProfileBulkGetParams", - "text": "UserProfileBulkGetParams" + "section": "def-public.UserProfileGetCurrentParams", + "text": "UserProfileGetCurrentParams" }, - ") => Promise<", + " | undefined) => Promise<", { "pluginId": "security", "scope": "common", "docId": "kibSecurityPluginApi", - "section": "def-common.UserProfile", - "text": "UserProfile" + "section": "def-common.GetUserProfileResponse", + "text": "GetUserProfileResponse" }, - "[]>; }" + ">; }" ], "path": "x-pack/plugins/security/public/plugin.tsx", "deprecated": false, diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 70191ab01dddd..20f3f67992499 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-02-21 +date: 2023-02-22 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 7d8ff51f0d821..3fca53000d055 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 753021b212885..3c4112f5b12bb 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-02-21 +date: 2023-02-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 0a2150f3472a8..7c88529509d63 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index a07946b0b092d..6a9ef464b4a1a 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-02-21 +date: 2023-02-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 cc10d7b96133a..b7a23034f97ae 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-02-21 +date: 2023-02-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 fba351dcf90a6..5e6dd0c326df3 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-02-21 +date: 2023-02-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 1e632a9600bba..53877c1f379f1 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-02-21 +date: 2023-02-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 8e881116157f5..d27609972d4ea 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-02-21 +date: 2023-02-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 8a6bbb9e3cbaa..45a23863a7603 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-02-21 +date: 2023-02-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 0c6893e47cc3a..aec602235ecea 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-02-21 +date: 2023-02-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 58d6865457bff..7d8cb8fbfdc83 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-02-21 +date: 2023-02-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 8d75936a263a8..56d906f61b8bd 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 6349f41c5699b..8f6afa0b6a22d 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-02-21 +date: 2023-02-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 de4bac799f58a..06481d7cb1e1f 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-02-21 +date: 2023-02-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 76a65f5eb8c92..183bea6a7a636 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index 688489bebe219..bd2c23e17e0fc 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -2762,6 +2762,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.AlertsTableProps.casesData", + "type": "Object", + "tags": [], + "label": "casesData", + "description": [], + "signature": [ + "{ cases: Map; isLoading: boolean; }" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.AlertsTableProps.columns", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 0cd2f8955e1a1..86bbc27828a92 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.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 | |-------------------|-----------|------------------------|-----------------| -| 559 | 11 | 530 | 49 | +| 560 | 11 | 531 | 50 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 4125cdb045e35..d2f75cdadaf80 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-02-21 +date: 2023-02-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 eea96407dace6..bf728dcf6e4af 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_field_list.mdx b/api_docs/unified_field_list.mdx index 34d2c09362829..46fe9159c1b3a 100644 --- a/api_docs/unified_field_list.mdx +++ b/api_docs/unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedFieldList title: "unifiedFieldList" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedFieldList plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedFieldList'] --- import unifiedFieldListObj from './unified_field_list.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index ddc71d4cfd0b3..b41ff3a4825b7 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-02-21 +date: 2023-02-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 651e8c93786c9..152a96e32fcfa 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-02-21 +date: 2023-02-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 e5bcf93633d3f..c6f0835d6d807 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 73feec578abc9..259a59040d68e 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-02-21 +date: 2023-02-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 35aae853c2e12..5c7d485d13000 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-02-21 +date: 2023-02-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 3b184cd0f3e92..f1a6c2942c2c5 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-02-21 +date: 2023-02-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 c1909f3b2ff58..e5721b92a859b 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-02-21 +date: 2023-02-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 d0eb416f6c0b0..27036c12206fb 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-02-21 +date: 2023-02-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 e12b5502a0c0f..9cd7efc20188d 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-02-21 +date: 2023-02-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 444127e1ec286..e1cec18a5f5e7 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-02-21 +date: 2023-02-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 8b4667ed7e8b3..0032031091454 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-02-21 +date: 2023-02-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 72a47efd044dd..65b5fe199ab0d 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-02-21 +date: 2023-02-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 e45229f25e088..0ab63eb8a1f12 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-02-21 +date: 2023-02-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 10248e6aa1b28..867534e663eb3 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-02-21 +date: 2023-02-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 f1761d76647b8..3a61dfd4e18bb 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-02-21 +date: 2023-02-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 01232bd409ecd..ca42d227a9945 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-02-21 +date: 2023-02-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 fb6fa4c55159c..46dd73403f330 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-02-21 +date: 2023-02-22 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 67e19ec2b2433dc720d308ded44e71e7bbea312b Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 22 Feb 2023 08:42:19 +0200 Subject: [PATCH 208/210] [Visualizations] Fixes legend actions accessibility (#151678) ## Summary Closes https://github.com/elastic/kibana/issues/148647 Fixes accessibility problem on legend actions button. --- .../public/utils/get_legend_actions.tsx | 3 +++ .../expression_xy/public/components/legend_action_popover.tsx | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/plugins/chart_expressions/expression_partition_vis/public/utils/get_legend_actions.tsx b/src/plugins/chart_expressions/expression_partition_vis/public/utils/get_legend_actions.tsx index 9ef6fbb13d50d..9852040060e7c 100644 --- a/src/plugins/chart_expressions/expression_partition_vis/public/utils/get_legend_actions.tsx +++ b/src/plugins/chart_expressions/expression_partition_vis/public/utils/get_legend_actions.tsx @@ -130,6 +130,9 @@ export const getLegendActions = ( data-test-subj={`legend-${title}`} onKeyPress={() => setPopoverOpen(!popoverOpen)} onClick={() => setPopoverOpen(!popoverOpen)} + aria-label={i18n.translate('expressionPartitionVis.legend.legendActionsAria', { + defaultMessage: 'Legend actions', + })} >
diff --git a/src/plugins/chart_expressions/expression_xy/public/components/legend_action_popover.tsx b/src/plugins/chart_expressions/expression_xy/public/components/legend_action_popover.tsx index e01ed18b106ce..1a6fae2feb153 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/legend_action_popover.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/legend_action_popover.tsx @@ -98,6 +98,9 @@ export const LegendActionPopover: React.FunctionComponent setPopoverOpen(!popoverOpen)} onClick={() => setPopoverOpen(!popoverOpen)} + aria-label={i18n.translate('expressionXY.legend.legendActionsAria', { + defaultMessage: 'Legend actions', + })} >