diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json index 2bf8ce04b47399..df1114379a1cb7 100644 --- a/.buildkite/package-lock.json +++ b/.buildkite/package-lock.json @@ -19,10 +19,10 @@ "@types/chai": "^4.2.10", "@types/js-yaml": "^4.0.5", "@types/minimatch": "^3.0.5", - "@types/mocha": "^7.0.2", + "@types/mocha": "^8.2.3", "@types/node": "^15.12.2", "chai": "^4.2.0", - "mocha": "^8.2.1", + "mocha": "^8.4.0", "nock": "^12.0.2", "ts-node": "^10.7.0", "typescript": "^4.6.4" @@ -260,9 +260,9 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", "dev": true }, "node_modules/@types/node": { @@ -1958,9 +1958,9 @@ "dev": true }, "@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", "dev": true }, "@types/node": { diff --git a/.buildkite/package.json b/.buildkite/package.json index c7255a565235d9..797fbc9a9910da 100644 --- a/.buildkite/package.json +++ b/.buildkite/package.json @@ -18,10 +18,10 @@ "@types/chai": "^4.2.10", "@types/js-yaml": "^4.0.5", "@types/minimatch": "^3.0.5", - "@types/mocha": "^7.0.2", + "@types/mocha": "^8.2.3", "@types/node": "^15.12.2", "chai": "^4.2.0", - "mocha": "^8.2.1", + "mocha": "^8.4.0", "nock": "^12.0.2", "ts-node": "^10.7.0", "typescript": "^4.6.4" diff --git a/.buildkite/scripts/steps/checks/verify_notice.sh b/.buildkite/scripts/steps/checks/verify_notice.sh index aa21c0a6bb24a5..78045cf91370cf 100755 --- a/.buildkite/scripts/steps/checks/verify_notice.sh +++ b/.buildkite/scripts/steps/checks/verify_notice.sh @@ -5,4 +5,10 @@ set -euo pipefail source .buildkite/scripts/common/util.sh echo --- Verify NOTICE -node scripts/notice --validate + +if is_pr && ! is_auto_commit_disabled; then + node scripts/notice + check_for_changed_files "node scripts/notice" true +else + node scripts/notice --validate +fi diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 783ea220ef5a63..696e2501518a84 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -877,6 +877,7 @@ packages/home/sample_data_types @elastic/kibana-global-experience packages/kbn-ace @elastic/platform-deployment-management packages/kbn-alerts @elastic/security-solution packages/kbn-ambient-common-types @elastic/kibana-operations +packages/kbn-ambient-ftr-types @elastic/kibana-operations packages/kbn-ambient-storybook-types @elastic/kibana-operations packages/kbn-ambient-ui-types @elastic/kibana-operations packages/kbn-analytics @elastic/kibana-core diff --git a/NOTICE.txt b/NOTICE.txt index adbd050e0b7f60..5115746affeb24 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -21,6 +21,20 @@ used. Logarithmic ticks are places at powers of ten and at half those values if there are not to many ticks already (e.g. [1, 5, 10, 50, 100]). For details, see https://github.com/flot/flot/pull/1328 +--- +These types are extracted from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/bb83a9839cb23195f3f0ac5a0ec61af879f194e9/types/mocha +and modified for use in the Kibana repository. + +This project is licensed under the MIT license. + +Copyrights are respective of each contributor listed at the beginning of each definition file. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + --- This module was heavily inspired by the externals plugin that ships with webpack@97d58d31 MIT License http://www.opensource.org/licenses/mit-license.php diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 6a98b3ab929c6a..98232d64efebff 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: 2022-12-19 +date: 2022-12-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 c872e7f34a1404..ff2b87959c8195 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: 2022-12-19 +date: 2022-12-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 6c671e9a34f277..c3a7bcb2ed61ff 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: 2022-12-19 +date: 2022-12-20 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 bb2631b0e32e13..b9e69447237417 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -1528,6 +1528,20 @@ "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.GetSummarizedAlertsFnOpts.excludedAlertInstanceIds", + "type": "Array", + "tags": [], + "label": "excludedAlertInstanceIds", + "description": [], + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 25c277a4b55ded..366e9a4f1a601a 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 420 | 0 | 411 | 35 | +| 421 | 0 | 412 | 35 | ## Client diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 40e55fd4ce9151..c4b3fa48bfd750 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: 2022-12-19 +date: 2022-12-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 53be76bed12a85..f918cbfe725606 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: 2022-12-19 +date: 2022-12-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 fd0c7d2e91449e..319765cb24a95a 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: 2022-12-19 +date: 2022-12-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 269ed0537221cc..c2528bb7fced48 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: 2022-12-19 +date: 2022-12-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 376bfdc4b23ad3..4df83673949c89 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: 2022-12-19 +date: 2022-12-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 2beb9b1ebebeb8..5c6bf12c59637c 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: 2022-12-19 +date: 2022-12-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 1b3c5a5e122036..d5cfc29438715d 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: 2022-12-19 +date: 2022-12-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 09db63dfe877ba..0f43f2882358ff 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: 2022-12-19 +date: 2022-12-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 dd5cfb5f969552..400902bf0b7945 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.devdocs.json b/api_docs/cloud_defend.devdocs.json new file mode 100644 index 00000000000000..f155214541b73e --- /dev/null +++ b/api_docs/cloud_defend.devdocs.json @@ -0,0 +1,55 @@ +{ + "id": "cloudDefend", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "setup": { + "parentPluginId": "cloudDefend", + "id": "def-public.CloudDefendPluginSetup", + "type": "Interface", + "tags": [], + "label": "CloudDefendPluginSetup", + "description": [], + "path": "x-pack/plugins/cloud_defend/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + }, + "start": { + "parentPluginId": "cloudDefend", + "id": "def-public.CloudDefendPluginStart", + "type": "Interface", + "tags": [], + "label": "CloudDefendPluginStart", + "description": [], + "path": "x-pack/plugins/cloud_defend/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + } + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx new file mode 100644 index 00000000000000..3e37fa4c85314b --- /dev/null +++ b/api_docs/cloud_defend.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibCloudDefendPluginApi +slug: /kibana-dev-docs/api/cloudDefend +title: "cloudDefend" +image: https://source.unsplash.com/400x175/?github +description: API docs for the cloudDefend plugin +date: 2022-12-20 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] +--- +import cloudDefendObj from './cloud_defend.devdocs.json'; + +Defend for Containers + +Contact [Cloud Native Integrations](https://github.com/orgs/elastic/teams/sec-cloudnative-integrations) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 2 | 0 | 2 | 0 | + +## Client + +### Setup + + +### Start + + diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 8d907a029b64a5..979be6ca6d2b0c 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: 2022-12-19 +date: 2022-12-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 d7fec137ee6a85..844e465027b680 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: 2022-12-19 +date: 2022-12-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 67aad2a99e5b55..35ee6f48a23ae3 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index 7f408645b5cc39..bcd8519dddd92f 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -3340,7 +3340,7 @@ "section": "def-public.ControlGroupRendererProps", "text": "ControlGroupRendererProps" }, - "> & { readonly _result: ({ onLoadComplete, getInitialInput, }: ", + "> & { readonly _result: ({ onLoadComplete, getInitialInput, filters, timeRange, query, }: ", { "pluginId": "controls", "scope": "public", @@ -3911,49 +3911,24 @@ "children": [ { "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.onLoadComplete", - "type": "Function", + "id": "def-public.ControlGroupRendererProps.filters", + "type": "Array", "tags": [], - "label": "onLoadComplete", + "label": "filters", "description": [], "signature": [ - "((controlGroup: ", { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" }, - ") => void) | undefined" + "[] | undefined" ], "path": "src/plugins/controls/public/control_group/control_group_renderer.tsx", "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.ControlGroupRendererProps.onLoadComplete.$1", - "type": "Object", - "tags": [], - "label": "controlGroup", - "description": [], - "signature": [ - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.ControlGroupContainer", - "text": "ControlGroupContainer" - } - ], - "path": "src/plugins/controls/public/control_group/control_group_renderer.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] + "trackAdoption": false }, { "parentPluginId": "controls", @@ -4125,6 +4100,94 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRendererProps.onLoadComplete", + "type": "Function", + "tags": [], + "label": "onLoadComplete", + "description": [], + "signature": [ + "((controlGroup: ", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupContainer", + "text": "ControlGroupContainer" + }, + ") => void) | undefined" + ], + "path": "src/plugins/controls/public/control_group/control_group_renderer.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRendererProps.onLoadComplete.$1", + "type": "Object", + "tags": [], + "label": "controlGroup", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupContainer", + "text": "ControlGroupContainer" + } + ], + "path": "src/plugins/controls/public/control_group/control_group_renderer.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRendererProps.timeRange", + "type": "Object", + "tags": [], + "label": "timeRange", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.TimeRange", + "text": "TimeRange" + }, + " | undefined" + ], + "path": "src/plugins/controls/public/control_group/control_group_renderer.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupRendererProps.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | undefined" + ], + "path": "src/plugins/controls/public/control_group/control_group_renderer.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 53ecaa2ea25c1d..1453a95df111d7 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-prese | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 268 | 0 | 259 | 10 | +| 271 | 0 | 262 | 10 | ## Client diff --git a/api_docs/core.devdocs.json b/api_docs/core.devdocs.json index b651421a739030..38c8ac146e4d5b 100644 --- a/api_docs/core.devdocs.json +++ b/api_docs/core.devdocs.json @@ -24493,96 +24493,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "core", - "id": "def-server.CheckAuthorizationParams", - "type": "Interface", - "tags": [], - "label": "CheckAuthorizationParams", - "description": [ - "\nThe CheckAuthorizationParams interface contains settings for checking\nauthorization via the ISavedObjectsSecurityExtension." - ], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-server", - "scope": "server", - "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-server.CheckAuthorizationParams", - "text": "CheckAuthorizationParams" - }, - "" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "core", - "id": "def-server.CheckAuthorizationParams.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": "core", - "id": "def-server.CheckAuthorizationParams.spaces", - "type": "Object", - "tags": [], - "label": "spaces", - "description": [ - "\nA set of spaces to check." - ], - "signature": [ - "Set" - ], - "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "core", - "id": "def-server.CheckAuthorizationParams.actions", - "type": "Object", - "tags": [], - "label": "actions", - "description": [ - "\nAn 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": "core", - "id": "def-server.CheckAuthorizationParams.options", - "type": "Object", - "tags": [], - "label": "options", - "description": [ - "\nAuthorization options - 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": "core", "id": "def-server.CheckAuthorizationResult", @@ -35365,22 +35275,6 @@ "path": "packages/core/http/core-http-server/src/router/socket.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "core", - "id": "def-server.IKibanaSocket.remoteAddress", - "type": "string", - "tags": [], - "label": "remoteAddress", - "description": [ - "\nThe string representation of the remote IP address. For example,`'74.125.127.100'` or\n`'2001:4860:a005::68'`. Value may be `undefined` if the socket is destroyed (for example, if\nthe client disconnected)." - ], - "signature": [ - "string | undefined" - ], - "path": "packages/core/http/core-http-server/src/router/socket.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false @@ -39032,12 +38926,12 @@ "children": [ { "parentPluginId": "core", - "id": "def-server.ISavedObjectsSecurityExtension.checkAuthorization", + "id": "def-server.ISavedObjectsSecurityExtension.performAuthorization", "type": "Function", "tags": [], - "label": "checkAuthorization", + "label": "performAuthorization", "description": [ - "\nChecks authorization of actions on specified types in specified spaces." + "\nPerforms authorization (check & enforce) of actions on specified types in specified spaces." ], "signature": [ "(params: ", @@ -39045,8 +38939,8 @@ "pluginId": "@kbn/core-saved-objects-server", "scope": "server", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-server.CheckAuthorizationParams", - "text": "CheckAuthorizationParams" + "section": "def-server.PerformAuthorizationParams", + "text": "PerformAuthorizationParams" }, ") => Promise<", { @@ -39064,20 +38958,20 @@ "children": [ { "parentPluginId": "core", - "id": "def-server.ISavedObjectsSecurityExtension.checkAuthorization.$1", + "id": "def-server.ISavedObjectsSecurityExtension.performAuthorization.$1", "type": "Object", "tags": [], "label": "params", "description": [ - "- types, spaces, and actions to check" + "- actions, types & spaces map, audit callback, options (enforce bypassed if enforce map is undefined)" ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "server", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-server.CheckAuthorizationParams", - "text": "CheckAuthorizationParams" + "section": "def-server.PerformAuthorizationParams", + "text": "PerformAuthorizationParams" }, "" ], @@ -45555,6 +45449,146 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "core", + "id": "def-server.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": "server", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-server.PerformAuthorizationParams", + "text": "PerformAuthorizationParams" + }, + "" + ], + "path": "packages/core/saved-objects/core-saved-objects-server/src/extensions/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "core", + "id": "def-server.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": "core", + "id": "def-server.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": "core", + "id": "def-server.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": "core", + "id": "def-server.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": "core", + "id": "def-server.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": "core", + "id": "def-server.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": "core", + "id": "def-server.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": "core", "id": "def-server.Plugin", diff --git a/api_docs/core.mdx b/api_docs/core.mdx index af3ccd167cca42..ba0dd10b962a73 100644 --- a/api_docs/core.mdx +++ b/api_docs/core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/core title: "core" image: https://source.unsplash.com/400x175/?github description: API docs for the core plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'core'] --- import coreObj from './core.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 2809 | 17 | 1013 | 0 | +| 2811 | 17 | 1014 | 0 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 8aaa7b1f1c3d99..412d5419fa05c3 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: 2022-12-19 +date: 2022-12-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 140793152439cc..4a9d8671d9e37f 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: 2022-12-19 +date: 2022-12-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 6f5261bc7a6c0c..3700ba873b0cd1 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: 2022-12-19 +date: 2022-12-20 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 ced8ea708db744..7d5fb1001a6670 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -13013,7 +13013,7 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -13021,15 +13021,15 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_nested_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -13055,6 +13055,18 @@ "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/filters/build_filters/phrases_filter.test.ts" }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, { "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/kuery/ast/ast.test.ts" @@ -20715,7 +20727,7 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -20723,15 +20735,15 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_nested_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -20757,6 +20769,18 @@ "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/filters/build_filters/phrases_filter.test.ts" }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, { "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/kuery/ast/ast.test.ts" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 99937626618700..d0e29344179afa 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.devdocs.json b/api_docs/data_query.devdocs.json index 744933b9b734f3..c7e0eeb12f5a12 100644 --- a/api_docs/data_query.devdocs.json +++ b/api_docs/data_query.devdocs.json @@ -1756,11 +1756,11 @@ }, ", indexPatterns: ", { - "pluginId": "dataViews", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" }, "[]) => string" ], @@ -1798,11 +1798,11 @@ "description": [], "signature": [ { - "pluginId": "dataViews", + "pluginId": "@kbn/es-query", "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" }, "[]" ], @@ -1832,6 +1832,14 @@ "text": "Filter" }, ", indexPatterns: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + "[] | ", { "pluginId": "dataViews", "scope": "common", @@ -1869,11 +1877,19 @@ { "parentPluginId": "data", "id": "def-public.getFieldDisplayValueFromFilter.$2", - "type": "Array", + "type": "CompoundType", "tags": [], "label": "indexPatterns", "description": [], "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + "[] | ", { "pluginId": "dataViews", "scope": "common", @@ -1908,23 +1924,7 @@ "section": "def-common.Filter", "text": "Filter" }, - ", indexPatterns: ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - "[]) => ", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - " | undefined" + ", indexPatterns: T[]) => T | undefined" ], "path": "src/plugins/data/public/query/filter_manager/lib/get_index_pattern_from_filter.ts", "deprecated": false, @@ -1959,14 +1959,7 @@ "label": "indexPatterns", "description": [], "signature": [ - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataView", - "text": "DataView" - }, - "[]" + "T[]" ], "path": "src/plugins/data/public/query/filter_manager/lib/get_index_pattern_from_filter.ts", "deprecated": false, diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 9b86339b353da2..356ec3a8d819d4 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: 2022-12-19 +date: 2022-12-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 51aa208e630f6b..90e01cfdc28a43 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: 2022-12-19 +date: 2022-12-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 ffecfb65a65439..a26e6f46fb5c7d 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: 2022-12-19 +date: 2022-12-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 e100fd7b1b63d1..9b2a14c91eed53 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: 2022-12-19 +date: 2022-12-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 2ef632b6a3254e..7856de22246027 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: 2022-12-19 +date: 2022-12-20 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 3df29041f2824c..10a1bffb92de27 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -165,7 +165,7 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -173,15 +173,15 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_nested_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -207,6 +207,18 @@ "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/filters/build_filters/phrases_filter.test.ts" }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, { "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/kuery/ast/ast.test.ts" @@ -8466,7 +8478,7 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -8474,15 +8486,15 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_nested_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -8508,6 +8520,18 @@ "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/filters/build_filters/phrases_filter.test.ts" }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, { "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/kuery/ast/ast.test.ts" @@ -15848,7 +15872,7 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -15856,15 +15880,15 @@ }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_filters.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_kuery.test.ts" }, { "plugin": "@kbn/es-query", - "path": "packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts" + "path": "packages/kbn-es-query/src/es_query/from_nested_filter.test.ts" }, { "plugin": "@kbn/es-query", @@ -15890,6 +15914,18 @@ "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/filters/build_filters/phrases_filter.test.ts" }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, + { + "plugin": "@kbn/es-query", + "path": "packages/kbn-es-query/src/filters/helpers/compare_filters.test.ts" + }, { "plugin": "@kbn/es-query", "path": "packages/kbn-es-query/src/kuery/ast/ast.test.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index a20d552f2f46b0..7122b56eaac2b8 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: 2022-12-19 +date: 2022-12-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 b1f8b5e89bde0e..7bf154b4ba3a86 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: 2022-12-19 +date: 2022-12-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 76e4d640decf05..f26e5e9594a176 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index fe214a1aef2b2b..70158ccf3f8714 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -165,9 +165,9 @@ so TS and code-reference navigation might not highlight them. | | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [types.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/types.ts#:~:text=title), [build_es_query.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/build_es_query.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_kuery.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_kuery.test.ts#:~:text=title), [handle_combined_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts#:~:text=title), [handle_nested_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts#:~:text=title), [build_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/build_filter.test.ts#:~:text=title), [exists_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/exists_filter.test.ts#:~:text=title), [get_filter_field.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/get_filter_field.test.ts#:~:text=title)+ 36 more | - | -| | [types.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/types.ts#:~:text=title), [build_es_query.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/build_es_query.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_kuery.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_kuery.test.ts#:~:text=title), [handle_combined_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts#:~:text=title), [handle_nested_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts#:~:text=title), [build_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/build_filter.test.ts#:~:text=title), [exists_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/exists_filter.test.ts#:~:text=title), [get_filter_field.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/get_filter_field.test.ts#:~:text=title)+ 36 more | - | -| | [types.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/types.ts#:~:text=title), [build_es_query.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/build_es_query.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_kuery.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_kuery.test.ts#:~:text=title), [handle_combined_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/handle_combined_filter.test.ts#:~:text=title), [handle_nested_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/handle_nested_filter.test.ts#:~:text=title), [build_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/build_filter.test.ts#:~:text=title), [exists_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/exists_filter.test.ts#:~:text=title), [get_filter_field.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/get_filter_field.test.ts#:~:text=title)+ 13 more | - | +| | [types.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/types.ts#:~:text=title), [build_es_query.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/build_es_query.test.ts#:~:text=title), [from_combined_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_combined_filter.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_kuery.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_kuery.test.ts#:~:text=title), [from_nested_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_nested_filter.test.ts#:~:text=title), [build_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/build_filter.test.ts#:~:text=title), [exists_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/exists_filter.test.ts#:~:text=title), [get_filter_field.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/get_filter_field.test.ts#:~:text=title)+ 42 more | - | +| | [types.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/types.ts#:~:text=title), [build_es_query.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/build_es_query.test.ts#:~:text=title), [from_combined_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_combined_filter.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_kuery.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_kuery.test.ts#:~:text=title), [from_nested_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_nested_filter.test.ts#:~:text=title), [build_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/build_filter.test.ts#:~:text=title), [exists_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/exists_filter.test.ts#:~:text=title), [get_filter_field.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/get_filter_field.test.ts#:~:text=title)+ 42 more | - | +| | [types.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/types.ts#:~:text=title), [build_es_query.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/build_es_query.test.ts#:~:text=title), [from_combined_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_combined_filter.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_filters.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_filters.test.ts#:~:text=title), [from_kuery.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_kuery.test.ts#:~:text=title), [from_nested_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/es_query/from_nested_filter.test.ts#:~:text=title), [build_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/build_filter.test.ts#:~:text=title), [exists_filter.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/exists_filter.test.ts#:~:text=title), [get_filter_field.test.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-es-query/src/filters/build_filters/get_filter_field.test.ts#:~:text=title)+ 16 more | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index af3f25c75d1e98..c9244ae77e9cb7 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 8a3694acb49afe..f8584c191894b8 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: 2022-12-19 +date: 2022-12-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 238bd9e21fb846..cc69aa28bd5f9b 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: 2022-12-19 +date: 2022-12-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 69b5c2db6c08ef..0031afbf5a82ec 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index cb912b4de95a84..8732fa7880141c 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -7179,15 +7179,31 @@ "tags": [], "label": "getExplicitInput", "description": [ - "\nCan be used to request explicit input from the user, to be passed in to `EmbeddableFactory:create`.\nExplicit input is stored on the parent container for this embeddable. It overrides all inherited\ninput passed down from the parent container." + "\nCan be used to request explicit input from the user, to be passed in to `EmbeddableFactory:create`.\nExplicit input is stored on the parent container for this embeddable. It overrides all inherited\ninput passed down from the parent container.\n\nCan be used to edit an embeddable by re-requesting explicit input. Initial input can be provided to allow the editor to show the current state." ], "signature": [ - "() => Promise>" + "(initialInput?: Partial | undefined) => Promise>" ], "path": "src/plugins/embeddable/public/lib/embeddables/embeddable_factory.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "embeddable", + "id": "def-public.EmbeddableFactory.getExplicitInput.$1", + "type": "Object", + "tags": [], + "label": "initialInput", + "description": [], + "signature": [ + "Partial | undefined" + ], + "path": "src/plugins/embeddable/public/lib/embeddables/embeddable_factory.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], "returnComment": [] }, { @@ -7601,6 +7617,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "embeddable", + "id": "def-public.EmbeddableOutput.editableWithExplicitInput", + "type": "CompoundType", + "tags": [], + "label": "editableWithExplicitInput", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/embeddable/public/lib/embeddables/i_embeddable.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "embeddable", "id": "def-public.EmbeddableOutput.savedObjectId", diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 9036b1713f6e03..84ddc9c0e60539 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; @@ -21,7 +21,7 @@ Contact [App Services](https://github.com/orgs/elastic/teams/kibana-app-services | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 522 | 8 | 421 | 4 | +| 524 | 8 | 423 | 4 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index cbf80d48821303..19a18da603606d 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: 2022-12-19 +date: 2022-12-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 5f0808b3405663..9f07975955d5ea 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: 2022-12-19 +date: 2022-12-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 a0fcf90959eeb2..eb36cf7680865e 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: 2022-12-19 +date: 2022-12-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 305179b2aa871e..2e4cf2d78b4320 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: 2022-12-19 +date: 2022-12-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 0436f1c723079c..1c7641351228a7 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: 2022-12-19 +date: 2022-12-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 fa42d391bf7152..22de94d18660df 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: 2022-12-19 +date: 2022-12-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 ab70290265cad6..d2a982e3c3bd27 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: 2022-12-19 +date: 2022-12-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 2c589527edd489..ea13b3b9442d46 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: 2022-12-19 +date: 2022-12-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 1799e407926a47..ecb1cf3c4d6313 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: 2022-12-19 +date: 2022-12-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 8da3e9661bdd12..49accc341591ec 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: 2022-12-19 +date: 2022-12-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 b344d9c6942174..4647b6010ca2cb 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: 2022-12-19 +date: 2022-12-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 5ae7ae44489ee6..01e0ead3900a53 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: 2022-12-19 +date: 2022-12-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 f8597b25487fb2..6bc56e28373c32 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: 2022-12-19 +date: 2022-12-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 7630444c201c60..78d637da70f811 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: 2022-12-19 +date: 2022-12-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 9e68c12721dc21..f1701e24c59d4d 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: 2022-12-19 +date: 2022-12-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 adf7f87deff1bc..7b348bb6e4744a 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: 2022-12-19 +date: 2022-12-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 48ebfdbf411dc2..4a66609653292b 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: 2022-12-19 +date: 2022-12-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 69e8b934c868d4..4d2fa25c262e85 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: 2022-12-19 +date: 2022-12-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 8c9214ff3fcdf0..a1ecd7abcb70a9 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: 2022-12-19 +date: 2022-12-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 7fe9c4c3d26106..7cfa3a29be8f53 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: 2022-12-19 +date: 2022-12-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 74dbfa020e1cb7..bb474c46c4884d 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: 2022-12-19 +date: 2022-12-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 72d4408e11fc4d..f137e5a686b9f3 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: 2022-12-19 +date: 2022-12-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 51264e812068fc..705285aa713f81 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: 2022-12-19 +date: 2022-12-20 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 664a95623f5a96..193350e129e16e 100644 --- a/api_docs/files.devdocs.json +++ b/api_docs/files.devdocs.json @@ -600,6 +600,10 @@ { "plugin": "filesManagement", "path": "src/plugins/files_management/public/mount_management_section.tsx" + }, + { + "plugin": "imageEmbeddable", + "path": "src/plugins/image_embeddable/public/plugin.ts" } ] }, diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 1ae4e984f6ebc1..cda69f011aef6e 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: 2022-12-19 +date: 2022-12-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 580137f8e29ba5..acb4107ed5ef75 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: 2022-12-19 +date: 2022-12-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 f8db6924db67ab..5ed532d735777f 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: 2022-12-19 +date: 2022-12-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 776d9689ebbf5f..7e1dbcd2e6339e 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: 2022-12-19 +date: 2022-12-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 bff609ac08a291..d9b664842b6c8f 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: 2022-12-19 +date: 2022-12-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 4a99fb03335b70..96b0e312ad3461 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 63c23d9f326f15..748af83efb536e 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: 2022-12-19 +date: 2022-12-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 7cfa122744dbd8..136a9c2d8abc04 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: 2022-12-19 +date: 2022-12-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 44228b7b5e5fce..3f31c99efb4c18 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: 2022-12-19 +date: 2022-12-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 b6c6d0b2127038..8dedf4eccffa0d 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: 2022-12-19 +date: 2022-12-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 e3b723cffbff3d..8a1a1a45c55679 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: 2022-12-19 +date: 2022-12-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 00a1abc16a8bb0..7dd9406e62857b 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: 2022-12-19 +date: 2022-12-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 5be7193df271cb..49fb3b4cbfea16 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: 2022-12-19 +date: 2022-12-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 ad2bc808fb55cc..8047b934bad212 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: 2022-12-19 +date: 2022-12-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 762c68662f6fc7..4b529e782b57d2 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts'] --- import kbnAlertsObj from './kbn_alerts.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 9b51869f2f8601..e78c8a7fab2992 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: 2022-12-19 +date: 2022-12-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 0fc22fc6a3dee3..880378b9fa61f1 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: 2022-12-19 +date: 2022-12-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 d5f5ff9cd0400c..bcec456c3073ef 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: 2022-12-19 +date: 2022-12-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 fd8c25dae28fb1..846ebb476e941c 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: 2022-12-19 +date: 2022-12-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 ef0f8a14f2715f..3e68a82a4933ab 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: 2022-12-19 +date: 2022-12-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 a3d6354d92ba66..59b7a0b1066e7f 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: 2022-12-19 +date: 2022-12-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 fac93033a0b022..eb642747b4e48a 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: 2022-12-19 +date: 2022-12-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 e3b37a0be32755..1010ac5e2dd97a 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: 2022-12-19 +date: 2022-12-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 785acc7b96fec2..0bc98e042151b7 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index d9b06a61054f7d..a3360dd325850a 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: 2022-12-19 +date: 2022-12-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 f52f12fddbed61..79ff4791bfb330 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: 2022-12-19 +date: 2022-12-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 6ce576b5dcf12a..07fd64a5eac489 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index b4c4ddef5e1e71..b45945a95457bf 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: 2022-12-19 +date: 2022-12-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 52241910be7238..3fceeea493c6d0 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: 2022-12-19 +date: 2022-12-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 1123449eb74555..dc2720e699358f 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: 2022-12-19 +date: 2022-12-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 888b05c42cdaf4..ffd42db8b26fed 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: 2022-12-19 +date: 2022-12-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 f6b70aa1cf95bb..6aba149726403f 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: 2022-12-19 +date: 2022-12-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_coloring.mdx b/api_docs/kbn_coloring.mdx index 39b1d65a747a9d..fc5aac790de65b 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: 2022-12-19 +date: 2022-12-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 49bdaff30bab58..c8d1585b4b6a2b 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: 2022-12-19 +date: 2022-12-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 8c3e780c708429..176933bf1c9081 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: 2022-12-19 +date: 2022-12-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 1c2a816c234f35..c591987bdd506e 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: 2022-12-19 +date: 2022-12-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 bb301b345eb101..d2898bb4fa5311 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_content_management_table_list.devdocs.json index cd7801e4b598c8..937dddb17c4deb 100644 --- a/api_docs/kbn_content_management_table_list.devdocs.json +++ b/api_docs/kbn_content_management_table_list.devdocs.json @@ -35,7 +35,7 @@ "section": "def-common.UserContentCommonSchema", "text": "UserContentCommonSchema" }, - ">({ tableListTitle, tableListDescription, entityName, entityNamePlural, initialFilter: initialQuery, headingId, initialPageSize, listingLimit, customTableColumn, emptyPrompt, findItems, createItem, editItem, deleteItems, getDetailViewLink, onClickTitle, id, contentEditor, children, titleColumnName, additionalRightSideActions, withoutPageTemplateWrapper, }: ", + ">({ tableListTitle, tableListDescription, entityName, entityNamePlural, initialFilter: initialQuery, headingId, initialPageSize, listingLimit, urlStateEnabled, customTableColumn, emptyPrompt, findItems, createItem, editItem, deleteItems, getDetailViewLink, onClickTitle, id: listingId, contentEditor, children, titleColumnName, additionalRightSideActions, withoutPageTemplateWrapper, }: ", "Props", ") => JSX.Element | null" ], @@ -305,11 +305,11 @@ "Tag", ") => void) | undefined; tagRender?: ((tag: ", "Tag", - ") => JSX.Element) | undefined; }>; SavedObjectSaveModalTagSelector: React.FC<{ initialSelection: string[]; onTagsSelected: (ids: string[]) => void; }>; }; parseSearchQuery: (query: string, options?: { useName?: boolean | undefined; tagField?: string | undefined; } | undefined) => { searchTerm: string; tagReferences: ", + ") => JSX.Element) | undefined; }>; SavedObjectSaveModalTagSelector: React.FC<{ initialSelection: string[]; onTagsSelected: (ids: string[]) => void; }>; }; parseSearchQuery: (query: string, options?: { useName?: boolean | undefined; tagField?: string | undefined; } | undefined) => Promise<{ searchTerm: string; tagReferences: ", "SavedObjectsFindOptionsReference", "[]; tagReferencesToExclude: ", "SavedObjectsFindOptionsReference", - "[]; valid: boolean; }; getTagList: () => ", + "[]; valid: boolean; }>; getTagList: () => ", "Tag", "[]; getTagIdsFromReferences: (references: ", "SavedObjectsReference", diff --git a/api_docs/kbn_content_management_table_list.mdx b/api_docs/kbn_content_management_table_list.mdx index 7698b1d89ebbc8..9046b519896c11 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: 2022-12-19 +date: 2022-12-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 88a678e379437a..08d136274b990e 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: 2022-12-19 +date: 2022-12-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 201fbd7991207b..395edcfa5a630b 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: 2022-12-19 +date: 2022-12-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 96683f7c570135..36e56a6b1c924d 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: 2022-12-19 +date: 2022-12-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 0cd5b193f2df79..b7fde8569297b2 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: 2022-12-19 +date: 2022-12-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 d04d60b4104f29..7e47fbd2630045 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: 2022-12-19 +date: 2022-12-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 c8627bcdddcadf..68c026524cf9a9 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: 2022-12-19 +date: 2022-12-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 4a993213a6b8dc..7b53381c16d632 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: 2022-12-19 +date: 2022-12-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 eecaae2a75c715..62e84f8b51e190 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: 2022-12-19 +date: 2022-12-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 6735afdc39bbd2..4053b0a55fe5a2 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: 2022-12-19 +date: 2022-12-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 c6e54877757c52..bff49ec7bd176b 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: 2022-12-19 +date: 2022-12-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 8e570ae9eec80e..65575ae5ef5384 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: 2022-12-19 +date: 2022-12-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 f84073a7540211..c6777ea9abe31b 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: 2022-12-19 +date: 2022-12-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 b92ff5eca47471..d5542c4a24ff2b 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: 2022-12-19 +date: 2022-12-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 543ed49186accf..9482a704e2ee92 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: 2022-12-19 +date: 2022-12-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 1a1d14632e577a..479365fa00e3ca 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: 2022-12-19 +date: 2022-12-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 46a6e8b06a16ca..b592f484ad8fc4 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: 2022-12-19 +date: 2022-12-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 86d2ede64224d8..c63d9551eb1221 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: 2022-12-19 +date: 2022-12-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 3c4f3da18512d8..f764ace99b39b7 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: 2022-12-19 +date: 2022-12-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 bb8500abcd53e7..090f79705cd6aa 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: 2022-12-19 +date: 2022-12-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 345b7519c0c902..0270a944be372b 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: 2022-12-19 +date: 2022-12-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 23c1cc1b06d5a0..3ce4665c32e472 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: 2022-12-19 +date: 2022-12-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 08c57ef7827b8a..01eb858c31f0bc 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: 2022-12-19 +date: 2022-12-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 384aec1c07accd..dee0a00e0cdb6b 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: 2022-12-19 +date: 2022-12-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 2dbcfb76b16c05..ddb303ac70cd5d 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: 2022-12-19 +date: 2022-12-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_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index cf72cc2da6a8c2..22ed289f6e7978 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: 2022-12-19 +date: 2022-12-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 d1d52e3121925f..5358dd3913124f 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: 2022-12-19 +date: 2022-12-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 fee1ebaf16c523..c46cd772ea0c43 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: 2022-12-19 +date: 2022-12-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 b3be2ff3190a5f..cfdeff6a4e6d1d 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: 2022-12-19 +date: 2022-12-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 4292e02b240d8f..83faca19078fd6 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: 2022-12-19 +date: 2022-12-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 326cc390061871..2ba93dbf708e90 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: 2022-12-19 +date: 2022-12-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 27c82ae4554a62..9deccddddbadc1 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: 2022-12-19 +date: 2022-12-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 41976eabc63f53..2b0c250aa1c902 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: 2022-12-19 +date: 2022-12-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 acee56307cd6d3..613833c8bc6d8b 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: 2022-12-19 +date: 2022-12-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 94c46ed3ba9f25..e44f21c1869d08 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: 2022-12-19 +date: 2022-12-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 b4f90ff3d76975..2bcecf050d91e7 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: 2022-12-19 +date: 2022-12-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 9fc552d2953501..1ca9fa269729df 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: 2022-12-19 +date: 2022-12-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 723de8e8a81aa6..2a2e83bf226c3d 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: 2022-12-19 +date: 2022-12-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 8fa3caf66527ae..80ef7fa899a734 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: 2022-12-19 +date: 2022-12-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 f8c012aebbbc17..612c3fdc80ff6e 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: 2022-12-19 +date: 2022-12-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 8215ec1868aa67..15d6800dd8848d 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: 2022-12-19 +date: 2022-12-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 25659141fd964a..ef6b027c85a46a 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: 2022-12-19 +date: 2022-12-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 7c16b1b88d0be7..a66ecb0ae138ad 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: 2022-12-19 +date: 2022-12-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 c3e4bc90bcd6b4..4a6f867acc77c1 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: 2022-12-19 +date: 2022-12-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 74bfb732cfa0d5..ed88cc5d2a76d7 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: 2022-12-19 +date: 2022-12-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 3a3bde1ee7d53c..383f46d4e15da8 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: 2022-12-19 +date: 2022-12-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 c767ec003d6c6b..1db0c8a6367156 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: 2022-12-19 +date: 2022-12-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 91fadda5fa8c11..4c7474451e7136 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: 2022-12-19 +date: 2022-12-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 123caba955169e..5730725070d137 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: 2022-12-19 +date: 2022-12-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 d2c079445d1f47..071f8b7068ba20 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: 2022-12-19 +date: 2022-12-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 b95d4f4045da29..b0fa24033f4a61 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: 2022-12-19 +date: 2022-12-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 5fc132c6871070..5acf48e6d41817 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: 2022-12-19 +date: 2022-12-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 fe2c7ad8921f89..31225f7097a6d3 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: 2022-12-19 +date: 2022-12-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 cff8db8b7d581c..59df5d002928ad 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: 2022-12-19 +date: 2022-12-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 29b4791b2c8ac2..06a27e846551ee 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: 2022-12-19 +date: 2022-12-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 5e1c8fa7b1fcfe..6ee0704747ccf8 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: 2022-12-19 +date: 2022-12-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 b8df949947cc5c..e78354a06a235c 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: 2022-12-19 +date: 2022-12-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 01b5432f9b2ae1..e7aec9fa6a3425 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: 2022-12-19 +date: 2022-12-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 fb5c8f6ecda5e8..9a638e75a288d2 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: 2022-12-19 +date: 2022-12-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 c05dc0186bcd44..4d9a3bbad83df1 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: 2022-12-19 +date: 2022-12-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 715da6905354d2..5b7620d4edb807 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: 2022-12-19 +date: 2022-12-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 2a2abd4584c98c..735e2757d6a3f7 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: 2022-12-19 +date: 2022-12-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 4d9136b928e34a..edf48b97c4a636 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 54f2b180ee848e..67d50befff8cf4 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -2665,22 +2665,6 @@ "path": "packages/core/http/core-http-server/src/router/socket.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "@kbn/core-http-server", - "id": "def-server.IKibanaSocket.remoteAddress", - "type": "string", - "tags": [], - "label": "remoteAddress", - "description": [ - "\nThe string representation of the remote IP address. For example,`'74.125.127.100'` or\n`'2001:4860:a005::68'`. Value may be `undefined` if the socket is destroyed (for example, if\nthe client disconnected)." - ], - "signature": [ - "string | undefined" - ], - "path": "packages/core/http/core-http-server/src/router/socket.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index b75f7749b9fc87..720617c3f49788 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact Kibana Core for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 393 | 1 | 154 | 0 | +| 392 | 1 | 154 | 0 | ## Server diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index c8764c3f90809f..2deba504e4f455 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: 2022-12-19 +date: 2022-12-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 52c54c9238ecd3..5e426e4317f8a1 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: 2022-12-19 +date: 2022-12-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 b444d8beedcca3..cc9761c6bb7ace 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: 2022-12-19 +date: 2022-12-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 1f7db30f4378b4..934dbd2f3595a5 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: 2022-12-19 +date: 2022-12-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 d43fd1317bf576..1a2891900b37e2 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: 2022-12-19 +date: 2022-12-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 e756009ae883eb..347025347cabfb 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: 2022-12-19 +date: 2022-12-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 6ee8acdb7557e1..88b8e400175429 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: 2022-12-19 +date: 2022-12-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.mdx b/api_docs/kbn_core_injected_metadata_browser.mdx index 70a5c808f2375f..0f1b26f68e4d42 100644 --- a/api_docs/kbn_core_injected_metadata_browser.mdx +++ b/api_docs/kbn_core_injected_metadata_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser title: "@kbn/core-injected-metadata-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser'] --- import kbnCoreInjectedMetadataBrowserObj from './kbn_core_injected_metadata_browser.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 c7f2c060777aa5..0b11ff27184ba0 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: 2022-12-19 +date: 2022-12-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 e1b66d01654b02..f3efe634c03ede 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: 2022-12-19 +date: 2022-12-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 e1f41dabe99beb..365190d5e666e8 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: 2022-12-19 +date: 2022-12-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 202cf938268698..2f5c54c5c1911f 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: 2022-12-19 +date: 2022-12-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 42e6b8934c2401..7fcca2b0930607 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: 2022-12-19 +date: 2022-12-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 672040caa04992..527977de855e70 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: 2022-12-19 +date: 2022-12-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 a8901afd4a5c76..2fd39a7a811932 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: 2022-12-19 +date: 2022-12-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 2cbe09170cc784..0c2572f7ca8404 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: 2022-12-19 +date: 2022-12-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 d4fbf54d209047..29ad4f8ae92bed 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: 2022-12-19 +date: 2022-12-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 26de41f1762953..0940417b20d443 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: 2022-12-19 +date: 2022-12-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 517e66e88b75ee..c0feddc1f6a3ee 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: 2022-12-19 +date: 2022-12-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 3c08d03d94c831..432115756a6e35 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: 2022-12-19 +date: 2022-12-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 48624f02556b2c..17591a5067140b 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: 2022-12-19 +date: 2022-12-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 c45d44df6c7d62..839d82402a0acb 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: 2022-12-19 +date: 2022-12-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 496e7cabc4b6e4..835eb873ca943b 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: 2022-12-19 +date: 2022-12-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 2733ab2d6abd70..49d0d5a2e86331 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: 2022-12-19 +date: 2022-12-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 e04ccc2485178b..96b5df6e5b3f09 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: 2022-12-19 +date: 2022-12-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 d0343bd586ac3a..09733d8e21a2f2 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: 2022-12-19 +date: 2022-12-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 a15fecedbc1fc6..6886db770d962b 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: 2022-12-19 +date: 2022-12-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 3b9825e23530e0..fdcbb68ccd8536 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: 2022-12-19 +date: 2022-12-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 068ea73beb5c8a..747a2bc90d0e13 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: 2022-12-19 +date: 2022-12-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 74a9cb5533e945..2a4d6433fdb2a6 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: 2022-12-19 +date: 2022-12-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 55ec31ef08a4d4..ff6836c757b758 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: 2022-12-19 +date: 2022-12-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 d5cce1c4a9de1d..9454e5bccc4c2e 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: 2022-12-19 +date: 2022-12-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 aefe154a497def..bcb5dce572d8c2 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: 2022-12-19 +date: 2022-12-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 11c46d08e672f7..5f444bda3c9d53 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: 2022-12-19 +date: 2022-12-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 5e2f048c75ac65..7a5682facdf848 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: 2022-12-19 +date: 2022-12-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 3bd28ecd1eaabc..a34511073e2a24 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: 2022-12-19 +date: 2022-12-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 97ee8cdba40520..8c2e1216a3c10e 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: 2022-12-19 +date: 2022-12-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 2ccd337a0d049e..b483dfd33df500 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: 2022-12-19 +date: 2022-12-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 e271d309f59386..2ead5341c27f3b 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: 2022-12-19 +date: 2022-12-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 a3c42026043ce0..a5a3bbd968d67f 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: 2022-12-19 +date: 2022-12-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 57656a23ba32df..3917f5d9654101 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: 2022-12-19 +date: 2022-12-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 bf6439509558ac..e23865cba3d2ce 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: 2022-12-19 +date: 2022-12-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 ddfe22e54e4b1a..8022c767b0fd59 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: 2022-12-19 +date: 2022-12-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 da68abb3cd0a56..a0326d288522b5 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: 2022-12-19 +date: 2022-12-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 13310806c251bb..e954955055b28e 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: 2022-12-19 +date: 2022-12-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 445b76871e070a..d098d6fc6a8776 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: 2022-12-19 +date: 2022-12-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 3472fb1d0e5561..fc90916390924c 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: 2022-12-19 +date: 2022-12-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 573ada980ab138..c1bf32bdc81e38 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: 2022-12-19 +date: 2022-12-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 84ba363fc4abfd..4a719a37c19272 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: 2022-12-19 +date: 2022-12-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 e92a126af1bc75..da1cc36d5396a6 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: 2022-12-19 +date: 2022-12-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 77048023b7e0ca..21eee5d623eab2 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: 2022-12-19 +date: 2022-12-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 49fb2311c59b6b..196d2c05424120 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: 2022-12-19 +date: 2022-12-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 be9b42ac539035..fb0954f8ba6c7f 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: 2022-12-19 +date: 2022-12-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 f448abdf3e2cbb..56d4834bd178f8 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: 2022-12-19 +date: 2022-12-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 c35dda2a42e3c5..9f20670489b8d7 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: 2022-12-19 +date: 2022-12-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 9e5c9709fdd390..3737c024b1811e 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: 2022-12-19 +date: 2022-12-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 7572a2334921c9..1673f46406aee2 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: 2022-12-19 +date: 2022-12-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 c9b6050fb01c4e..55f26157ee8554 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: 2022-12-19 +date: 2022-12-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 7d8ed4ab6ab1a0..dd52cc2b3da7d8 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index 40177ae597173c..78be56369b3f84 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -968,12 +968,12 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-server.ISavedObjectsSecurityExtension.checkAuthorization", + "id": "def-server.ISavedObjectsSecurityExtension.performAuthorization", "type": "Function", "tags": [], - "label": "checkAuthorization", + "label": "performAuthorization", "description": [ - "\nChecks authorization of actions on specified types in specified spaces." + "\nPerforms authorization (check & enforce) of actions on specified types in specified spaces." ], "signature": [ "(params: ", @@ -981,8 +981,8 @@ "pluginId": "@kbn/core-saved-objects-server", "scope": "server", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-server.CheckAuthorizationParams", - "text": "CheckAuthorizationParams" + "section": "def-server.PerformAuthorizationParams", + "text": "PerformAuthorizationParams" }, ") => Promise<", { @@ -1000,20 +1000,20 @@ "children": [ { "parentPluginId": "@kbn/core-saved-objects-server", - "id": "def-server.ISavedObjectsSecurityExtension.checkAuthorization.$1", + "id": "def-server.ISavedObjectsSecurityExtension.performAuthorization.$1", "type": "Object", "tags": [], "label": "params", "description": [ - "- types, spaces, and actions to check" + "- actions, types & spaces map, audit callback, options (enforce bypassed if enforce map is undefined)" ], "signature": [ { "pluginId": "@kbn/core-saved-objects-server", "scope": "server", "docId": "kibKbnCoreSavedObjectsServerPluginApi", - "section": "def-server.CheckAuthorizationParams", - "text": "CheckAuthorizationParams" + "section": "def-server.PerformAuthorizationParams", + "text": "PerformAuthorizationParams" }, "" ], @@ -2036,6 +2036,146 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-saved-objects-server", + "id": "def-server.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": "server", + "docId": "kibKbnCoreSavedObjectsServerPluginApi", + "section": "def-server.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-server.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-server.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-server.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-server.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-server.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-server.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-server.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-server.RedactNamespacesParams", diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 340ec57719a8af..a279ed390446e5 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact Kibana Core for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 297 | 0 | 90 | 0 | +| 305 | 0 | 91 | 0 | ## Server diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index e9122731f70ddc..0a770e71ea20d8 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: 2022-12-19 +date: 2022-12-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 c250d95d9bb92d..7ce37656a5653e 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_core_saved_objects_utils_server.devdocs.json index 82dc05f2d9e723..b0d192a1217ce4 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_utils_server.devdocs.json @@ -1779,6 +1779,62 @@ } ], "functions": [ + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.arrayMapsAreEqual", + "type": "Function", + "tags": [], + "label": "arrayMapsAreEqual", + "description": [ + "\nDetermines if a given map of arrays is equal to another given map of arrays.\nUsed for comparing namespace maps in saved object repo/security extension tests.\n" + ], + "signature": [ + "(mapA: Map, mapB: Map) => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.arrayMapsAreEqual.$1", + "type": "Object", + "tags": [], + "label": "mapA", + "description": [ + "The first map to compare" + ], + "signature": [ + "Map" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.arrayMapsAreEqual.$2", + "type": "Object", + "tags": [], + "label": "mapB", + "description": [ + "The second map to compare" + ], + "signature": [ + "Map" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "True if map A is equal to map B" + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-saved-objects-utils-server", "id": "def-server.mergeSavedObjectMigrationMaps", @@ -1869,6 +1925,118 @@ "The merged map {@link SavedObjectMigrationMap }" ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.setMapsAreEqual", + "type": "Function", + "tags": [], + "label": "setMapsAreEqual", + "description": [ + "\nDetermines if a given Map of Sets is equal to another given Map of Sets.\nUsed for comparing typeMaps and enforceMaps in saved object repo/security extension tests.\n" + ], + "signature": [ + "(mapA: Map> | undefined, mapB: Map> | undefined) => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.setMapsAreEqual.$1", + "type": "Object", + "tags": [], + "label": "mapA", + "description": [ + "The first map to compare" + ], + "signature": [ + "Map> | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.setMapsAreEqual.$2", + "type": "Object", + "tags": [], + "label": "mapB", + "description": [ + "The second map to compare" + ], + "signature": [ + "Map> | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "True if map A is equal to map B" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.setsAreEqual", + "type": "Function", + "tags": [], + "label": "setsAreEqual", + "description": [ + "\nDetermines if a given Set is equal to another given Set. Set types must be the same, and comparable.\n" + ], + "signature": [ + "(setA: Set, setB: Set) => boolean" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.setsAreEqual.$1", + "type": "Object", + "tags": [], + "label": "setA", + "description": [ + "The first Set to compare" + ], + "signature": [ + "Set" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/core-saved-objects-utils-server", + "id": "def-server.setsAreEqual.$2", + "type": "Object", + "tags": [], + "label": "setB", + "description": [ + "The second Set to compare" + ], + "signature": [ + "Set" + ], + "path": "packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [ + "True if Set A is equal to Set B" + ], + "initialIsOpen": false } ], "interfaces": [ diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index a43dfa35959397..fbe0230302c865 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: 2022-12-19 +date: 2022-12-20 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 Kibana Core for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 99 | 1 | 84 | 0 | +| 108 | 1 | 84 | 0 | ## Server diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 9fd68a492605d1..e229fb10b3c1bf 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: 2022-12-19 +date: 2022-12-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 7ec56601687005..42008f701c29e5 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: 2022-12-19 +date: 2022-12-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 1afb674c913126..d8b1c49a5d3100 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: 2022-12-19 +date: 2022-12-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 c3920856026f53..fd13d6b624a184 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: 2022-12-19 +date: 2022-12-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 da4f0474c22063..ba4a53f5cbf86a 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: 2022-12-19 +date: 2022-12-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 7d5089cf7518f4..db297356a379a3 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: 2022-12-19 +date: 2022-12-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 041eb1c184ed19..1694ad503e7d73 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: 2022-12-19 +date: 2022-12-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 1dd2f1f348a5c0..1c6c3b40bdb2a2 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: 2022-12-19 +date: 2022-12-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 22e61b2935dfd5..7d84855ffb15b2 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: 2022-12-19 +date: 2022-12-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 8852b0bc4398de..a2526baacc0dcc 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: 2022-12-19 +date: 2022-12-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 018bab1a11719e..0c0b725938ff8c 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: 2022-12-19 +date: 2022-12-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 7f47cf85060eea..3c33004a268f23 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: 2022-12-19 +date: 2022-12-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 fda918fae7cb05..a221e2abd4bb9d 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: 2022-12-19 +date: 2022-12-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 95909bf0f4ece2..6fd76ed8042708 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: 2022-12-19 +date: 2022-12-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 c604349c6b7ea7..90405389d77120 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: 2022-12-19 +date: 2022-12-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 2687e7287c0526..f5fdb735eab300 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: 2022-12-19 +date: 2022-12-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 68da8cc9a72ad3..176c1b6b3d6f95 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: 2022-12-19 +date: 2022-12-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 53b64c38f52232..abfd1c6a2063c8 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: 2022-12-19 +date: 2022-12-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 cb7600fa57aeb7..2de8c8d984efab 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: 2022-12-19 +date: 2022-12-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 7dd1fe9b2ef800..4a3b71dc4fb24c 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: 2022-12-19 +date: 2022-12-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 f895d15c8f0a88..f1e4393db34b35 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: 2022-12-19 +date: 2022-12-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 a14c69c09aa8d4..9a1768a959fc8c 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: 2022-12-19 +date: 2022-12-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 0f21fd3a41dbb3..d8a44386e69033 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: 2022-12-19 +date: 2022-12-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 0ec5a65affeb4a..c8f7400822c68a 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: 2022-12-19 +date: 2022-12-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 35660b45c08da7..91489ac079ec91 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 84262c02b83097..ae1d07fc6987de 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: 2022-12-19 +date: 2022-12-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 cc51a043d63e28..b97050dbe49d9c 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: 2022-12-19 +date: 2022-12-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 1cb6d4ae3d0028..6a3f3d228ebe64 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: 2022-12-19 +date: 2022-12-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 13c93864d004d7..a1eb9a16fcb798 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: 2022-12-19 +date: 2022-12-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 35672c983875eb..62848a885d886e 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: 2022-12-19 +date: 2022-12-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 974d2ba08474d5..1a2b227049cc85 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: 2022-12-19 +date: 2022-12-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 6980ed1b6016ae..786e7da34f931f 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: 2022-12-19 +date: 2022-12-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 c15da8a640e644..04d70ce438b684 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: 2022-12-19 +date: 2022-12-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 4086cb00f8adf4..6631160525cebe 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 915d748ac9bd54..2c87affca4ce7c 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: 2022-12-19 +date: 2022-12-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 519d4dbfd45875..688e1e3dcd9453 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: 2022-12-19 +date: 2022-12-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 66d841b40ac1c1..06c378f966cdc2 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_es_query.devdocs.json index 0b894c5ecbcba1..c29ba715ef6e7e 100644 --- a/api_docs/kbn_es_query.devdocs.json +++ b/api_docs/kbn_es_query.devdocs.json @@ -111,19 +111,49 @@ "tags": [], "label": "buildCombinedFilter", "description": [ - "\nBuilds an COMBINED filter. An COMBINED filter is a filter with multiple sub-filters. Each sub-filter (FilterItem) represents a\ncondition." + "\nBuilds an COMBINED filter. An COMBINED filter is a filter with multiple sub-filters. Each sub-filter (FilterItem)\nrepresents a condition." ], "signature": [ - "(filters: ", + "(relation: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BooleanRelation", + "text": "BooleanRelation" + }, + ", filters: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + "[], indexPattern: ", { "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.FilterItem", - "text": "FilterItem" + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + ", disabled: boolean | undefined, negate: boolean | undefined, alias: string | null | undefined, store: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" }, - "[]) => ", - "CombinedFilter" + ") => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.CombinedFilter", + "text": "CombinedFilter" + } ], "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", "deprecated": false, @@ -132,19 +162,42 @@ { "parentPluginId": "@kbn/es-query", "id": "def-common.buildCombinedFilter.$1", + "type": "Enum", + "tags": [], + "label": "relation", + "description": [ + "The type of relation with which to combine the filters (AND/OR)" + ], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BooleanRelation", + "text": "BooleanRelation" + } + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.buildCombinedFilter.$2", "type": "Array", "tags": [], "label": "filters", "description": [ - "An array of CombinedFilterItem" + "An array of sub-filters" ], "signature": [ { "pluginId": "@kbn/es-query", "scope": "common", "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.FilterItem", - "text": "FilterItem" + "section": "def-common.Filter", + "text": "Filter" }, "[]" ], @@ -152,6 +205,93 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.buildCombinedFilter.$3", + "type": "Object", + "tags": [], + "label": "indexPattern", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + } + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.buildCombinedFilter.$4", + "type": "CompoundType", + "tags": [], + "label": "disabled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.buildCombinedFilter.$5", + "type": "CompoundType", + "tags": [], + "label": "negate", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.buildCombinedFilter.$6", + "type": "CompoundType", + "tags": [], + "label": "alias", + "description": [], + "signature": [ + "string | null | undefined" + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.buildCombinedFilter.$7", + "type": "Enum", + "tags": [], + "label": "store", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" + } + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [], @@ -2061,6 +2201,135 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.fromCombinedFilter", + "type": "Function", + "tags": [], + "label": "fromCombinedFilter", + "description": [], + "signature": [ + "(filter: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + ", dataViews?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + "[] | undefined, options?: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.EsQueryFiltersConfig", + "text": "EsQueryFiltersConfig" + }, + ") => ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + } + ], + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.fromCombinedFilter.$1", + "type": "Object", + "tags": [], + "label": "filter", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + } + ], + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.fromCombinedFilter.$2", + "type": "CompoundType", + "tags": [], + "label": "dataViews", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + " | ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.DataViewBase", + "text": "DataViewBase" + }, + "[] | undefined" + ], + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.fromCombinedFilter.$3", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.EsQueryFiltersConfig", + "text": "EsQueryFiltersConfig" + } + ], + "path": "packages/kbn-es-query/src/es_query/from_combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.fromKueryExpression", @@ -3761,6 +4030,138 @@ "An unpinned (app scoped) copy of the filter" ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.updateFilter", + "type": "Function", + "tags": [], + "label": "updateFilter", + "description": [], + "signature": [ + "(filter: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + }, + ", field?: string | undefined, operator?: FilterOperator | undefined, params?: any) => { meta: { key: string | undefined; field: string | undefined; params: { query: undefined; }; value: undefined; type: undefined; alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; }; query: undefined; $state?: { store: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" + }, + "; } | undefined; } | { meta: { negate: boolean | undefined; type: string | undefined; params: undefined; value: string; alias?: string | null | undefined; disabled?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; key?: string | undefined; }; query: { exists: { field: string | undefined; }; }; $state?: { store: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" + }, + "; } | undefined; } | { meta: { negate: boolean | undefined; type: string | undefined; params: any; alias?: string | null | undefined; disabled?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; key?: string | undefined; value?: string | undefined; }; query: { range: { [x: string]: any; }; }; $state?: { store: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" + }, + "; } | undefined; } | { meta: { negate: boolean | undefined; type: string | undefined; params: any[] | undefined; alias?: string | null | undefined; disabled?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; key?: string | undefined; value?: string | undefined; }; query: { bool: any; }; $state?: { store: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" + }, + "; } | undefined; } | { meta: { negate: boolean | undefined; type: string | undefined; params: any; alias?: string | null | undefined; disabled?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; key?: string | undefined; value?: string | undefined; }; query: { match_phrase: { [x: string]: any; }; }; $state?: { store: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.FilterStateStore", + "text": "FilterStateStore" + }, + "; } | undefined; }" + ], + "path": "packages/kbn-es-query/src/filters/helpers/update_filter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.updateFilter.$1", + "type": "Object", + "tags": [], + "label": "filter", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + } + ], + "path": "packages/kbn-es-query/src/filters/helpers/update_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.updateFilter.$2", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-es-query/src/filters/helpers/update_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.updateFilter.$3", + "type": "Object", + "tags": [], + "label": "operator", + "description": [], + "signature": [ + "FilterOperator | undefined" + ], + "path": "packages/kbn-es-query/src/filters/helpers/update_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.updateFilter.$4", + "type": "Any", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-es-query/src/filters/helpers/update_filter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -3838,6 +4239,51 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.CombinedFilter", + "type": "Interface", + "tags": [], + "label": "CombinedFilter", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.CombinedFilter", + "text": "CombinedFilter" + }, + " extends ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Filter", + "text": "Filter" + } + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.CombinedFilter.meta", + "type": "Object", + "tags": [], + "label": "meta", + "description": [], + "signature": [ + "CombinedFilterMeta" + ], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.EsQueryFiltersConfig", @@ -4336,6 +4782,18 @@ } ], "enums": [ + { + "parentPluginId": "@kbn/es-query", + "id": "def-common.BooleanRelation", + "type": "Enum", + "tags": [], + "label": "BooleanRelation", + "description": [], + "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/es-query", "id": "def-common.FILTERS", @@ -4633,38 +5091,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/es-query", - "id": "def-common.FilterItem", - "type": "Type", - "tags": [], - "label": "FilterItem", - "description": [ - "\nEach item in an COMBINED filter may represent either one filter (to be ORed) or an array of filters (ANDed together before\nbecoming part of the OR clause)." - ], - "signature": [ - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - " | ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.FilterItem", - "text": "FilterItem" - }, - "[]" - ], - "path": "packages/kbn-es-query/src/filters/build_filters/combined_filter.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/es-query", "id": "def-common.FilterMeta", diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 4f4ab188bec841..38d9bbfd622bc0 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Owner missing] for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 227 | 1 | 170 | 13 | +| 244 | 2 | 187 | 13 | ## Common diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 8187e89551b1d3..90fb164e18859b 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: 2022-12-19 +date: 2022-12-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 baf3287c905166..ed69a0c615b3c9 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: 2022-12-19 +date: 2022-12-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 52d8b5e105018e..acdf40dee12d06 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: 2022-12-19 +date: 2022-12-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 541bf851c33ee2..048917ea9ae781 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: 2022-12-19 +date: 2022-12-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 88eab33246f01c..2bb7e887157894 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: 2022-12-19 +date: 2022-12-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 e9519b4d8a6ec2..c8f2120a34d3b7 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_get_repo_files.mdx b/api_docs/kbn_get_repo_files.mdx index 07cf276e22e72a..7eb83e36cafbdf 100644 --- a/api_docs/kbn_get_repo_files.mdx +++ b/api_docs/kbn_get_repo_files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-get-repo-files title: "@kbn/get-repo-files" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/get-repo-files plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/get-repo-files'] --- import kbnGetRepoFilesObj from './kbn_get_repo_files.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 7bb6e1ee0212ee..4687c940c3d80c 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.devdocs.json b/api_docs/kbn_handlebars.devdocs.json index e1233a052e2cbd..b312f840efad0b 100644 --- a/api_docs/kbn_handlebars.devdocs.json +++ b/api_docs/kbn_handlebars.devdocs.json @@ -250,7 +250,7 @@ "\nSupported Handlebars compile options.\n\nThis is a subset of all the compile options supported by the upstream\nHandlebars module." ], "signature": [ - "{ data?: boolean | undefined; strict?: boolean | undefined; knownHelpers?: KnownHelpers | undefined; knownHelpersOnly?: boolean | undefined; assumeObjects?: boolean | undefined; noEscape?: boolean | undefined; }" + "{ data?: boolean | undefined; strict?: boolean | undefined; knownHelpers?: KnownHelpers | undefined; knownHelpersOnly?: boolean | undefined; noEscape?: boolean | undefined; assumeObjects?: boolean | undefined; }" ], "path": "packages/kbn-handlebars/index.ts", "deprecated": false, @@ -267,7 +267,7 @@ "\nSupported Handlebars runtime options\n\nThis is a subset of all the runtime options supported by the upstream\nHandlebars module." ], "signature": [ - "{ data?: any; helpers?: { [name: string]: Function; } | undefined; blockParams?: any[] | undefined; decorators?: { [name: string]: Function; } | undefined; }" + "{ data?: any; helpers?: { [name: string]: Function; } | undefined; decorators?: { [name: string]: Function; } | undefined; blockParams?: any[] | undefined; }" ], "path": "packages/kbn-handlebars/index.ts", "deprecated": false, diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 60313a4acaa6cc..32dec4a918b28f 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: 2022-12-19 +date: 2022-12-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 04ced3f69aaad4..6ffdd413df9638 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: 2022-12-19 +date: 2022-12-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 504aaff37622ca..a0d6ba50d87596 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: 2022-12-19 +date: 2022-12-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 4f72351f61c450..45a5d8dae87927 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: 2022-12-19 +date: 2022-12-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 4d716dbf81496f..8fbf6eb80ba598 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: 2022-12-19 +date: 2022-12-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 6bc49f4c570407..6254e4a7b4362a 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: 2022-12-19 +date: 2022-12-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 b7189e763b31a8..3326bcb483f5b8 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: 2022-12-19 +date: 2022-12-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 99b12c47578fb3..d36d3d5b24ebb8 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: 2022-12-19 +date: 2022-12-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 40e1062458edf7..69bacaef8152c0 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: 2022-12-19 +date: 2022-12-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 6db565a62a420f..577e8c84120cc5 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: 2022-12-19 +date: 2022-12-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 0fd889f0002096..669a905e75fe81 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: 2022-12-19 +date: 2022-12-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 68ded90705bf9e..798191216c3374 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index c5c7499caab165..41c51da5e6a466 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: 2022-12-19 +date: 2022-12-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 038855e8feec69..3354263bd9f3dd 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: 2022-12-19 +date: 2022-12-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 5a0f39e270d143..f56f15e36d5f29 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: 2022-12-19 +date: 2022-12-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 7d1ad8ac6c59f1..4beafedafdb2ec 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: 2022-12-19 +date: 2022-12-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 022f0ae822ff7d..a2cb83db536ed5 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: 2022-12-19 +date: 2022-12-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 e3fc07ecc0e026..eef13984847f46 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: 2022-12-19 +date: 2022-12-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 3441c6bbab497b..44d74a00c65d4e 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: 2022-12-19 +date: 2022-12-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_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index da5e56431bd866..3b002ee5c961ee 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: 2022-12-19 +date: 2022-12-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_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 2b17074ace877e..f407debc9be106 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: 2022-12-19 +date: 2022-12-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_monaco.devdocs.json b/api_docs/kbn_monaco.devdocs.json index c7fe8ddfb47bf6..701fbd8a3f306e 100644 --- a/api_docs/kbn_monaco.devdocs.json +++ b/api_docs/kbn_monaco.devdocs.json @@ -724,6 +724,38 @@ } ], "objects": [ + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.monacoeditoresmvseditoreditor.api", + "type": "Object", + "tags": [], + "label": "'monaco-editor/esm/vs/editor/editor.api'", + "description": [], + "signature": [ + "typeof ", + "node_modules/monaco-editor/esm/vs/editor/editor.api" + ], + "path": "node_modules/monaco-yaml/index.d.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/monaco", + "id": "def-common.monacoeditoresmvseditoreditor.api", + "type": "Object", + "tags": [], + "label": "'monaco-editor/esm/vs/editor/editor.api'", + "description": [], + "signature": [ + "typeof ", + "node_modules/monaco-editor/esm/vs/editor/editor.api" + ], + "path": "node_modules/monaco-yaml/index.d.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/monaco", "id": "def-common.PainlessLang", diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 1be624bd1f9ebc..d058a2db345196 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Owner missing] for questions regarding this plugin. | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 60 | 0 | 60 | 2 | +| 62 | 0 | 60 | 2 | ## Common diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 9bc7303759d950..57a1afe57e7d2a 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: 2022-12-19 +date: 2022-12-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 f59a7e1df2e60a..9ba139c16a3b6c 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: 2022-12-19 +date: 2022-12-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 01c51a68e033c3..5ab86fba57a7fe 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: 2022-12-19 +date: 2022-12-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_peggy.mdx b/api_docs/kbn_peggy.mdx index 45d7104ba481b4..144efe8f7ab433 100644 --- a/api_docs/kbn_peggy.mdx +++ b/api_docs/kbn_peggy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-peggy title: "@kbn/peggy" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/peggy plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/peggy'] --- import kbnPeggyObj from './kbn_peggy.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 56651bdaa727f8..37c5dd2c1824e6 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: 2022-12-19 +date: 2022-12-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 86c771b4f76e00..4ebd3242c1e74a 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: 2022-12-19 +date: 2022-12-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 fb2f0d3843c7ca..735675442233c4 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: 2022-12-19 +date: 2022-12-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 293b61c515d11e..1b6186e7befd8a 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index dbfb09ce10d6d7..98176c46343fbf 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: 2022-12-19 +date: 2022-12-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 ef1f05d58c4daa..2ce5c0a8d79d46 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: 2022-12-19 +date: 2022-12-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 fdf82c4ebaf551..ff63ef0812fd32 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: 2022-12-19 +date: 2022-12-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 0a6d134eb03906..43527221da96ee 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index cd19859bb8a9da..baec2c99dfdb8b 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json index ca9ebec0b58fd5..5b3d03d83b8b7e 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.devdocs.json +++ b/api_docs/kbn_securitysolution_exception_list_components.devdocs.json @@ -834,7 +834,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"article\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"article\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -848,7 +848,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"article\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"article\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/meta/index.tsx", "deprecated": false, @@ -987,7 +987,7 @@ "label": "securityLinkAnchorComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"article\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"article\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, @@ -1001,7 +1001,7 @@ "label": "formattedDateComponent", "description": [], "signature": [ - "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"article\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" + "\"symbol\" | \"object\" | React.ComponentType | \"body\" | \"path\" | \"circle\" | \"filter\" | \"data\" | \"line\" | \"area\" | \"time\" | \"label\" | \"legend\" | \"article\" | \"image\" | \"link\" | \"menu\" | \"stop\" | \"base\" | \"text\" | \"title\" | \"s\" | \"small\" | \"source\" | \"output\" | \"svg\" | \"meta\" | \"script\" | \"summary\" | \"desc\" | \"q\" | \"pattern\" | \"mask\" | \"input\" | \"slot\" | \"style\" | \"head\" | \"section\" | \"big\" | \"sub\" | \"sup\" | \"animate\" | \"progress\" | \"view\" | \"var\" | \"map\" | \"html\" | \"a\" | \"img\" | \"audio\" | \"br\" | \"form\" | \"main\" | \"abbr\" | \"address\" | \"aside\" | \"b\" | \"bdi\" | \"bdo\" | \"blockquote\" | \"button\" | \"canvas\" | \"caption\" | \"cite\" | \"code\" | \"col\" | \"colgroup\" | \"datalist\" | \"dd\" | \"del\" | \"details\" | \"dfn\" | \"dialog\" | \"div\" | \"dl\" | \"dt\" | \"em\" | \"embed\" | \"fieldset\" | \"figcaption\" | \"figure\" | \"footer\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"header\" | \"hgroup\" | \"hr\" | \"i\" | \"iframe\" | \"ins\" | \"kbd\" | \"keygen\" | \"li\" | \"mark\" | \"menuitem\" | \"meter\" | \"nav\" | \"noindex\" | \"noscript\" | \"ol\" | \"optgroup\" | \"option\" | \"p\" | \"param\" | \"picture\" | \"pre\" | \"rp\" | \"rt\" | \"ruby\" | \"samp\" | \"select\" | \"span\" | \"strong\" | \"table\" | \"template\" | \"tbody\" | \"td\" | \"textarea\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"track\" | \"u\" | \"ul\" | \"video\" | \"wbr\" | \"webview\" | \"animateMotion\" | \"animateTransform\" | \"clipPath\" | \"defs\" | \"ellipse\" | \"feBlend\" | \"feColorMatrix\" | \"feComponentTransfer\" | \"feComposite\" | \"feConvolveMatrix\" | \"feDiffuseLighting\" | \"feDisplacementMap\" | \"feDistantLight\" | \"feDropShadow\" | \"feFlood\" | \"feFuncA\" | \"feFuncB\" | \"feFuncG\" | \"feFuncR\" | \"feGaussianBlur\" | \"feImage\" | \"feMerge\" | \"feMergeNode\" | \"feMorphology\" | \"feOffset\" | \"fePointLight\" | \"feSpecularLighting\" | \"feSpotLight\" | \"feTile\" | \"feTurbulence\" | \"foreignObject\" | \"g\" | \"linearGradient\" | \"marker\" | \"metadata\" | \"mpath\" | \"polygon\" | \"polyline\" | \"radialGradient\" | \"rect\" | \"switch\" | \"textPath\" | \"tspan\" | \"use\"" ], "path": "packages/kbn-securitysolution-exception-list-components/src/exception_item_card/exception_item_card.tsx", "deprecated": false, diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 901b07dffb1084..bcea39715e1354 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: 2022-12-19 +date: 2022-12-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 ba704518f3aa42..465691d5b86fd6 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: 2022-12-19 +date: 2022-12-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 faa9c0bdcfbd2f..5f736368304345 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: 2022-12-19 +date: 2022-12-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 bd40712f2549e9..e6e66c866b367c 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: 2022-12-19 +date: 2022-12-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 43d49558967ad5..c6649588b4af56 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: 2022-12-19 +date: 2022-12-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 2322fdd4bc55ee..e6e97b27f19a64 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: 2022-12-19 +date: 2022-12-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 4614a604d7ac66..3d398a6a283a4f 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: 2022-12-19 +date: 2022-12-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 2f3ca398d0891d..42a16657e8882a 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: 2022-12-19 +date: 2022-12-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 f8d217e49d873b..1fd720c52d6d41 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: 2022-12-19 +date: 2022-12-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 e4e6bbd44d255b..515754bbee40ed 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: 2022-12-19 +date: 2022-12-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 8ba4ee8620304c..74a7176a01c438 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: 2022-12-19 +date: 2022-12-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 aa6da391be60c4..2ad2b8bbadb742 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: 2022-12-19 +date: 2022-12-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 19fe46791acb54..295faf690c1c14 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: 2022-12-19 +date: 2022-12-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 056e7af1b5a875..cc83262b6f389e 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: 2022-12-19 +date: 2022-12-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 1df12a9ec37da5..f9500769369cd1 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: 2022-12-19 +date: 2022-12-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 8bd240a3dafbde..b299fc4cb2def9 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: 2022-12-19 +date: 2022-12-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 b5ce21e93b1a06..746c0dcbef4967 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: 2022-12-19 +date: 2022-12-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 e7d472df2430e1..af990426ecc907 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: 2022-12-19 +date: 2022-12-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 96e2d273b6657f..3805dc74f07a70 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: 2022-12-19 +date: 2022-12-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 4c382379462423..1aee213e040946 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: 2022-12-19 +date: 2022-12-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 01ff67d0c8421d..aa8a4b8db03a29 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: 2022-12-19 +date: 2022-12-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 343c7d2455377f..690c1d52266361 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: 2022-12-19 +date: 2022-12-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 1a8cb9db554521..05a694295676df 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: 2022-12-19 +date: 2022-12-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 88cdd9329013f8..614944ee0776e9 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: 2022-12-19 +date: 2022-12-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 f6c3b2222f10d7..712b8f69ac69ec 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: 2022-12-19 +date: 2022-12-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 d352c6a294d0b1..88d3619962a5aa 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: 2022-12-19 +date: 2022-12-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 10f021f630d815..83fd3933fb12aa 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_shared_ux_file_picker.devdocs.json new file mode 100644 index 00000000000000..ccc2cd14e2d563 --- /dev/null +++ b/api_docs/kbn_shared_ux_file_picker.devdocs.json @@ -0,0 +1,255 @@ +{ + "id": "@kbn/shared-ux-file-picker", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.FilePicker", + "type": "Function", + "tags": [], + "label": "FilePicker", + "description": [], + "signature": [ + "(props: ", + { + "pluginId": "@kbn/shared-ux-file-picker", + "scope": "common", + "docId": "kibKbnSharedUxFilePickerPluginApi", + "section": "def-common.Props", + "text": "Props" + }, + ") => JSX.Element" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.FilePicker.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + { + "pluginId": "@kbn/shared-ux-file-picker", + "scope": "common", + "docId": "kibKbnSharedUxFilePickerPluginApi", + "section": "def-common.Props", + "text": "Props" + }, + "" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props", + "type": "Interface", + "tags": [], + "label": "Props", + "description": [], + "signature": [ + { + "pluginId": "@kbn/shared-ux-file-picker", + "scope": "common", + "docId": "kibKbnSharedUxFilePickerPluginApi", + "section": "def-common.Props", + "text": "Props" + }, + "" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.kind", + "type": "Uncategorized", + "tags": [], + "label": "kind", + "description": [ + "\nThe file kind that was passed to the registry." + ], + "signature": [ + "Kind" + ], + "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.onClose", + "type": "Function", + "tags": [], + "label": "onClose", + "description": [ + "\nWill be called when the modal is closed" + ], + "signature": [ + "() => void" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.onDone", + "type": "Function", + "tags": [], + "label": "onDone", + "description": [ + "\nWill be called after a user has a selected a set of files" + ], + "signature": [ + "(files: ", + "FileJSON", + "[]) => void" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.onDone.$1", + "type": "Array", + "tags": [], + "label": "files", + "description": [], + "signature": [ + "FileJSON", + "[]" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.onUpload", + "type": "Function", + "tags": [], + "label": "onUpload", + "description": [ + "\nWhen a user has successfully uploaded some files this callback will be called" + ], + "signature": [ + "((done: ", + { + "pluginId": "@kbn/shared-ux-file-upload", + "scope": "common", + "docId": "kibKbnSharedUxFileUploadPluginApi", + "section": "def-common.DoneNotification", + "text": "DoneNotification" + }, + "[]) => void) | undefined" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.onUpload.$1", + "type": "Array", + "tags": [], + "label": "done", + "description": [], + "signature": [ + { + "pluginId": "@kbn/shared-ux-file-upload", + "scope": "common", + "docId": "kibKbnSharedUxFileUploadPluginApi", + "section": "def-common.DoneNotification", + "text": "DoneNotification" + }, + "[]" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/shared-ux-file-picker", + "id": "def-common.Props.pageSize", + "type": "number", + "tags": [], + "label": "pageSize", + "description": [ + "\nThe number of results to show per page." + ], + "signature": [ + "number | undefined" + ], + "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.multiple", + "type": "CompoundType", + "tags": [ + "default" + ], + "label": "multiple", + "description": [ + "\nWhether you can select one or more files\n" + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/shared-ux/file/file_picker/impl/src/file_picker.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx new file mode 100644 index 00000000000000..6a5544d3f60a82 --- /dev/null +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnSharedUxFilePickerPluginApi +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: 2022-12-20 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] +--- +import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 11 | 0 | 5 | 0 | + +## Common + +### Functions + + +### Interfaces + + diff --git a/api_docs/kbn_shared_ux_file_upload.devdocs.json b/api_docs/kbn_shared_ux_file_upload.devdocs.json new file mode 100644 index 00000000000000..143e11c571ef21 --- /dev/null +++ b/api_docs/kbn_shared_ux_file_upload.devdocs.json @@ -0,0 +1,154 @@ +{ + "id": "@kbn/shared-ux-file-upload", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.FileUpload", + "type": "Function", + "tags": [], + "label": "FileUpload", + "description": [], + "signature": [ + "(props: ", + { + "pluginId": "@kbn/shared-ux-file-upload", + "scope": "common", + "docId": "kibKbnSharedUxFileUploadPluginApi", + "section": "def-common.FileUploadProps", + "text": "FileUploadProps" + }, + ") => JSX.Element" + ], + "path": "packages/shared-ux/file/file_upload/impl/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.FileUpload.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + { + "pluginId": "@kbn/shared-ux-file-upload", + "scope": "common", + "docId": "kibKbnSharedUxFileUploadPluginApi", + "section": "def-common.FileUploadProps", + "text": "FileUploadProps" + } + ], + "path": "packages/shared-ux/file/file_upload/impl/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.DoneNotification", + "type": "Interface", + "tags": [], + "label": "DoneNotification", + "description": [], + "signature": [ + { + "pluginId": "@kbn/shared-ux-file-upload", + "scope": "common", + "docId": "kibKbnSharedUxFileUploadPluginApi", + "section": "def-common.DoneNotification", + "text": "DoneNotification" + }, + "" + ], + "path": "packages/shared-ux/file/file_upload/impl/src/upload_state.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.DoneNotification.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/shared-ux/file/file_upload/impl/src/upload_state.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.DoneNotification.kind", + "type": "string", + "tags": [], + "label": "kind", + "description": [], + "path": "packages/shared-ux/file/file_upload/impl/src/upload_state.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.DoneNotification.fileJSON", + "type": "Object", + "tags": [], + "label": "fileJSON", + "description": [], + "signature": [ + "FileJSON", + "" + ], + "path": "packages/shared-ux/file/file_upload/impl/src/upload_state.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/shared-ux-file-upload", + "id": "def-common.FileUploadProps", + "type": "Type", + "tags": [], + "label": "FileUploadProps", + "description": [], + "signature": [ + "Props", + " & { lazyLoadFallback?: React.ReactNode; }" + ], + "path": "packages/shared-ux/file/file_upload/impl/src/index.tsx", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx new file mode 100644 index 00000000000000..5606b34f17004c --- /dev/null +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -0,0 +1,36 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnSharedUxFileUploadPluginApi +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: 2022-12-20 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] +--- +import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; + + + +Contact [Owner missing] for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 7 | 0 | 7 | 1 | + +## Common + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 27d117fca04f30..2e99632d1e0ac5 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: 2022-12-19 +date: 2022-12-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 ac700a7bedfb95..9dd152c58d8045 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: 2022-12-19 +date: 2022-12-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 feea6e1a141cc8..4865b7287e70c0 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: 2022-12-19 +date: 2022-12-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 23e93ec55ea299..5f7740875671fc 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: 2022-12-19 +date: 2022-12-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 2166c49a805305..6e949b58a5d9a5 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: 2022-12-19 +date: 2022-12-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 3ff966b6b56b32..cc3735020bfcc1 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: 2022-12-19 +date: 2022-12-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 95c559adb248bf..2c80c00a6c5b74 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: 2022-12-19 +date: 2022-12-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 b34d7f51a0bef3..80fe6c2a779cfb 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: 2022-12-19 +date: 2022-12-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 62c8ccb60a3b16..c49323267e57ba 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: 2022-12-19 +date: 2022-12-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 c2a0e4bbd01dff..e8076f47f5ff04 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: 2022-12-19 +date: 2022-12-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 4cb982e3273fe0..045e1e3378ba5c 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: 2022-12-19 +date: 2022-12-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 cae30e936a812a..7ee48c676ff5ff 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: 2022-12-19 +date: 2022-12-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 4bc9d6c326d3b9..fd5c65d7868fd7 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: 2022-12-19 +date: 2022-12-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 62b4f763f5048a..3b538a43914cd3 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: 2022-12-19 +date: 2022-12-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 a040de01964cfc..7446f633cb9e64 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: 2022-12-19 +date: 2022-12-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 de1a3fa83a89b9..4b7fb0c17e21fb 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: 2022-12-19 +date: 2022-12-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 0f512561cb2cf8..58f1922addb858 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: 2022-12-19 +date: 2022-12-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 ac95aba4ab5107..c38e30b44c5fb5 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: 2022-12-19 +date: 2022-12-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 9d65c5285faac4..9bd4efaae8e5d1 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: 2022-12-19 +date: 2022-12-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 245a31755891c7..9d36a1102bd3ba 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: 2022-12-19 +date: 2022-12-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 b3715a2c474046..88d8622c00b89b 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: 2022-12-19 +date: 2022-12-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 6bb393de688f62..d05db960c3e396 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: 2022-12-19 +date: 2022-12-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 aefe3c6212c122..db3aaae117eb7c 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: 2022-12-19 +date: 2022-12-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 d13f831531fc79..b1d47e5bbbce2c 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: 2022-12-19 +date: 2022-12-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_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 31153cfed22ae8..79c018ece8760c 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_package_json.mdx b/api_docs/kbn_sort_package_json.mdx index f546c7979c3ad7..c0da01f7d99da6 100644 --- a/api_docs/kbn_sort_package_json.mdx +++ b/api_docs/kbn_sort_package_json.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-package-json title: "@kbn/sort-package-json" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-package-json plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-package-json'] --- import kbnSortPackageJsonObj from './kbn_sort_package_json.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 73db87176f065a..a7d65b98853d12 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: 2022-12-19 +date: 2022-12-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 ae89f4a2dbaff8..fd4cc9a582f1a3 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: 2022-12-19 +date: 2022-12-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 edd6f369f6c4ca..36372a3abe910c 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: 2022-12-19 +date: 2022-12-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 33fb5832312ae3..44fc9424f54c86 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: 2022-12-19 +date: 2022-12-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 b22dfd8cbb80e7..db16aca193c9e0 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: 2022-12-19 +date: 2022-12-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 2af333c5df4184..cb6f5ac0e238e2 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: 2022-12-19 +date: 2022-12-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 102939154a183d..b4ef7c962454f6 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: 2022-12-19 +date: 2022-12-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 10bcb686fe5e97..d622fde8b9cf6b 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_type_summarizer.mdx b/api_docs/kbn_type_summarizer.mdx index 8c3a086534bdb6..ea502a5501a88c 100644 --- a/api_docs/kbn_type_summarizer.mdx +++ b/api_docs/kbn_type_summarizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer title: "@kbn/type-summarizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/type-summarizer plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer'] --- import kbnTypeSummarizerObj from './kbn_type_summarizer.devdocs.json'; diff --git a/api_docs/kbn_type_summarizer_core.mdx b/api_docs/kbn_type_summarizer_core.mdx index d161f612db9d34..04813b8643c802 100644 --- a/api_docs/kbn_type_summarizer_core.mdx +++ b/api_docs/kbn_type_summarizer_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-type-summarizer-core title: "@kbn/type-summarizer-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/type-summarizer-core plugin -date: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/type-summarizer-core'] --- import kbnTypeSummarizerCoreObj from './kbn_type_summarizer_core.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index e53680ec54f67d..0f70f70cdc9063 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: 2022-12-19 +date: 2022-12-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_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 41406cb76bdbdb..b87f686dc4804a 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: 2022-12-19 +date: 2022-12-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.devdocs.json b/api_docs/kbn_ui_theme.devdocs.json index 015bf81abefa76..5d5a8c70282ca9 100644 --- a/api_docs/kbn_ui_theme.devdocs.json +++ b/api_docs/kbn_ui_theme.devdocs.json @@ -54,7 +54,7 @@ "label": "Theme", "description": [], "signature": [ - "{ euiCollapsibleNavGroupLightBackgroundColor: string; euiCollapsibleNavGroupDarkBackgroundColor: string; euiCollapsibleNavGroupDarkHighContrastColor: string; euiColorPickerValueRange0: string; euiColorPickerValueRange1: string; euiColorPickerSaturationRange0: string; euiColorPickerSaturationRange1: string; euiColorPickerIndicatorSize: string; euiColorPickerWidth: string; euiColorPaletteDisplaySizes: { sizeExtraSmall: string; sizeSmall: string; sizeMedium: string; }; euiContextMenuWidth: string; euiControlBarBackground: string; euiControlBarText: string; euiControlBarBorderColor: string; euiControlBarInitialHeight: string; euiControlBarMaxHeight: string; euiControlBarHeights: { s: string; m: string; l: string; }; euiDataGridPrefix: string; euiDataGridStyles: string; euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridColumnResizerWidth: string; euiDataGridPopoverMaxHeight: string; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiDataGridVerticalBorder: string; euiSuperDatePickerWidth: string; euiSuperDatePickerButtonWidth: string; euiDragAndDropSpacing: { s: string; m: string; l: string; }; euiEmptyPromptContentMaxWidth: string; euiFilePickerTallHeight: string; euiRangeLevelColors: { primary: string; success: string; warning: string; danger: string; }; textareaResizing: { vertical: string; horizontal: string; both: string; none: string; }; euiHeaderLinksGutterSizes: { gutterXS: string; gutterS: string; gutterM: string; gutterL: string; }; euiKeyPadMenuSize: string; euiKeyPadMenuMarginSize: string; euiMarkdownEditorMinHeight: string; euiResizableButtonTransitionSpeed: string; euiResizableButtonSize: string; euiSelectableListItemBorder: string; euiSelectableListItemPadding: string; euiSelectableTemplateSitewideTypes: { application: { color: string; 'font-weight': number; }; deployment: { color: string; 'font-weight': number; }; article: { color: string; 'font-weight': number; }; case: { color: string; 'font-weight': number; }; platform: { color: string; 'font-weight': number; }; }; euiSideNavEmphasizedBackgroundColor: string; euiSideNavRootTextcolor: string; euiSideNavBranchTextcolor: string; euiSideNavSelectedTextcolor: string; euiSideNavDisabledTextcolor: string; euiStepNumberSize: string; euiStepNumberSmallSize: string; euiStepNumberMargin: string; euiStepStatusColorsToFade: { warning: string; danger: string; disabled: string; incomplete: string; }; euiSuggestItemColors: { tint0: string; tint1: string; tint2: string; tint3: string; tint4: string; tint5: string; tint6: string; tint7: string; tint8: string; tint9: string; tint10: string; }; euiTableCellContentPadding: string; euiTableCellContentPaddingCompressed: string; euiTableCellCheckboxWidth: string; euiTableActionsAreaWidth: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiRangeTrackColor: string; euiRangeHighlightColor: string; euiRangeThumbRadius: string; euiRangeThumbHeight: string; euiRangeThumbWidth: string; euiRangeThumbBorderColor: string; euiRangeThumbBackgroundColor: string; euiRangeTrackWidth: string; euiRangeTrackHeight: string; euiRangeTrackCompressedHeight: string; euiRangeTrackBorderWidth: number; euiRangeTrackBorderColor: string; euiRangeTrackRadius: string; euiRangeDisabledOpacity: number; euiRangeHighlightHeight: string; euiRangeHighlightCompressedHeight: string; euiRangeHeight: string; euiRangeCompressedHeight: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiButtonMinWidth: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiTooltipBackgroundColor: string; euiTooltipBorderColor: string; euiTooltipAnimations: { top: string; left: string; bottom: string; right: string; }; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; euiDatePickerCalendarWidth: string; euiDatePickerPadding: string; euiDatePickerGap: string; euiDatePickerCalendarColumns: number; euiDatePickerButtonSize: string; euiDatePickerMinControlWidth: string; euiDatePickerMaxControlWidth: string; euiButtonDefaultTransparency: number; euiButtonFontWeight: number; euiStepStatusColors: { default: string; complete: string; warning: string; danger: string; }; }" + "{ euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; }" ], "path": "packages/kbn-ui-theme/src/theme.ts", "deprecated": false, @@ -86,7 +86,7 @@ "label": "euiDarkVars", "description": [], "signature": [ - "{ euiCollapsibleNavGroupLightBackgroundColor: string; euiCollapsibleNavGroupDarkBackgroundColor: string; euiCollapsibleNavGroupDarkHighContrastColor: string; euiColorPickerValueRange0: string; euiColorPickerValueRange1: string; euiColorPickerSaturationRange0: string; euiColorPickerSaturationRange1: string; euiColorPickerIndicatorSize: string; euiColorPickerWidth: string; euiColorPaletteDisplaySizes: { sizeExtraSmall: string; sizeSmall: string; sizeMedium: string; }; euiContextMenuWidth: string; euiControlBarBackground: string; euiControlBarText: string; euiControlBarBorderColor: string; euiControlBarInitialHeight: string; euiControlBarMaxHeight: string; euiControlBarHeights: { s: string; m: string; l: string; }; euiDataGridPrefix: string; euiDataGridStyles: string; euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridColumnResizerWidth: string; euiDataGridPopoverMaxHeight: string; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiDataGridVerticalBorder: string; euiSuperDatePickerWidth: string; euiSuperDatePickerButtonWidth: string; euiDragAndDropSpacing: { s: string; m: string; l: string; }; euiEmptyPromptContentMaxWidth: string; euiFilePickerTallHeight: string; euiRangeLevelColors: { primary: string; success: string; warning: string; danger: string; }; textareaResizing: { vertical: string; horizontal: string; both: string; none: string; }; euiHeaderLinksGutterSizes: { gutterXS: string; gutterS: string; gutterM: string; gutterL: string; }; euiKeyPadMenuSize: string; euiKeyPadMenuMarginSize: string; euiMarkdownEditorMinHeight: string; euiResizableButtonTransitionSpeed: string; euiResizableButtonSize: string; euiSelectableListItemBorder: string; euiSelectableListItemPadding: string; euiSelectableTemplateSitewideTypes: { application: { color: string; 'font-weight': number; }; deployment: { color: string; 'font-weight': number; }; article: { color: string; 'font-weight': number; }; case: { color: string; 'font-weight': number; }; platform: { color: string; 'font-weight': number; }; }; euiSideNavEmphasizedBackgroundColor: string; euiSideNavRootTextcolor: string; euiSideNavBranchTextcolor: string; euiSideNavSelectedTextcolor: string; euiSideNavDisabledTextcolor: string; euiStepNumberSize: string; euiStepNumberSmallSize: string; euiStepNumberMargin: string; euiStepStatusColorsToFade: { warning: string; danger: string; disabled: string; incomplete: string; }; euiSuggestItemColors: { tint0: string; tint1: string; tint2: string; tint3: string; tint4: string; tint5: string; tint6: string; tint7: string; tint8: string; tint9: string; tint10: string; }; euiTableCellContentPadding: string; euiTableCellContentPaddingCompressed: string; euiTableCellCheckboxWidth: string; euiTableActionsAreaWidth: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiRangeTrackColor: string; euiRangeHighlightColor: string; euiRangeThumbRadius: string; euiRangeThumbHeight: string; euiRangeThumbWidth: string; euiRangeThumbBorderColor: string; euiRangeThumbBackgroundColor: string; euiRangeTrackWidth: string; euiRangeTrackHeight: string; euiRangeTrackCompressedHeight: string; euiRangeTrackBorderWidth: number; euiRangeTrackBorderColor: string; euiRangeTrackRadius: string; euiRangeDisabledOpacity: number; euiRangeHighlightHeight: string; euiRangeHighlightCompressedHeight: string; euiRangeHeight: string; euiRangeCompressedHeight: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiButtonMinWidth: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiTooltipBackgroundColor: string; euiTooltipBorderColor: string; euiTooltipAnimations: { top: string; left: string; bottom: string; right: string; }; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; euiDatePickerCalendarWidth: string; euiDatePickerPadding: string; euiDatePickerGap: string; euiDatePickerCalendarColumns: number; euiDatePickerButtonSize: string; euiDatePickerMinControlWidth: string; euiDatePickerMaxControlWidth: string; euiButtonDefaultTransparency: number; euiButtonFontWeight: number; euiStepStatusColors: { default: string; complete: string; warning: string; danger: string; }; }" + "{ euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; }" ], "path": "packages/kbn-ui-theme/src/theme.ts", "deprecated": false, @@ -101,7 +101,7 @@ "label": "euiLightVars", "description": [], "signature": [ - "{ euiCollapsibleNavGroupLightBackgroundColor: string; euiCollapsibleNavGroupDarkBackgroundColor: string; euiCollapsibleNavGroupDarkHighContrastColor: string; euiColorPickerValueRange0: string; euiColorPickerValueRange1: string; euiColorPickerSaturationRange0: string; euiColorPickerSaturationRange1: string; euiColorPickerIndicatorSize: string; euiColorPickerWidth: string; euiColorPaletteDisplaySizes: { sizeExtraSmall: string; sizeSmall: string; sizeMedium: string; }; euiContextMenuWidth: string; euiControlBarBackground: string; euiControlBarText: string; euiControlBarBorderColor: string; euiControlBarInitialHeight: string; euiControlBarMaxHeight: string; euiControlBarHeights: { s: string; m: string; l: string; }; euiDataGridPrefix: string; euiDataGridStyles: string; euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridColumnResizerWidth: string; euiDataGridPopoverMaxHeight: string; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiDataGridVerticalBorder: string; euiSuperDatePickerWidth: string; euiSuperDatePickerButtonWidth: string; euiDragAndDropSpacing: { s: string; m: string; l: string; }; euiEmptyPromptContentMaxWidth: string; euiFilePickerTallHeight: string; euiRangeLevelColors: { primary: string; success: string; warning: string; danger: string; }; textareaResizing: { vertical: string; horizontal: string; both: string; none: string; }; euiHeaderLinksGutterSizes: { gutterXS: string; gutterS: string; gutterM: string; gutterL: string; }; euiKeyPadMenuSize: string; euiKeyPadMenuMarginSize: string; euiMarkdownEditorMinHeight: string; euiResizableButtonTransitionSpeed: string; euiResizableButtonSize: string; euiSelectableListItemBorder: string; euiSelectableListItemPadding: string; euiSelectableTemplateSitewideTypes: { application: { color: string; 'font-weight': number; }; deployment: { color: string; 'font-weight': number; }; article: { color: string; 'font-weight': number; }; case: { color: string; 'font-weight': number; }; platform: { color: string; 'font-weight': number; }; }; euiSideNavEmphasizedBackgroundColor: string; euiSideNavRootTextcolor: string; euiSideNavBranchTextcolor: string; euiSideNavSelectedTextcolor: string; euiSideNavDisabledTextcolor: string; euiStepNumberSize: string; euiStepNumberSmallSize: string; euiStepNumberMargin: string; euiStepStatusColorsToFade: { warning: string; danger: string; disabled: string; incomplete: string; }; euiSuggestItemColors: { tint0: string; tint1: string; tint2: string; tint3: string; tint4: string; tint5: string; tint6: string; tint7: string; tint8: string; tint9: string; tint10: string; }; euiTableCellContentPadding: string; euiTableCellContentPaddingCompressed: string; euiTableCellCheckboxWidth: string; euiTableActionsAreaWidth: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiRangeTrackColor: string; euiRangeHighlightColor: string; euiRangeThumbRadius: string; euiRangeThumbHeight: string; euiRangeThumbWidth: string; euiRangeThumbBorderColor: string; euiRangeThumbBackgroundColor: string; euiRangeTrackWidth: string; euiRangeTrackHeight: string; euiRangeTrackCompressedHeight: string; euiRangeTrackBorderWidth: number; euiRangeTrackBorderColor: string; euiRangeTrackRadius: string; euiRangeDisabledOpacity: number; euiRangeHighlightHeight: string; euiRangeHighlightCompressedHeight: string; euiRangeHeight: string; euiRangeCompressedHeight: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiButtonMinWidth: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiTooltipBackgroundColor: string; euiTooltipBorderColor: string; euiTooltipAnimations: { top: string; left: string; bottom: string; right: string; }; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; euiDatePickerCalendarWidth: string; euiDatePickerPadding: string; euiDatePickerGap: string; euiDatePickerCalendarColumns: number; euiDatePickerButtonSize: string; euiDatePickerMinControlWidth: string; euiDatePickerMaxControlWidth: string; euiButtonDefaultTransparency: number; euiButtonFontWeight: number; euiStepStatusColors: { default: string; complete: string; warning: string; danger: string; }; }" + "{ euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; }" ], "path": "packages/kbn-ui-theme/src/theme.ts", "deprecated": false, @@ -118,7 +118,7 @@ "\nEUI Theme vars that automatically adjust to light/dark theme" ], "signature": [ - "{ euiCollapsibleNavGroupLightBackgroundColor: string; euiCollapsibleNavGroupDarkBackgroundColor: string; euiCollapsibleNavGroupDarkHighContrastColor: string; euiColorPickerValueRange0: string; euiColorPickerValueRange1: string; euiColorPickerSaturationRange0: string; euiColorPickerSaturationRange1: string; euiColorPickerIndicatorSize: string; euiColorPickerWidth: string; euiColorPaletteDisplaySizes: { sizeExtraSmall: string; sizeSmall: string; sizeMedium: string; }; euiContextMenuWidth: string; euiControlBarBackground: string; euiControlBarText: string; euiControlBarBorderColor: string; euiControlBarInitialHeight: string; euiControlBarMaxHeight: string; euiControlBarHeights: { s: string; m: string; l: string; }; euiDataGridPrefix: string; euiDataGridStyles: string; euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridColumnResizerWidth: string; euiDataGridPopoverMaxHeight: string; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiDataGridVerticalBorder: string; euiSuperDatePickerWidth: string; euiSuperDatePickerButtonWidth: string; euiDragAndDropSpacing: { s: string; m: string; l: string; }; euiEmptyPromptContentMaxWidth: string; euiFilePickerTallHeight: string; euiRangeLevelColors: { primary: string; success: string; warning: string; danger: string; }; textareaResizing: { vertical: string; horizontal: string; both: string; none: string; }; euiHeaderLinksGutterSizes: { gutterXS: string; gutterS: string; gutterM: string; gutterL: string; }; euiKeyPadMenuSize: string; euiKeyPadMenuMarginSize: string; euiMarkdownEditorMinHeight: string; euiResizableButtonTransitionSpeed: string; euiResizableButtonSize: string; euiSelectableListItemBorder: string; euiSelectableListItemPadding: string; euiSelectableTemplateSitewideTypes: { application: { color: string; 'font-weight': number; }; deployment: { color: string; 'font-weight': number; }; article: { color: string; 'font-weight': number; }; case: { color: string; 'font-weight': number; }; platform: { color: string; 'font-weight': number; }; }; euiSideNavEmphasizedBackgroundColor: string; euiSideNavRootTextcolor: string; euiSideNavBranchTextcolor: string; euiSideNavSelectedTextcolor: string; euiSideNavDisabledTextcolor: string; euiStepNumberSize: string; euiStepNumberSmallSize: string; euiStepNumberMargin: string; euiStepStatusColorsToFade: { warning: string; danger: string; disabled: string; incomplete: string; }; euiSuggestItemColors: { tint0: string; tint1: string; tint2: string; tint3: string; tint4: string; tint5: string; tint6: string; tint7: string; tint8: string; tint9: string; tint10: string; }; euiTableCellContentPadding: string; euiTableCellContentPaddingCompressed: string; euiTableCellCheckboxWidth: string; euiTableActionsAreaWidth: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiRangeTrackColor: string; euiRangeHighlightColor: string; euiRangeThumbRadius: string; euiRangeThumbHeight: string; euiRangeThumbWidth: string; euiRangeThumbBorderColor: string; euiRangeThumbBackgroundColor: string; euiRangeTrackWidth: string; euiRangeTrackHeight: string; euiRangeTrackCompressedHeight: string; euiRangeTrackBorderWidth: number; euiRangeTrackBorderColor: string; euiRangeTrackRadius: string; euiRangeDisabledOpacity: number; euiRangeHighlightHeight: string; euiRangeHighlightCompressedHeight: string; euiRangeHeight: string; euiRangeCompressedHeight: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiButtonMinWidth: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiTooltipBackgroundColor: string; euiTooltipBorderColor: string; euiTooltipAnimations: { top: string; left: string; bottom: string; right: string; }; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; euiDatePickerCalendarWidth: string; euiDatePickerPadding: string; euiDatePickerGap: string; euiDatePickerCalendarColumns: number; euiDatePickerButtonSize: string; euiDatePickerMinControlWidth: string; euiDatePickerMaxControlWidth: string; euiButtonDefaultTransparency: number; euiButtonFontWeight: number; euiStepStatusColors: { default: string; complete: string; warning: string; danger: string; }; }" + "{ euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; }" ], "path": "packages/kbn-ui-theme/src/theme.ts", "deprecated": false, diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 7f1b7f8ad57530..3f29f1604e5e7e 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: 2022-12-19 +date: 2022-12-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 1f9af806acf706..567df8beb13f72 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: 2022-12-19 +date: 2022-12-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 019d9645672b1a..cc1607486ea371 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: 2022-12-19 +date: 2022-12-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 461696662bc252..e6a428efbd6e30 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: 2022-12-19 +date: 2022-12-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 c2198ec85a2517..f9cc4ee9099193 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: 2022-12-19 +date: 2022-12-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 e5f6da1a82c4e8..fa74b569d62a8a 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: 2022-12-19 +date: 2022-12-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 27e4d54fa6ec5c..1668e2c19e3884 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: 2022-12-19 +date: 2022-12-20 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 8ed0bf40a4098e..1e2ef711030ac7 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -86,7 +86,7 @@ "label": "getDerivedStateFromProps", "description": [], "signature": [ - "(nextProps: Props, prevState: State) => { value: [ValueMember, ValueMember] | undefined; prevValue: [ValueMember, ValueMember] | undefined; isValid: boolean; errorMessage: string; } | null" + "(nextProps: Props, prevState: State) => { value: [string | number, string | number] | undefined; prevValue: [string | number, string | number] | undefined; isValid: boolean; errorMessage: string; } | null" ], "path": "src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx", "deprecated": false, @@ -145,7 +145,7 @@ "label": "_onChange", "description": [], "signature": [ - "(value: [ValueMember, ValueMember]) => void" + "(value: [string | number, string | number]) => void" ], "path": "src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx", "deprecated": false, @@ -159,7 +159,7 @@ "label": "value", "description": [], "signature": [ - "[ValueMember, ValueMember]" + "[string | number, string | number]" ], "path": "src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx", "deprecated": false, @@ -3563,7 +3563,7 @@ "label": "Value", "description": [], "signature": [ - "[ValueMember, ValueMember]" + "[string | number, string | number]" ], "path": "src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx", "deprecated": false, @@ -4119,7 +4119,7 @@ "label": "eui", "description": [], "signature": [ - "{ euiCollapsibleNavGroupLightBackgroundColor: string; euiCollapsibleNavGroupDarkBackgroundColor: string; euiCollapsibleNavGroupDarkHighContrastColor: string; euiColorPickerValueRange0: string; euiColorPickerValueRange1: string; euiColorPickerSaturationRange0: string; euiColorPickerSaturationRange1: string; euiColorPickerIndicatorSize: string; euiColorPickerWidth: string; euiColorPaletteDisplaySizes: { sizeExtraSmall: string; sizeSmall: string; sizeMedium: string; }; euiContextMenuWidth: string; euiControlBarBackground: string; euiControlBarText: string; euiControlBarBorderColor: string; euiControlBarInitialHeight: string; euiControlBarMaxHeight: string; euiControlBarHeights: { s: string; m: string; l: string; }; euiDataGridPrefix: string; euiDataGridStyles: string; euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridColumnResizerWidth: string; euiDataGridPopoverMaxHeight: string; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiDataGridVerticalBorder: string; euiSuperDatePickerWidth: string; euiSuperDatePickerButtonWidth: string; euiDragAndDropSpacing: { s: string; m: string; l: string; }; euiEmptyPromptContentMaxWidth: string; euiFilePickerTallHeight: string; euiRangeLevelColors: { primary: string; success: string; warning: string; danger: string; }; textareaResizing: { vertical: string; horizontal: string; both: string; none: string; }; euiHeaderLinksGutterSizes: { gutterXS: string; gutterS: string; gutterM: string; gutterL: string; }; euiKeyPadMenuSize: string; euiKeyPadMenuMarginSize: string; euiMarkdownEditorMinHeight: string; euiResizableButtonTransitionSpeed: string; euiResizableButtonSize: string; euiSelectableListItemBorder: string; euiSelectableListItemPadding: string; euiSelectableTemplateSitewideTypes: { application: { color: string; 'font-weight': number; }; deployment: { color: string; 'font-weight': number; }; article: { color: string; 'font-weight': number; }; case: { color: string; 'font-weight': number; }; platform: { color: string; 'font-weight': number; }; }; euiSideNavEmphasizedBackgroundColor: string; euiSideNavRootTextcolor: string; euiSideNavBranchTextcolor: string; euiSideNavSelectedTextcolor: string; euiSideNavDisabledTextcolor: string; euiStepNumberSize: string; euiStepNumberSmallSize: string; euiStepNumberMargin: string; euiStepStatusColorsToFade: { warning: string; danger: string; disabled: string; incomplete: string; }; euiSuggestItemColors: { tint0: string; tint1: string; tint2: string; tint3: string; tint4: string; tint5: string; tint6: string; tint7: string; tint8: string; tint9: string; tint10: string; }; euiTableCellContentPadding: string; euiTableCellContentPaddingCompressed: string; euiTableCellCheckboxWidth: string; euiTableActionsAreaWidth: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiRangeTrackColor: string; euiRangeHighlightColor: string; euiRangeThumbRadius: string; euiRangeThumbHeight: string; euiRangeThumbWidth: string; euiRangeThumbBorderColor: string; euiRangeThumbBackgroundColor: string; euiRangeTrackWidth: string; euiRangeTrackHeight: string; euiRangeTrackCompressedHeight: string; euiRangeTrackBorderWidth: number; euiRangeTrackBorderColor: string; euiRangeTrackRadius: string; euiRangeDisabledOpacity: number; euiRangeHighlightHeight: string; euiRangeHighlightCompressedHeight: string; euiRangeHeight: string; euiRangeCompressedHeight: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiButtonMinWidth: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiTooltipBackgroundColor: string; euiTooltipBorderColor: string; euiTooltipAnimations: { top: string; left: string; bottom: string; right: string; }; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; euiDatePickerCalendarWidth: string; euiDatePickerPadding: string; euiDatePickerGap: string; euiDatePickerCalendarColumns: number; euiDatePickerButtonSize: string; euiDatePickerMinControlWidth: string; euiDatePickerMaxControlWidth: string; euiButtonDefaultTransparency: number; euiButtonFontWeight: number; euiStepStatusColors: { default: string; complete: string; warning: string; danger: string; }; }" + "{ euiZDataGrid: number; euiZHeaderBelowDataGrid: number; euiZDataGridCellPopover: number; euiDataGridCellPaddingS: string; euiDataGridCellPaddingM: string; euiDataGridCellPaddingL: string; euiTableHoverColor: string; euiTableSelectedColor: string; euiTableHoverSelectedColor: string; euiTableActionsBorderColor: string; euiTableHoverClickableColor: string; euiTableFocusClickableColor: string; euiContrastRatioText: number; euiContrastRatioGraphic: number; euiContrastRatioDisabled: number; euiAnimSlightBounce: string; euiAnimSlightResistance: string; euiAnimSpeedExtraFast: string; euiAnimSpeedFast: string; euiAnimSpeedNormal: string; euiAnimSpeedSlow: string; euiAnimSpeedExtraSlow: string; euiBorderWidthThin: string; euiBorderWidthThick: string; euiBorderColor: string; euiBorderRadius: string; euiBorderRadiusSmall: string; euiBorderThick: string; euiBorderThin: string; euiBorderEditable: string; euiButtonHeight: string; euiButtonHeightSmall: string; euiButtonHeightXSmall: string; euiButtonColorDisabled: string; euiButtonColorDisabledText: string; euiButtonColorGhostDisabled: string; euiButtonTypes: { primary: string; accent: string; success: string; warning: string; danger: string; ghost: string; text: string; }; euiPaletteColorBlind: { euiColorVis0: { graphic: string; behindText: string; }; euiColorVis1: { graphic: string; behindText: string; }; euiColorVis2: { graphic: string; behindText: string; }; euiColorVis3: { graphic: string; behindText: string; }; euiColorVis4: { graphic: string; behindText: string; }; euiColorVis5: { graphic: string; behindText: string; }; euiColorVis6: { graphic: string; behindText: string; }; euiColorVis7: { graphic: string; behindText: string; }; euiColorVis8: { graphic: string; behindText: string; }; euiColorVis9: { graphic: string; behindText: string; }; }; euiPaletteColorBlindKeys: string; euiColorVis0: string; euiColorVis1: string; euiColorVis2: string; euiColorVis3: string; euiColorVis4: string; euiColorVis5: string; euiColorVis6: string; euiColorVis7: string; euiColorVis8: string; euiColorVis9: string; euiColorVis0_behindText: string; euiColorVis1_behindText: string; euiColorVis2_behindText: string; euiColorVis3_behindText: string; euiColorVis4_behindText: string; euiColorVis5_behindText: string; euiColorVis6_behindText: string; euiColorVis7_behindText: string; euiColorVis8_behindText: string; euiColorVis9_behindText: string; euiFontWeightLight: number; euiFontWeightRegular: number; euiFontWeightMedium: number; euiFontWeightSemiBold: number; euiFontWeightBold: number; euiCodeFontWeightRegular: number; euiCodeFontWeightBold: number; euiFormMaxWidth: string; euiFormControlHeight: string; euiFormControlCompressedHeight: string; euiFormControlPadding: string; euiFormControlCompressedPadding: string; euiFormControlBorderRadius: string; euiFormControlCompressedBorderRadius: string; euiRadioSize: string; euiCheckBoxSize: string; euiCheckboxBorderRadius: string; euiSwitchHeight: string; euiSwitchWidth: string; euiSwitchThumbSize: string; euiSwitchIconHeight: string; euiSwitchHeightCompressed: string; euiSwitchWidthCompressed: string; euiSwitchThumbSizeCompressed: string; euiSwitchHeightMini: string; euiSwitchWidthMini: string; euiSwitchThumbSizeMini: string; euiFormBackgroundColor: string; euiFormBackgroundDisabledColor: string; euiFormBackgroundReadOnlyColor: string; euiFormBorderOpaqueColor: string; euiFormBorderColor: string; euiFormBorderDisabledColor: string; euiFormCustomControlDisabledIconColor: string; euiFormCustomControlBorderColor: string; euiFormControlDisabledColor: string; euiFormControlBoxShadow: string; euiFormControlPlaceholderText: string; euiFormInputGroupLabelBackground: string; euiFormInputGroupBorder: string; euiSwitchOffColor: string; euiFormControlIconSizes: { small: string; medium: string; large: string; xLarge: string; xxLarge: string; }; euiFormControlLayoutGroupInputHeight: string; euiFormControlLayoutGroupInputCompressedHeight: string; euiFormControlLayoutGroupInputCompressedBorderRadius: string; euiHeaderBackgroundColor: string; euiHeaderDarkBackgroundColor: string; euiHeaderBorderColor: string; euiHeaderBreadcrumbColor: string; euiHeaderHeight: string; euiHeaderChildSize: string; euiHeaderHeightCompensation: string; euiPageDefaultMaxWidth: string; euiPageSidebarMinWidth: string; euiPanelPaddingModifiers: { paddingSmall: string; paddingMedium: string; paddingLarge: string; }; euiPanelBorderRadiusModifiers: { borderRadiusNone: number; borderRadiusMedium: string; }; euiPanelBackgroundColorModifiers: { transparent: string; plain: string; subdued: string; accent: string; primary: string; success: string; warning: string; danger: string; }; euiBreakpoints: { xs: number; s: string; m: string; l: string; xl: string; }; euiBreakpointKeys: string; euiShadowColor: string; euiSize: string; euiSizeXS: string; euiSizeS: string; euiSizeM: string; euiSizeL: string; euiSizeXL: string; euiSizeXXL: string; euiScrollBar: string; euiScrollBarCorner: string; euiScrollBarCornerThin: string; euiFocusRingColor: string; euiFocusRingAnimStartColor: string; euiFocusRingAnimStartSize: string; euiFocusRingAnimStartSizeLarge: string; euiFocusRingSizeLarge: string; euiFocusRingSize: string; euiFocusTransparency: number; euiFocusTransparencyPercent: string; euiFocusBackgroundColor: string; euiFontFamily: string; euiCodeFontFamily: string; euiFontFeatureSettings: string; euiTextScale: string; euiFontSize: string; euiFontSizeXS: string; euiFontSizeS: string; euiFontSizeM: string; euiFontSizeL: string; euiFontSizeXL: string; euiFontSizeXXL: string; euiLineHeight: number; euiBodyLineHeight: number; euiTitles: { xxxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xxs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; xs: { 'font-size': string; 'line-height': string; 'font-weight': number; }; s: { 'font-size': string; 'line-height': string; 'font-weight': number; }; m: { 'font-size': string; 'line-height': string; 'font-weight': number; }; l: { 'font-size': string; 'line-height': string; 'font-weight': number; }; }; euiZLevel0: number; euiZLevel1: number; euiZLevel2: number; euiZLevel3: number; euiZLevel4: number; euiZLevel5: number; euiZLevel6: number; euiZLevel7: number; euiZLevel8: number; euiZLevel9: number; euiZToastList: number; euiZModal: number; euiZMask: number; euiZNavigation: number; euiZContentMenu: number; euiZHeader: number; euiZFlyout: number; euiZMaskBelowHeader: number; euiZContent: number; euiColorGhost: string; euiColorInk: string; euiColorPrimary: string; euiColorAccent: string; euiColorSuccess: string; euiColorWarning: string; euiColorDanger: string; euiColorEmptyShade: string; euiColorLightestShade: string; euiColorLightShade: string; euiColorMediumShade: string; euiColorDarkShade: string; euiColorDarkestShade: string; euiColorFullShade: string; euiPageBackgroundColor: string; euiColorHighlight: string; euiTextColor: string; euiTitleColor: string; euiTextSubduedColor: string; euiColorDisabled: string; euiColorPrimaryText: string; euiColorSuccessText: string; euiColorAccentText: string; euiColorWarningText: string; euiColorDangerText: string; euiColorDisabledText: string; euiLinkColor: string; euiColorChartLines: string; euiColorChartBand: string; }" ], "path": "src/plugins/kibana_react/common/eui_styled_components.tsx", "deprecated": false, diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 210675dae533c6..04ba2492e3cb12 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: 2022-12-19 +date: 2022-12-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 1b278651cb7d66..f38a6ac386bb9e 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: 2022-12-19 +date: 2022-12-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 893ea884909bc1..0154ec63980d65 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: 2022-12-19 +date: 2022-12-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 c77cfd90650afe..ab0082ec490c66 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: 2022-12-19 +date: 2022-12-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 fb0e02d2ad2ce8..7233272b18b756 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: 2022-12-19 +date: 2022-12-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 c7c658d2dd2715..aa4cd0b204d176 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: 2022-12-19 +date: 2022-12-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 340af45ca3dde8..19d2c18fb5508e 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: 2022-12-19 +date: 2022-12-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 73f376c20957ec..2be124a8120704 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: 2022-12-19 +date: 2022-12-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 2d4879b74b7f20..3e89378a3bf259 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: 2022-12-19 +date: 2022-12-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 0c7b2b21621c22..f8225dea0d7e82 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: 2022-12-19 +date: 2022-12-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 d22af86f594be8..d06582160fb9cb 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: 2022-12-19 +date: 2022-12-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 b9869a16cb43e5..7c600d444763fb 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: 2022-12-19 +date: 2022-12-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 b41f347a51d949..87b71a8a8f0533 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: 2022-12-19 +date: 2022-12-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 1919198e89cc98..356db6d5ebe4c7 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: 2022-12-19 +date: 2022-12-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 2fbda74a9425a8..2a79e80c18b772 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: 2022-12-19 +date: 2022-12-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 5e46a2f57e74ed..00365297817eb0 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: 2022-12-19 +date: 2022-12-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 c494d12518e73f..26cbb324264d81 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: 2022-12-19 +date: 2022-12-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 b282a4dcdd6687..1250035864b96e 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: 2022-12-19 +date: 2022-12-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 273588ca860189..dbadf65100ec0d 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: 2022-12-19 +date: 2022-12-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 a90f4910e94608..2077920918a348 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: 2022-12-19 +date: 2022-12-20 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 | |--------------|----------|------------------------| -| 529 | 441 | 41 | +| 532 | 444 | 42 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 33829 | 523 | 23585 | 1159 | +| 33897 | 524 | 23628 | 1159 | ## Plugin Directory @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 226 | 8 | 221 | 24 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 36 | 1 | 32 | 2 | | | [Machine Learning UI](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 12 | 0 | 1 | 2 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 420 | 0 | 411 | 35 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 421 | 0 | 412 | 35 | | | [APM UI](https://github.com/orgs/elastic/teams/apm-ui) | The user interface for Elastic APM | 42 | 0 | 42 | 58 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 0 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Considering using bfetch capabilities when fetching large amounts of data. This services supports batching HTTP requests and streaming responses back. | 89 | 1 | 74 | 2 | @@ -40,14 +40,15 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 39 | 0 | 11 | 0 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | Chat available on Elastic Cloud deployments for quicker assistance. | 1 | 0 | 0 | 0 | | | [Platform Onboarding](https://github.com/orgs/elastic/teams/platform-onboarding) | Static migration page where self-managed users can see text/copy about migrating to Elastic Cloud | 7 | 1 | 7 | 1 | +| | [Cloud Native Integrations](https://github.com/orgs/elastic/teams/sec-cloudnative-integrations) | Defend for Containers | 2 | 0 | 2 | 0 | | | [Kibana Core](https://github.com/orgs/elastic/teams/@elastic/kibana-core) | Provides the necessary APIs to implement A/B testing scenarios, fetching the variations in configuration and reporting back metrics to track conversion rates of the experiments. | 12 | 0 | 0 | 0 | | cloudFullStory | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | When Kibana runs on Elastic Cloud, this plugin registers FullStory as a shipper for telemetry. | 0 | 0 | 0 | 0 | | cloudGainsight | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | When Kibana runs on Elastic Cloud, this plugin registers Gainsight as a shipper for telemetry. | 0 | 0 | 0 | 0 | | cloudLinks | [Kibana Core](https://github.com/orgs/elastic/teams/@kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [Cloud Security Posture](https://github.com/orgs/elastic/teams/cloud-posture-security) | The cloud security posture plugin | 17 | 0 | 2 | 2 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 13 | 0 | 13 | 1 | -| | [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 | 268 | 0 | 259 | 10 | -| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2809 | 17 | 1013 | 0 | +| | [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 | 271 | 0 | 262 | 10 | +| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2811 | 17 | 1014 | 0 | | crossClusterReplication | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | customBranding | [global-experience](https://github.com/orgs/elastic/teams/kibana-global-experience) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [Fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 107 | 0 | 88 | 1 | @@ -62,7 +63,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 10 | 0 | 8 | 2 | | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 100 | 0 | 82 | 4 | | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 37 | 0 | 35 | 2 | -| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds embeddables service to Kibana | 522 | 8 | 421 | 4 | +| | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds embeddables service to Kibana | 524 | 8 | 423 | 4 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends embeddable plugin with more functionality | 14 | 0 | 14 | 0 | | | [Platform Security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 51 | 0 | 44 | 0 | | | [Enterprise Search](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Adds dashboards for discovering and managing Enterprise Search products. | 9 | 0 | 9 | 0 | @@ -96,6 +97,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | grokdebugger | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | | [Journey Onboarding](https://github.com/orgs/elastic/teams/platform-onboarding) | Guided onboarding framework | 103 | 0 | 102 | 0 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 143 | 0 | 104 | 0 | +| imageEmbeddable | [@elastic/kibana-global-experience](https://github.com/orgs/elastic/teams/@elastic/kibana-global-experience) | Image embeddable | 0 | 0 | 0 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 4 | 0 | 4 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 177 | 0 | 172 | 3 | | | [Logs and Metrics UI](https://github.com/orgs/elastic/teams/logs-metrics-ui) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 42 | 0 | 39 | 8 | @@ -126,7 +128,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Observability UI](https://github.com/orgs/elastic/teams/observability-ui) | - | 586 | 40 | 582 | 32 | | | [Security asset management](https://github.com/orgs/elastic/teams/security-asset-management) | - | 21 | 0 | 21 | 5 | | painlessLab | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | -| | [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). | 230 | 7 | 174 | 11 | +| | [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). | 231 | 7 | 175 | 11 | | | [profiling](https://github.com/orgs/elastic/teams/profiling-ui) | - | 15 | 2 | 15 | 0 | | | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 4 | 0 | 4 | 0 | | | [Kibana Reporting Services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 36 | 0 | 16 | 0 | @@ -137,12 +139,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 16 | 0 | 16 | 0 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 130 | 0 | 117 | 0 | | | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 79 | 0 | 73 | 3 | -| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 98 | 0 | 50 | 1 | +| | [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) | - | 100 | 0 | 52 | 1 | | | [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 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | - | 32 | 0 | 13 | 0 | | | [Kibana Reporting Services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 27 | 0 | 8 | 4 | | searchprofiler | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | -| | [Platform Security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 252 | 0 | 92 | 3 | +| | [Platform Security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 251 | 0 | 91 | 1 | | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 112 | 0 | 75 | 28 | | | [Security Team](https://github.com/orgs/elastic/teams/security-team) | - | 7 | 0 | 7 | 1 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds URL Service and sharing capabilities to Kibana | 115 | 0 | 56 | 10 | @@ -160,12 +162,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Security solution](https://github.com/orgs/elastic/teams/security-solution) | - | 257 | 1 | 214 | 21 | | | [Machine Learning 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 | [Kibana Localization](https://github.com/orgs/elastic/teams/kibana-localization) | - | 0 | 0 | 0 | 0 | -| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 576 | 11 | 547 | 52 | +| | [Response Ops](https://github.com/orgs/elastic/teams/response-ops) | - | 579 | 11 | 550 | 53 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds UI Actions service to Kibana | 135 | 2 | 92 | 11 | | | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Extends UI Actions plugin with more functionality | 206 | 0 | 142 | 9 | | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list which can be integrated into apps | 215 | 0 | 203 | 7 | | | [Data Discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | The `unifiedHistogram` plugin provides UI components to create a layout including a resizable histogram and a main display. | 52 | 0 | 15 | 0 | -| | [Visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 134 | 2 | 106 | 18 | +| | [Visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Contains all the key functionality of Kibana's unified search experience.Contains all the key functionality of Kibana's unified search experience. | 134 | 2 | 105 | 18 | | upgradeAssistant | [Stack Management](https://github.com/orgs/elastic/teams/kibana-stack-management) | - | 0 | 0 | 0 | 0 | | urlDrilldown | [App Services](https://github.com/orgs/elastic/teams/kibana-app-services) | Adds drilldown implementations to Kibana | 0 | 0 | 0 | 0 | | | [Vis Editors](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 12 | 0 | 12 | 0 | @@ -280,7 +282,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | Kibana Core | - | 7 | 0 | 7 | 0 | | | Kibana Core | - | 25 | 5 | 25 | 1 | | | Kibana Core | - | 7 | 0 | 7 | 1 | -| | Kibana Core | - | 393 | 1 | 154 | 0 | +| | Kibana Core | - | 392 | 1 | 154 | 0 | | | Kibana Core | - | 54 | 0 | 48 | 6 | | | Kibana Core | - | 41 | 0 | 40 | 0 | | | Kibana Core | - | 4 | 0 | 2 | 0 | @@ -340,10 +342,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | Kibana Core | - | 4 | 0 | 4 | 0 | | | Kibana Core | - | 112 | 0 | 79 | 45 | | | Kibana Core | - | 12 | 0 | 12 | 0 | -| | Kibana Core | - | 297 | 0 | 90 | 0 | +| | Kibana Core | - | 305 | 0 | 91 | 0 | | | Kibana Core | - | 69 | 0 | 69 | 4 | | | Kibana Core | - | 14 | 0 | 14 | 0 | -| | Kibana Core | - | 99 | 1 | 84 | 0 | +| | Kibana Core | - | 108 | 1 | 84 | 0 | | | Kibana Core | - | 12 | 0 | 2 | 0 | | | Kibana Core | - | 19 | 0 | 18 | 0 | | | Kibana Core | - | 20 | 0 | 3 | 0 | @@ -381,7 +383,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Owner missing] | - | 4 | 0 | 4 | 0 | | | [Owner missing] | - | 27 | 0 | 14 | 1 | | | Kibana Core | - | 7 | 0 | 3 | 0 | -| | [Owner missing] | - | 227 | 1 | 170 | 13 | +| | [Owner missing] | - | 244 | 2 | 187 | 13 | | | Kibana Core | - | 11 | 0 | 11 | 0 | | | [Owner missing] | - | 2 | 0 | 1 | 0 | | | [Owner missing] | - | 20 | 0 | 16 | 0 | @@ -411,7 +413,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | Machine Learning UI | This package includes utility functions related to creating elasticsearch aggregation queries, data manipulation and verification. | 82 | 2 | 58 | 0 | | | Machine Learning UI | A type guard to check record like object structures. | 3 | 0 | 2 | 0 | | | Machine Learning UI | Creates a deterministic number based hash out of a string. | 2 | 0 | 1 | 0 | -| | [Owner missing] | - | 60 | 0 | 60 | 2 | +| | [Owner missing] | - | 62 | 0 | 60 | 2 | | | [Owner missing] | - | 47 | 0 | 46 | 10 | | | [Owner missing] | - | 51 | 5 | 34 | 0 | | | [Owner missing] | io ts utilities and types to be shared with plugins from the osquery project | 62 | 0 | 62 | 0 | @@ -452,6 +454,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [Owner missing] | - | 3 | 0 | 2 | 0 | | | [Owner missing] | - | 2 | 0 | 2 | 0 | | | [Owner missing] | - | 1 | 0 | 1 | 0 | +| | [Owner missing] | - | 11 | 0 | 5 | 0 | +| | [Owner missing] | - | 7 | 0 | 7 | 1 | | | [Owner missing] | - | 17 | 0 | 15 | 0 | | | [Owner missing] | - | 17 | 0 | 9 | 0 | | | [Owner missing] | - | 10 | 0 | 9 | 0 | diff --git a/api_docs/presentation_util.devdocs.json b/api_docs/presentation_util.devdocs.json index a14f737f80fab3..3c39d2ff5f8627 100644 --- a/api_docs/presentation_util.devdocs.json +++ b/api_docs/presentation_util.devdocs.json @@ -659,6 +659,23 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "presentationUtil", + "id": "def-public.getContextProvider", + "type": "Function", + "tags": [], + "label": "getContextProvider", + "description": [], + "signature": [ + "() => React.FC<{}>" + ], + "path": "src/plugins/presentation_util/public/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "presentationUtil", "id": "def-public.LazyDashboardPicker", diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index f914ebf4b5816a..842d073ea083c5 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Kibana Presentation](https://github.com/orgs/elastic/teams/kibana-prese | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 230 | 7 | 174 | 11 | +| 231 | 7 | 175 | 11 | ## Client diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index d874c9447f0197..ce53dc14361806 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: 2022-12-19 +date: 2022-12-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 23736a6a1edc7f..af00bf983f9ac7 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: 2022-12-19 +date: 2022-12-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 fe6c6622a86c54..d38c7472ee3257 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: 2022-12-19 +date: 2022-12-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 2f20a7bdef0a6f..2d6a138957a164 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: 2022-12-19 +date: 2022-12-20 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 22f1edf758d6e0..db3d9e7022e333 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -1448,7 +1448,7 @@ "label": "createGetSummarizedAlertsFn", "description": [], "signature": [ - "(opts: CreateGetSummarizedAlertsFnOpts) => () => ({ start, end, executionUuid, ruleId, spaceId }: ", + "(opts: CreateGetSummarizedAlertsFnOpts) => () => ({ start, end, executionUuid, ruleId, spaceId, excludedAlertInstanceIds, }: ", { "pluginId": "alerting", "scope": "server", @@ -1793,7 +1793,7 @@ "section": "def-common.WithoutReservedActionGroups", "text": "WithoutReservedActionGroups" }, - ">) => Promise; getSummarizedAlerts: ({ start, end, executionUuid, ruleId, spaceId }: ", + ">) => Promise; getSummarizedAlerts: ({ start, end, executionUuid, ruleId, spaceId, excludedAlertInstanceIds, }: ", { "pluginId": "alerting", "scope": "server", diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 228f54fc5cbff5..cb4326f2cf36eb 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: 2022-12-19 +date: 2022-12-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 7b0c296f371877..36822f91ea1863 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: 2022-12-19 +date: 2022-12-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 b5bf08de16456a..aa73be71b2d158 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: 2022-12-19 +date: 2022-12-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 8c84049a57e445..ba27dfc3a069bd 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: 2022-12-19 +date: 2022-12-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 facadee4347c29..b32e2bcd5934d3 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: 2022-12-19 +date: 2022-12-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 506abc7bf659b9..66a16fa867ca4f 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.devdocs.json b/api_docs/saved_objects_tagging_oss.devdocs.json index 0b0a504b7fe2c9..05bc556ebdf997 100644 --- a/api_docs/saved_objects_tagging_oss.devdocs.json +++ b/api_docs/saved_objects_tagging_oss.devdocs.json @@ -131,7 +131,7 @@ "\nReturn an observable that will emit everytime the cache's state mutates." ], "signature": [ - "() => ", + "(params?: { waitForInitialization?: boolean | undefined; } | undefined) => ", "Observable", "<", { @@ -146,7 +146,35 @@ "path": "src/plugins/saved_objects_tagging_oss/public/api.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "savedObjectsTaggingOss", + "id": "def-public.ITagsCache.getState$.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "path": "src/plugins/saved_objects_tagging_oss/public/api.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "savedObjectsTaggingOss", + "id": "def-public.ITagsCache.getState$.$1.waitForInitialization", + "type": "CompoundType", + "tags": [], + "label": "waitForInitialization", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/saved_objects_tagging_oss/public/api.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], "returnComment": [] } ], @@ -680,14 +708,15 @@ "section": "def-public.ParseSearchQueryOptions", "text": "ParseSearchQueryOptions" }, - " | undefined) => ", + " | undefined) => Promise<", { "pluginId": "savedObjectsTaggingOss", "scope": "public", "docId": "kibSavedObjectsTaggingOssPluginApi", "section": "def-public.ParsedSearchQuery", "text": "ParsedSearchQuery" - } + }, + ">" ], "path": "src/plugins/saved_objects_tagging_oss/public/api.ts", "deprecated": false, diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 3670d0ae7ca593..a4a9b8600a246c 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Kibana Core](https://github.com/orgs/elastic/teams/kibana-core) for que | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 98 | 0 | 50 | 1 | +| 100 | 0 | 52 | 1 | ## Client diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 849b44c1b67476..1c4910fa0a7bde 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: 2022-12-19 +date: 2022-12-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 755908981302a2..01c0d1e5a36fee 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: 2022-12-19 +date: 2022-12-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 0e6ed137d6cb28..f7df1151cea616 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 60421e61a75a02..ec61dc141f3b75 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -1258,23 +1258,7 @@ "label": "kibana", "description": [], "signature": [ - "AuditKibana", - " | undefined" - ], - "path": "x-pack/plugins/security/server/audit/audit_events.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "security", - "id": "def-server.AuditEvent.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - "AuditHttp", - " | undefined" + "{ space_id?: string | undefined; session_id?: string | undefined; saved_object?: { type: string; id: string; } | undefined; authentication_provider?: string | undefined; authentication_type?: string | undefined; authentication_realm?: string | undefined; lookup_realm?: string | undefined; add_to_spaces?: readonly string[] | undefined; delete_from_spaces?: readonly string[] | undefined; } | undefined" ], "path": "x-pack/plugins/security/server/audit/audit_events.ts", "deprecated": false, diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 900aa3bb450d54..5dd817f4385dde 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Platform Security](https://github.com/orgs/elastic/teams/kibana-securit | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 252 | 0 | 92 | 3 | +| 251 | 0 | 91 | 1 | ## Client diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 99926bcde22d86..866b879c3bda24 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: 2022-12-19 +date: 2022-12-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 3aac95659920b2..7a167e6fbb733e 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: 2022-12-19 +date: 2022-12-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 cd88fcb854d3b1..37032e84f4f1fd 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: 2022-12-19 +date: 2022-12-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 05d9964c0e181c..178f32d22252fa 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: 2022-12-19 +date: 2022-12-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 59c7ba655bceed..501f66bd0fe1c7 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: 2022-12-19 +date: 2022-12-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 03fd5505fc5881..42e31c0400f9d2 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: 2022-12-19 +date: 2022-12-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 2a033b721d6724..e898dc562de744 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: 2022-12-19 +date: 2022-12-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 2d590c0a4ba92d..2b9ca4d707e475 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: 2022-12-19 +date: 2022-12-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 1f7740e37be179..7f43fa3b930179 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: 2022-12-19 +date: 2022-12-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 1c0a5615a8d914..a4c6dd117ca4b1 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: 2022-12-19 +date: 2022-12-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 70dc95ca7d411e..6ce46d35ecc107 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: 2022-12-19 +date: 2022-12-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 c49d62848ffa51..7350268ed6db99 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: 2022-12-19 +date: 2022-12-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 473411a0285305..331bc29887922e 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: 2022-12-19 +date: 2022-12-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 6166500e90c574..df543dc07f8e10 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: 2022-12-19 +date: 2022-12-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 4d74268c0ab55a..8188107e7f9029 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: 2022-12-19 +date: 2022-12-20 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 1037c842fe824a..6d7511a5af97dd 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -327,6 +327,61 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.bulkDeleteRules", + "type": "Function", + "tags": [], + "label": "bulkDeleteRules", + "description": [], + "signature": [ + "({ filter, ids, http, }: ", + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.BulkOperationAttributes", + "text": "BulkOperationAttributes" + }, + ") => Promise<", + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.BulkOperationResponse", + "text": "BulkOperationResponse" + }, + ">" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/bulk_delete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.bulkDeleteRules.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n filter,\n ids,\n http,\n}", + "description": [], + "signature": [ + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.BulkOperationAttributes", + "text": "BulkOperationAttributes" + } + ], + "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/bulk_delete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.ButtonGroupField", @@ -393,79 +448,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.deleteRules", - "type": "Function", - "tags": [], - "label": "deleteRules", - "description": [], - "signature": [ - "({\n ids,\n http,\n}: { ids: string[]; http: ", - { - "pluginId": "@kbn/core-http-browser", - "scope": "common", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-common.HttpSetup", - "text": "HttpSetup" - }, - "; }) => Promise<{ successes: string[]; errors: string[]; }>" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/delete.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.deleteRules.$1", - "type": "Object", - "tags": [], - "label": "{\n ids,\n http,\n}", - "description": [], - "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/delete.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.deleteRules.$1.ids", - "type": "Array", - "tags": [], - "label": "ids", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/delete.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "triggersActionsUi", - "id": "def-public.deleteRules.$1.http", - "type": "Object", - "tags": [], - "label": "http", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-http-browser", - "scope": "common", - "docId": "kibKbnCoreHttpBrowserPluginApi", - "section": "def-common.HttpSetup", - "text": "HttpSetup" - } - ], - "path": "x-pack/plugins/triggers_actions_ui/public/application/lib/rule_api/delete.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "triggersActionsUi", "id": "def-public.EditConnectorFlyout", @@ -4071,6 +4053,81 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.BulkOperationResponse", + "type": "Interface", + "tags": [], + "label": "BulkOperationResponse", + "description": [], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.BulkOperationResponse.rules", + "type": "Array", + "tags": [], + "label": "rules", + "description": [], + "signature": [ + { + "pluginId": "triggersActionsUi", + "scope": "public", + "docId": "kibTriggersActionsUiPluginApi", + "section": "def-public.Rule", + "text": "Rule" + }, + "<", + { + "pluginId": "alerting", + "scope": "common", + "docId": "kibAlertingPluginApi", + "section": "def-common.RuleTypeParams", + "text": "RuleTypeParams" + }, + ">[]" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.BulkOperationResponse.errors", + "type": "Array", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + { + "pluginId": "alerting", + "scope": "server", + "docId": "kibAlertingPluginApi", + "section": "def-server.BulkOperationError", + "text": "BulkOperationError" + }, + "[]" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.BulkOperationResponse.total", + "type": "number", + "tags": [], + "label": "total", + "description": [], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.Comparator", @@ -6468,6 +6525,30 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "triggersActionsUi", + "id": "def-public.BulkOperationAttributes", + "type": "Type", + "tags": [], + "label": "BulkOperationAttributes", + "description": [], + "signature": [ + "BulkOperationAttributesWithoutHttp", + " & { http: ", + { + "pluginId": "@kbn/core-http-browser", + "scope": "common", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-common.HttpSetup", + "text": "HttpSetup" + }, + "; }" + ], + "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "triggersActionsUi", "id": "def-public.connectorDeprecatedMessage", diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 8dec5a9d844e76..2c8efbb789da13 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Response Ops](https://github.com/orgs/elastic/teams/response-ops) for q | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 576 | 11 | 547 | 52 | +| 579 | 11 | 550 | 53 | ## Client diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 7d7eb6ef75c0d7..bc8ccf9a6fd856 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: 2022-12-19 +date: 2022-12-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 2a5aa518fde346..416c8e0b17d575 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: 2022-12-19 +date: 2022-12-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 0cee7f7bb2a36e..7e903c88388745 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: 2022-12-19 +date: 2022-12-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 cb62fbab2b6502..57d49162b8dc27 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.devdocs.json b/api_docs/unified_search.devdocs.json index 72b23fec6e3e67..d8ea7d3f81b71f 100644 --- a/api_docs/unified_search.devdocs.json +++ b/api_docs/unified_search.devdocs.json @@ -106,6 +106,42 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "unifiedSearch", + "id": "def-public.FilterBadgeGroup", + "type": "Function", + "tags": [], + "label": "FilterBadgeGroup", + "description": [ + "\nA `FilterBadgeGroup` component that is wrapped by the `withSuspense` HOC. This component can\nbe used directly by consumers and will load the `FilterBadgeGroupLazy` component lazily with\na predefined fallback and error boundary." + ], + "signature": [ + "React.ForwardRefExoticComponent<", + "FilterBadgeGroupProps", + " & React.RefAttributes<{}>>" + ], + "path": "src/plugins/unified_search/public/filter_badge/index.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "unifiedSearch", + "id": "def-public.FilterBadgeGroup.$1", + "type": "Uncategorized", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "unifiedSearch", "id": "def-public.FilterItem", @@ -210,43 +246,6 @@ "returnComment": [], "initialIsOpen": false }, - { - "parentPluginId": "unifiedSearch", - "id": "def-public.FilterLabel", - "type": "Function", - "tags": [], - "label": "FilterLabel", - "description": [ - "\nRenders the label for a single filter pill" - ], - "signature": [ - "(props: ", - "FilterLabelProps", - ") => JSX.Element" - ], - "path": "src/plugins/unified_search/public/filter_bar/index.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "unifiedSearch", - "id": "def-public.FilterLabel.$1", - "type": "Object", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "FilterLabelProps" - ], - "path": "src/plugins/unified_search/public/filter_bar/index.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], - "initialIsOpen": false - }, { "parentPluginId": "unifiedSearch", "id": "def-public.QueryStringInput", diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index f7a1b2328fc4ac..fec2df71d2b0ab 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Visualizations](https://github.com/orgs/elastic/teams/kibana-visualizat | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 134 | 2 | 106 | 18 | +| 134 | 2 | 105 | 18 | ## Client diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index ebe398f5ac390c..5c5f8e68d808a4 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; @@ -21,7 +21,7 @@ Contact [Visualizations](https://github.com/orgs/elastic/teams/kibana-visualizat | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 134 | 2 | 106 | 18 | +| 134 | 2 | 105 | 18 | ## Client diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index b16087a30a7dbb..aa2554a193d662 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: 2022-12-19 +date: 2022-12-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 deeb87ad48480e..d6ae81817b570b 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: 2022-12-19 +date: 2022-12-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 a16155636097bd..3830ed5b9d61b8 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: 2022-12-19 +date: 2022-12-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 8895e5c38ccc5e..42c3043a43eea2 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: 2022-12-19 +date: 2022-12-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 a0e2c0c17307f7..b810edf7210b25 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: 2022-12-19 +date: 2022-12-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 529bc498e0ffb5..74f439be1870f9 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: 2022-12-19 +date: 2022-12-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 3f33bdc5e9d853..1c6134bf5ccf45 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: 2022-12-19 +date: 2022-12-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 c10c580ac16480..61cf638def8f3b 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: 2022-12-19 +date: 2022-12-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 325958d850bfd8..85deca52ccc010 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: 2022-12-19 +date: 2022-12-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 1291dde565226a..5a623f8262433f 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: 2022-12-19 +date: 2022-12-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 3538a2585572e0..20e9dd54422bd5 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: 2022-12-19 +date: 2022-12-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 4d1c2a470d619d..ca00e0e714133b 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: 2022-12-19 +date: 2022-12-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 12e8c56b1a2b88..e839a7bb77f043 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: 2022-12-19 +date: 2022-12-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 60cb4e713e3171..991f33de129d21 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: 2022-12-19 +date: 2022-12-20 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index f726d3b686d827..814beb270c7fd4 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -449,6 +449,10 @@ The plugin exposes the static DefaultEditorController class to consume. |Static migration page where self-managed users can see text/copy about migrating to Elastic Cloud +|{kib-repo}blob/{branch}/x-pack/plugins/cloud_defend/README.md[cloudDefend] +|This plugin currently only exists to provide custom fleet policy UX for a set of new BPF LSM features. The first feature being container "drift prevention". + + |{kib-repo}blob/{branch}/x-pack/plugins/cloud_integrations/cloud_experiments/README.mdx[cloudExperiments] |The Cloud Experiments Service provides the necessary APIs to implement A/B testing scenarios, fetching the variations in configuration and reporting back metrics to track conversion rates of the experiments. diff --git a/examples/controls_example/kibana.json b/examples/controls_example/kibana.json index 88dd37f41dcfaa..605714954967d4 100644 --- a/examples/controls_example/kibana.json +++ b/examples/controls_example/kibana.json @@ -7,5 +7,12 @@ "version": "1.0.0", "kibanaVersion": "kibana", "ui": true, - "requiredPlugins": ["data", "developerExamples", "presentationUtil", "controls"] + "requiredPlugins": [ + "controls", + "data", + "developerExamples", + "embeddable", + "navigation", + "presentationUtil" + ] } diff --git a/examples/controls_example/public/app.tsx b/examples/controls_example/public/app.tsx index 501d48af70656f..e33ea69a0ef65f 100644 --- a/examples/controls_example/public/app.tsx +++ b/examples/controls_example/public/app.tsx @@ -8,34 +8,36 @@ import React from 'react'; import ReactDOM from 'react-dom'; +import { EuiSpacer } from '@elastic/eui'; import { AppMountParameters } from '@kbn/core/public'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { ControlsExampleStartDeps } from './plugin'; import { BasicReduxExample } from './basic_redux_example'; +import { SearchExample } from './search_example'; -const ControlsExamples = ({ dataViewId }: { dataViewId?: string }) => { - const examples = dataViewId ? ( - <> - - - ) : ( -
{'Please install e-commerce sample data to run controls examples.'}
- ); - return ( +export const renderApp = async ( + { data, navigation }: ControlsExampleStartDeps, + { element }: AppMountParameters +) => { + const dataViews = await data.dataViews.find('kibana_sample_data_logs'); + const examples = + dataViews.length > 0 ? ( + <> + + + + + ) : ( +
{'Install web logs sample data to run controls examples.'}
+ ); + + ReactDOM.render( {examples} - + , + element ); -}; - -export const renderApp = async ( - { data }: ControlsExampleStartDeps, - { element }: AppMountParameters -) => { - const dataViews = await data.dataViews.find('kibana_sample_data_ecommerce'); - const dataViewId = dataViews.length > 0 ? dataViews[0].id : undefined; - ReactDOM.render(, element); return () => ReactDOM.unmountComponentAtNode(element); }; diff --git a/examples/controls_example/public/basic_redux_example.tsx b/examples/controls_example/public/basic_redux_example.tsx index 03edcd82b71a26..0586882d251b2e 100644 --- a/examples/controls_example/public/basic_redux_example.tsx +++ b/examples/controls_example/public/basic_redux_example.tsx @@ -15,15 +15,8 @@ import { ControlStyle, } from '@kbn/controls-plugin/public'; import { withSuspense } from '@kbn/presentation-util-plugin/public'; -import { - EuiButtonGroup, - EuiFlexGroup, - EuiFlexItem, - EuiPanel, - EuiSpacer, - EuiText, - EuiTitle, -} from '@elastic/eui'; +import { EuiButtonGroup, EuiPanel, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); @@ -44,51 +37,36 @@ export const BasicReduxExample = ({ dataViewId }: { dataViewId: string }) => { const controlStyle = select((state) => state.explicitInput.controlStyle); return ( - <> - - - -

Choose a style for your control group:

-
-
- - { - dispatch(setControlStyle(value)); - }} - type="single" - /> - -
- - + { + dispatch(setControlStyle(value)); + }} + type="single" + /> ); }; return ( <> -

Basic Redux Example

+

Redux example

-

- This example uses the redux context from the control group container in order to - dynamically change the style of the control group. -

+

Use the redux context from the control group to set layout style.

@@ -105,17 +83,22 @@ export const BasicReduxExample = ({ dataViewId }: { dataViewId: string }) => { getInitialInput={async (initialInput, builder) => { await builder.addDataControlFromField(initialInput, { dataViewId, - fieldName: 'customer_first_name.keyword', - width: 'small', + title: 'Destintion country', + fieldName: 'geo.dest', + width: 'medium', + grow: false, }); await builder.addDataControlFromField(initialInput, { dataViewId, - fieldName: 'customer_last_name.keyword', + fieldName: 'bytes', width: 'medium', - grow: false, - title: 'Last Name', + grow: true, + title: 'Bytes', }); - return initialInput; + return { + ...initialInput, + viewMode: ViewMode.VIEW, + }; }} /> diff --git a/examples/controls_example/public/constants.ts b/examples/controls_example/public/constants.ts new file mode 100644 index 00000000000000..a077239d980c27 --- /dev/null +++ b/examples/controls_example/public/constants.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 const PLUGIN_ID = 'controlsExamples'; diff --git a/examples/controls_example/public/plugin.tsx b/examples/controls_example/public/plugin.tsx index 6001e9779b5267..7b79d0f415d6e8 100644 --- a/examples/controls_example/public/plugin.tsx +++ b/examples/controls_example/public/plugin.tsx @@ -13,9 +13,11 @@ import { CoreStart, Plugin, } from '@kbn/core/public'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DeveloperExamplesSetup } from '@kbn/developer-examples-plugin/public'; +import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import img from './control_group_image.png'; +import { PLUGIN_ID } from './constants'; interface SetupDeps { developerExamples: DeveloperExamplesSetup; @@ -23,6 +25,7 @@ interface SetupDeps { export interface ControlsExampleStartDeps { data: DataPublicPluginStart; + navigation: NavigationPublicPluginStart; } export class ControlsExamplePlugin @@ -30,7 +33,7 @@ export class ControlsExamplePlugin { public setup(core: CoreSetup, { developerExamples }: SetupDeps) { core.application.register({ - id: 'controlsExamples', + id: PLUGIN_ID, title: 'Controls examples', navLinkStatus: AppNavLinkStatus.hidden, async mount(params: AppMountParameters) { diff --git a/examples/controls_example/public/search_example.tsx b/examples/controls_example/public/search_example.tsx new file mode 100644 index 00000000000000..0fba77fa8ddfe5 --- /dev/null +++ b/examples/controls_example/public/search_example.tsx @@ -0,0 +1,168 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect, useState } from 'react'; +import uuid from 'uuid/v4'; +import { lastValueFrom } from 'rxjs'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { + EuiCallOut, + EuiLoadingSpinner, + EuiPanel, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { LazyControlGroupRenderer, ControlGroupContainer } from '@kbn/controls-plugin/public'; +import { withSuspense } from '@kbn/presentation-util-plugin/public'; +import { PLUGIN_ID } from './constants'; + +const ControlGroupRenderer = withSuspense(LazyControlGroupRenderer); + +interface Props { + data: DataPublicPluginStart; + dataView: DataView; + navigation: NavigationPublicPluginStart; +} + +export const SearchExample = ({ data, dataView, navigation }: Props) => { + const [controlFilters, setControlFilters] = useState([]); + const [controlGroup, setControlGroup] = useState(); + const [hits, setHits] = useState(0); + const [filters, setFilters] = useState([]); + const [isSearching, setIsSearching] = useState(false); + const [query, setQuery] = useState({ + language: 'kuery', + query: '', + }); + const [timeRange, setTimeRange] = useState({ from: 'now-7d', to: 'now' }); + + useEffect(() => { + if (!controlGroup) { + return; + } + const subscription = controlGroup.onFiltersPublished$.subscribe((newFilters) => { + setControlFilters([...newFilters]); + }); + return () => { + subscription.unsubscribe(); + }; + }, [controlGroup]); + + useEffect(() => { + const abortController = new AbortController(); + const search = async () => { + setIsSearching(true); + const searchSource = await data.search.searchSource.create(); + searchSource.setField('index', dataView); + searchSource.setField('size', 0); + searchSource.setField('filter', [ + ...filters, + ...controlFilters, + data.query.timefilter.timefilter.createFilter(dataView, timeRange), + ] as Filter[]); + searchSource.setField('query', query); + const { rawResponse: resp } = await lastValueFrom( + searchSource.fetch$({ + abortSignal: abortController.signal, + sessionId: uuid(), + legacyHitsTotal: false, + }) + ); + const total = resp.hits?.total as undefined | { relation: string; value: number }; + if (total !== undefined) { + setHits(total.value); + } + setIsSearching(false); + }; + + search().catch((error) => { + setIsSearching(false); + if (error.name === 'AbortError') { + // ignore abort errors + } else { + // eslint-disable-next-line no-console + console.error(error); + } + }); + + return () => { + abortController.abort(); + }; + }, [controlFilters, data, dataView, filters, query, timeRange]); + + return ( + <> + +

Search example

+
+ +

+ Pass filters, query, and time range to narrow controls. Combine search bar filters with + controls filters to narrow results. +

+
+ + + { + // filterManager.setFilters populates filter.meta so filter pill has pretty title + data.query.filterManager.setFilters(newFilters); + setFilters(newFilters); + }} + onQuerySubmit={({ dateRange, query: newQuery }) => { + setQuery(newQuery); + setTimeRange(dateRange); + }} + query={query} + showSearchBar={true} + /> + { + await builder.addDataControlFromField(initialInput, { + dataViewId: dataView.id!, + title: 'Destintion country', + fieldName: 'geo.dest', + width: 'medium', + grow: false, + }); + await builder.addDataControlFromField(initialInput, { + dataViewId: dataView.id!, + fieldName: 'bytes', + width: 'medium', + grow: true, + title: 'Bytes', + }); + return { + ...initialInput, + viewMode: ViewMode.VIEW, + }; + }} + onLoadComplete={async (newControlGroup) => { + setControlGroup(newControlGroup); + }} + query={query} + timeRange={timeRange} + /> + + {isSearching ? :

Hits: {hits}

} +
+
+ + ); +}; diff --git a/examples/controls_example/tsconfig.json b/examples/controls_example/tsconfig.json index 1e8a32f62734e5..43673c863c7d43 100644 --- a/examples/controls_example/tsconfig.json +++ b/examples/controls_example/tsconfig.json @@ -17,6 +17,7 @@ { "path": "../developer_examples/tsconfig.json" }, { "path": "../../src/plugins/data/tsconfig.json" }, { "path": "../../src/plugins/controls/tsconfig.json" }, + { "path": "../../src/plugins/navigation/tsconfig.json" }, { "path": "../../src/plugins/presentation_util/tsconfig.json" } ] } diff --git a/package.json b/package.json index 4777433f07312e..f74c286cfc3363 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.5.0-canary.1", "@elastic/ems-client": "8.3.3", - "@elastic/eui": "70.4.0", + "@elastic/eui": "71.0.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", @@ -578,6 +578,7 @@ "moment-duration-format": "^2.3.2", "moment-timezone": "^0.5.34", "monaco-editor": "^0.24.0", + "monaco-yaml": "3.2.1", "mustache": "^2.3.2", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", @@ -733,6 +734,7 @@ "@jest/transform": "^29.3.1", "@jest/types": "^29.3.1", "@kbn/ambient-common-types": "link:bazel-bin/packages/kbn-ambient-common-types", + "@kbn/ambient-ftr-types": "link:bazel-bin/packages/kbn-ambient-ftr-types", "@kbn/ambient-storybook-types": "link:bazel-bin/packages/kbn-ambient-storybook-types", "@kbn/ambient-ui-types": "link:bazel-bin/packages/kbn-ambient-ui-types", "@kbn/apm-synthtrace": "link:bazel-bin/packages/kbn-apm-synthtrace", @@ -898,7 +900,6 @@ "@types/mime-types": "^2.1.0", "@types/minimatch": "^2.0.29", "@types/minimist": "^1.2.2", - "@types/mocha": "^9.1.1", "@types/mock-fs": "^4.13.1", "@types/moment-duration-format": "^2.2.3", "@types/mustache": "^0.8.31", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index 2570dd42525ea0..010a992a61bf19 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -196,6 +196,7 @@ filegroup( "//packages/kbn-ace:build", "//packages/kbn-alerts:build", "//packages/kbn-ambient-common-types:build", + "//packages/kbn-ambient-ftr-types:build", "//packages/kbn-ambient-storybook-types:build", "//packages/kbn-ambient-ui-types:build", "//packages/kbn-analytics:build", diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap index aa77a58ad7202a..6b86cffc5ca207 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap @@ -156,6 +156,7 @@ exports[`Header renders 1`] = ` >
  • { }); afterEach(() => { - mockSecurityExt.checkAuthorization.mockReset(); + mockSecurityExt.performAuthorization.mockReset(); mockSecurityExt.enforceAuthorization.mockReset(); mockSecurityExt.redactNamespaces.mockReset(); mockSecurityExt.addAuditEvent.mockReset(); @@ -495,25 +495,21 @@ describe('collectMultiNamespaceReferences', () => { describe(`errors`, () => { test(`propagates decorated error when not authorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); // 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 - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`adds audit event per object when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); // 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 - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(objects.length); objects.forEach((obj) => { @@ -528,23 +524,19 @@ describe('collectMultiNamespaceReferences', () => { describe('checks privileges', () => { beforeEach(() => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); }); test(`in the default state`, async () => { await expect(collectMultiNamespaceReferences(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedSpaces = new Set(['default', ...SPACES, ...obj1LegacySpaces]); - const { spaces: actualSpaces } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); + const expectedEnforceMap = new Map([[objects[0].type, new Set(['default'])]]); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - const expectedTypesAndSpaces = new Map([[objects[0].type, new Set(['default'])]]); - const { typesAndSpaces: actualTypesAndSpaces } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); + const { spaces: actualSpaces, enforceMap: actualEnforceMap } = + mockSecurityExt.performAuthorization.mock.calls[0][0]; + expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); }); test(`in a non-default state`, async () => { @@ -553,17 +545,13 @@ describe('collectMultiNamespaceReferences', () => { collectMultiNamespaceReferences({ ...params, options: { namespace } }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedSpaces = new Set([namespace, ...SPACES, ...obj1LegacySpaces]); - const { spaces: actualSpaces } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - const expectedTypesAndSpaces = new Map([[objects[0].type, new Set([namespace])]]); - const { typesAndSpaces: actualTypesAndSpaces } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); }); test(`with purpose 'collectMultiNamespaceReferences'`, async () => { @@ -571,19 +559,17 @@ describe('collectMultiNamespaceReferences', () => { purpose: 'collectMultiNamespaceReferences', }; - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(collectMultiNamespaceReferences({ ...params, options })).rejects.toThrow( enforceError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.checkAuthorization).toBeCalledWith( + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toBeCalledWith( expect.objectContaining({ actions: new Set(['bulk_get']), }) ); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); }); test(`with purpose 'updateObjectsSpaces'`, async () => { @@ -591,45 +577,40 @@ describe('collectMultiNamespaceReferences', () => { purpose: 'updateObjectsSpaces', }; - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(collectMultiNamespaceReferences({ ...params, options })).rejects.toThrow( enforceError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.checkAuthorization).toBeCalledWith( + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toBeCalledWith( expect.objectContaining({ actions: new Set(['share_to_space']), }) ); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); }); }); describe('success', () => { beforeEach(async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await collectMultiNamespaceReferences(params); }); test(`calls redactNamespaces with type, spaces, and authorization map`, async () => { - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedSpaces = new Set(['default', ...SPACES, ...obj1LegacySpaces]); - const { spaces: actualSpaces } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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( - 1 + resultObjects.length - ); + 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(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); + 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); @@ -653,15 +634,10 @@ describe('collectMultiNamespaceReferences', () => { }); test(`adds audit event per object when successful`, async () => { - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const resultObjects = [obj1, obj2, obj3]; - // enforce is called once for all objects/spaces, then once per object - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes( - 1 + resultObjects.length - ); - expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(resultObjects.length); resultObjects.forEach((obj) => { expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ 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 ffe3950394dd88..9a97f2f91e4eb3 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 @@ -252,21 +252,18 @@ async function optionallyUseSecurity( } const action = purpose === 'updateObjectsSpaces' ? ('share_to_space' as const) : ('bulk_get' as const); - const { typeMap } = await securityExtension.checkAuthorization({ - types: typesToAuthorize, - spaces: spacesToAuthorize, - actions: new Set([action]), - }); // 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>() ); - securityExtension!.enforceAuthorization({ - typesAndSpaces, - action, - typeMap, + + 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) { @@ -307,6 +304,9 @@ async function optionallyUseSecurity( // 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, 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 2b2c2986aa6749..3ef9aa48f30e4f 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 @@ -18,7 +18,12 @@ import type { SavedObjectsBulkResolveObject, SavedObjectsBaseOptions, } from '@kbn/core-saved-objects-api-server'; -import { SavedObjectsErrorHelpers, SavedObjectsUtils } from '@kbn/core-saved-objects-utils-server'; +import { + setMapsAreEqual, + SavedObjectsErrorHelpers, + SavedObjectsUtils, + setsAreEqual, +} from '@kbn/core-saved-objects-utils-server'; import { SavedObjectsSerializer, LEGACY_URL_ALIAS_TYPE, @@ -35,12 +40,8 @@ import { import { authMap, enforceError, - typeMapsAreEqual, - setsAreEqual, - setupCheckAuthorized, - setupCheckUnauthorized, - setupEnforceFailure, - setupEnforceSuccess, + setupPerformAuthFullyAuthorized, + setupPerformAuthEnforceFailure, setupRedactPassthrough, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; @@ -464,22 +465,18 @@ describe('internalBulkResolve', () => { }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(internalBulkResolve(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await internalBulkResolve(params); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const bulkIds = objects.map((obj) => obj.id); const expectedNamespaceString = SavedObjectsUtils.namespaceIdToString(namespace); @@ -498,57 +495,38 @@ describe('internalBulkResolve', () => { ]); }); - test(`calls checkAuthorization with type, actions, namespace, and object namespaces`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { + setupPerformAuthFullyAuthorized(mockSecurityExt); await internalBulkResolve(params); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); - - await internalBulkResolve(params); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_get', - }) - ); - - const expectedTypesAndSpaces = new Map([[objects[0].type, new Set([namespace])]]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await internalBulkResolve(params); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(objects.length); objects.forEach((obj, i) => { @@ -565,8 +543,7 @@ describe('internalBulkResolve', () => { }); test(`adds audit event per object when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); await internalBulkResolve(params); @@ -581,8 +558,7 @@ describe('internalBulkResolve', () => { }); test(`adds audit event per object when not successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(internalBulkResolve(params)).rejects.toThrow(enforceError); 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 634d49c83732f2..747a0d5f5e6d66 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 @@ -324,15 +324,11 @@ async function authorizeAuditAndRedact( return resolvedObjects; } - const authorizationResult = await securityExtension.checkAuthorization({ + const authorizationResult = await securityExtension?.performAuthorization({ + actions: new Set(['bulk_get']), types: new Set(typesAndSpaces.keys()), spaces: spacesToAuthorize, - actions: new Set(['bulk_get']), - }); - securityExtension.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_get', - typeMap: authorizationResult.typeMap, + enforceMap: typesAndSpaces, auditCallback: (error) => { for (const { type, id } of auditableObjects) { securityExtension.addAuditEvent({ 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 eea97945b4dda8..dad313988e1c6a 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 @@ -27,6 +27,11 @@ import { SavedObjectsRawDocSource, AuthorizationTypeEntry, } from '@kbn/core-saved-objects-server'; +import { + setMapsAreEqual, + arrayMapsAreEqual, + setsAreEqual, +} from '@kbn/core-saved-objects-utils-server'; import { kibanaMigratorMock } from '../mocks'; import { createRegistry, @@ -36,16 +41,10 @@ import { mockTimestamp, checkAuthError, getSuccess, - setupCheckUnauthorized, - setupEnforceFailure, enforceError, - setupCheckAuthorized, setupRedactPassthrough, MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, - setsAreEqual, - typeMapsAreEqual, authMap, - setupEnforceSuccess, updateSuccess, deleteSuccess, removeReferencesToSuccess, @@ -55,7 +54,6 @@ import { mockTimestampFields, mockVersion, NAMESPACE_AGNOSTIC_TYPE, - setupCheckPartiallyAuthorized, bulkGetSuccess, expectBulkGetResult, bulkCreateSuccess, @@ -65,7 +63,10 @@ import { expectUpdateResult, bulkDeleteSuccess, createBulkDeleteSuccessStatus, - namespaceMapsAreEqual, + setupPerformAuthFullyAuthorized, + setupPerformAuthPartiallyAuthorized, + setupPerformAuthUnauthorized, + setupPerformAuthEnforceFailure, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; @@ -121,53 +122,47 @@ describe('SavedObjectsRepository Security Extension', () => { // create a mock saved objects encryption extension mockSecurityExt = savedObjectsExtensionsMock.createSecurityExtension(); - mockGetCurrentTime.mockReturnValue(mockTimestamp); - mockGetSearchDsl.mockClear(); - repository = instantiateRepository(); }); afterEach(() => { - mockSecurityExt.checkAuthorization.mockClear(); + mockSecurityExt.performAuthorization.mockClear(); mockSecurityExt.redactNamespaces.mockClear(); + mockGetSearchDsl.mockClear(); }); describe('#get', () => { - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( getSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( getSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await getSuccess(client, repository, registry, type, id, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.get).toHaveBeenCalledTimes(1); expect(result).toEqual(expect.objectContaining({ type, id, namespaces: [namespace] })); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { await getSuccess( client, repository, @@ -181,53 +176,35 @@ describe('SavedObjectsRepository Security Extension', () => { multiNamespaceObjNamespaces // all of the object's namespaces from preflight check are added to the auth check call ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - setupCheckAuthorized(mockSecurityExt); - - await getSuccess(client, repository, registry, type, id, { namespace }); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'get', - }) - ); - - const expectedTypesAndSpaces = new Map([[type, new Set([namespace])]]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await getSuccess(client, repository, registry, type, id, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledWith( expect.objectContaining({ @@ -238,9 +215,8 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); await getSuccess(client, repository, registry, type, id, { namespace }); @@ -252,8 +228,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( getSuccess(client, repository, registry, type, id, { namespace }) @@ -269,44 +244,40 @@ describe('SavedObjectsRepository Security Extension', () => { }); describe('#update', () => { - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( updateSuccess(client, repository, registry, type, id, attributes, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( updateSuccess(client, repository, registry, type, id, attributes, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await updateSuccess(client, repository, registry, type, id, attributes, { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.update).toHaveBeenCalledTimes(1); expect(result).toEqual( expect.objectContaining({ id, type, attributes, namespaces: [namespace] }) ); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { await updateSuccess( client, repository, @@ -321,67 +292,35 @@ describe('SavedObjectsRepository Security Extension', () => { multiNamespaceObjNamespaces // all of the object's namespaces from preflight check are added to the auth check call ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - + 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])); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - mockSecurityExt.checkAuthorization.mockResolvedValue({ - status: 'fully_authorized', - typeMap: authMap, - }); - - await updateSuccess( - client, - repository, - registry, - type, - id, - attributes, - { namespace }, - undefined, - multiNamespaceObjNamespaces - ); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'update', - }) - ); - - const expectedTypesAndSpaces = new Map([[type, new Set([namespace])]]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await updateSuccess(client, repository, registry, type, id, attributes, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledWith( expect.objectContaining({ @@ -392,9 +331,8 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); await updateSuccess(client, repository, registry, type, id, attributes, { namespace }); @@ -407,8 +345,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); }); test(`adds audit event when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( updateSuccess(client, repository, registry, type, id, { namespace }) @@ -424,37 +361,33 @@ describe('SavedObjectsRepository Security Extension', () => { }); describe('#create', () => { - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect(repository.create(type, attributes, { namespace })).rejects.toThrow( checkAuthError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(repository.create(type, attributes, { namespace })).rejects.toThrow( enforceError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await repository.create(type, attributes, { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.create).toHaveBeenCalledTimes(1); expect(result).toEqual( expect.objectContaining({ @@ -466,84 +399,71 @@ describe('SavedObjectsRepository Security Extension', () => { ); }); - test(`calls checkAuthorization with type, actions, and namespace`, async () => { + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { await repository.create(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, attributes, { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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])); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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 checkAuthorization with type, actions, namespace, and initial namespaces`, async () => { + test(`calls performAuthorization with initial namespaces`, async () => { await repository.create(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, attributes, { namespace, initialNamespaces: multiNamespaceObjNamespaces, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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) + ); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - setupCheckAuthorized(mockSecurityExt); - - await repository.create(MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, attributes, { - namespace, - initialNamespaces: multiNamespaceObjNamespaces, - }); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'create', - }) - ); - - const expectedTypesAndSpaces = new Map([ - [MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, new Set(multiNamespaceObjNamespaces)], - ]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await repository.create(type, attributes, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledWith( @@ -559,8 +479,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await repository.create(type, attributes, { namespace }); @@ -578,8 +497,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(repository.create(type, attributes, { namespace })).rejects.toThrow( enforceError @@ -606,92 +524,68 @@ describe('SavedObjectsRepository Security Extension', () => { mockDeleteLegacyUrlAliases.mockClear(); }); - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( deleteSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( deleteSuccess(client, repository, registry, type, id, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns empty object result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await deleteSuccess(client, repository, registry, type, id, { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.delete).toHaveBeenCalledTimes(1); expect(result).toEqual({}); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { + 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.checkAuthorization).toHaveBeenCalledTimes(1); + 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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - setupCheckAuthorized(mockSecurityExt); - - await deleteSuccess(client, repository, registry, MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, id, { - namespace, - }); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'delete', - }) - ); - const expectedTypesAndSpaces = new Map([ - [MULTI_NAMESPACE_CUSTOM_INDEX_TYPE, new Set([namespace])], - ]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`adds audit event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); await deleteSuccess(client, repository, registry, type, id, { namespace }); @@ -705,8 +599,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( deleteSuccess(client, repository, registry, type, id, { namespace }) @@ -722,84 +615,63 @@ describe('SavedObjectsRepository Security Extension', () => { }); describe('#removeReferencesTo', () => { - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( removeReferencesToSuccess(client, repository, type, id, { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( removeReferencesToSuccess(client, repository, type, id, { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await removeReferencesToSuccess(client, repository, type, id, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.updateByQuery).toHaveBeenCalledTimes(1); expect(result).toEqual(expect.objectContaining({ updated: REMOVE_REFS_COUNT })); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { await removeReferencesToSuccess(client, repository, type, id, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with type/namespace map`, async () => { - setupCheckAuthorized(mockSecurityExt); - - await removeReferencesToSuccess(client, repository, type, id, { namespace }); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'delete', - }) - ); - - const expectedTypesAndSpaces = new Map([[type, new Set([namespace])]]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`adds audit event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); await removeReferencesToSuccess(client, repository, type, id, { namespace }); @@ -813,8 +685,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( removeReferencesToSuccess(client, repository, type, id, { namespace }) @@ -833,37 +704,33 @@ describe('SavedObjectsRepository Security Extension', () => { const obj1 = { type, id: 'one' }; const obj2 = { type, id: 'two' }; - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.mget).toHaveBeenCalledTimes(1); // Default mock mget makes each object found expect(result).toEqual( @@ -892,69 +759,53 @@ describe('SavedObjectsRepository Security Extension', () => { ); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedActions = new Set(['bulk_create']); const expectedSpaces = new Set([namespace]); - const expectedTypes = new Set([type]); + 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, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with type/namespace map`, async () => { - setupCheckAuthorized(mockSecurityExt); - - await checkConflictsSuccess(client, repository, registry, [obj1, obj2], { namespace }); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_create', - }) - ); - const expectedTypesAndSpaces = new Map([[type, new Set([namespace])]]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); }); describe('#openPointInTimeForType', () => { - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect(repository.openPointInTimeForType(type)).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); client.openPointInTime.mockResponseOnce({ id }); const result = await repository.openPointInTimeForType(type); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.openPointInTime).toHaveBeenCalledTimes(1); expect(result).toEqual(expect.objectContaining({ id })); }); test(`adds audit event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); client.openPointInTime.mockResponseOnce({ id }); await repository.openPointInTimeForType(type); @@ -967,12 +818,12 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`throws an error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); + setupPerformAuthUnauthorized(mockSecurityExt); await expect(repository.openPointInTimeForType(type)).rejects.toThrowError(); }); test(`adds audit event when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); + setupPerformAuthUnauthorized(mockSecurityExt); await expect(repository.openPointInTimeForType(type)).rejects.toThrowError(); @@ -983,12 +834,12 @@ describe('SavedObjectsRepository Security Extension', () => { }); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { - setupCheckAuthorized(mockSecurityExt); + test(`calls performAuthorization with correct actions, types, and spaces`, async () => { + setupPerformAuthFullyAuthorized(mockSecurityExt); client.openPointInTime.mockResponseOnce({ id }); await repository.openPointInTimeForType(type, { namespaces: [namespace] }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedActions = new Set(['open_point_in_time']); const expectedSpaces = new Set([namespace]); const expectedTypes = new Set([type]); @@ -997,11 +848,15 @@ describe('SavedObjectsRepository Security Extension', () => { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); }); }); @@ -1026,19 +881,18 @@ describe('SavedObjectsRepository Security Extension', () => { }); describe('#find', () => { - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when Authorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect(findSuccess(client, repository, { type })).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns empty result when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); + setupPerformAuthUnauthorized(mockSecurityExt); const result = await repository.find({ type }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(result).toEqual( expect.objectContaining({ saved_objects: [], @@ -1052,7 +906,7 @@ describe('SavedObjectsRepository Security Extension', () => { const authRecord: Record = { find: { authorizedSpaces: [namespace] }, }; - mockSecurityExt.checkAuthorization.mockResolvedValue({ + mockSecurityExt.performAuthorization.mockResolvedValue({ status: 'partially_authorized', typeMap: Object.freeze(new Map([[type, authRecord]])), }); @@ -1067,11 +921,11 @@ describe('SavedObjectsRepository Security Extension', () => { expect(actualMap).toBeDefined(); const expectedMap = new Map(); expectedMap.set(type, [namespace]); - expect(namespaceMapsAreEqual(actualMap, expectedMap)).toBeTruthy(); + expect(arrayMapsAreEqual(actualMap, expectedMap)).toBeTruthy(); }); test(`returns result of es find when fully authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const { result, generatedResults } = await findSuccess( @@ -1101,7 +955,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`uses the authorization map when partially authorized`, async () => { - setupCheckPartiallyAuthorized(mockSecurityExt); + setupPerformAuthPartiallyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); await findSuccess( @@ -1111,18 +965,21 @@ describe('SavedObjectsRepository Security Extension', () => { namespace ); - // make sure the authorized map gets passed to the es client call - expect(mockGetSearchDsl).toHaveBeenCalledWith( - expect.objectContaining({}), - expect.objectContaining({}), - expect.objectContaining({ - typeToNamespacesMap: authMap, - }) - ); + expect(mockGetSearchDsl.mock.calls[0].length).toBe(3); // Find success verifies this is called once, this should always pass + const { + typeToNamespacesMap: actualMap, + }: { typeToNamespacesMap: Map } = + mockGetSearchDsl.mock.calls[0][2]; + + expect(actualMap).not.toBeUndefined(); + const expectedMap = new Map(); + expectedMap.set('foo', ['bar']); // this is what is hard-coded in authMap + + expect(arrayMapsAreEqual(actualMap, expectedMap)).toBeTruthy(); }); test(`returns result of es find when partially authorized`, async () => { - setupCheckPartiallyAuthorized(mockSecurityExt); + setupPerformAuthPartiallyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const { result, generatedResults } = await findSuccess( @@ -1151,12 +1008,12 @@ describe('SavedObjectsRepository Security Extension', () => { }); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { - setupCheckPartiallyAuthorized(mockSecurityExt); + test(`calls performAuthorization with correct actions, types, and spaces`, async () => { + setupPerformAuthPartiallyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); - await findSuccess(client, repository, { type, namespaces: [namespace] }); + await findSuccess(client, repository, { type, namespaces: [namespace] }, 'ns-2'); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(2); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(2); const expectedActions = new Set(['find']); const expectedSpaces = new Set([namespace]); const expectedTypes = new Set([type]); @@ -1165,15 +1022,33 @@ describe('SavedObjectsRepository Security Extension', () => { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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 { + actions: actualActions2, + spaces: actualSpaces2, + types: actualTypes2, + enforceMap: actualEnforceMap2, + options: actualOptions2, + } = mockSecurityExt.performAuthorization.mock.calls[1][0]; + + 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(); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const { generatedResults } = await findSuccess(client, repository, { @@ -1192,7 +1067,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit per object event when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const { generatedResults } = await findSuccess(client, repository, { @@ -1218,7 +1093,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event when not successful`, async () => { - setupCheckUnauthorized(mockSecurityExt); + setupPerformAuthUnauthorized(mockSecurityExt); await repository.find({ type }); @@ -1259,44 +1134,26 @@ describe('SavedObjectsRepository Security Extension', () => { namespaces: [namespace], }; - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( bulkGetSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( bulkGetSuccess(client, repository, registry, [obj1, obj2], { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_get', - }) - ); - - const expectedTypesAndSpaces = new Map([ - [obj1.type, new Set([namespace])], - [obj2.type, new Set([namespace])], - ]); - - const { typesAndSpaces: actualTypesAndSpaces } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const { result, mockResponse } = await bulkGetSuccess( @@ -1307,8 +1164,7 @@ describe('SavedObjectsRepository Security Extension', () => { { namespace } ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.mget).toHaveBeenCalledTimes(1); expect(result).toEqual({ saved_objects: [ @@ -1324,36 +1180,40 @@ describe('SavedObjectsRepository Security Extension', () => { }); }); - test(`calls checkAuthorization with type, actions, namespace, and object namespaces`, async () => { + test(`calls performAuthorization 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 namespaces: multiNamespaceObjNamespaces, // include multiple spaces }; const objB = { ...obj2, namespaces: ['ns-3'] }; // use a different namespace than the options namespace; - const optionsNamespace = 'ns-4'; - await bulkGetSuccess(client, repository, registry, [objA, objB], { - namespace: optionsNamespace, - }); + await bulkGetSuccess(client, repository, registry, [objA, objB]); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedActions = new Set(['bulk_get']); - const expectedSpaces = new Set([optionsNamespace, ...objA.namespaces, ...objB.namespaces]); + 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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(`calls enforceAuthorization with action, type map, and auth map`, async () => { + test(`calls performAuthorization 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 @@ -1362,43 +1222,42 @@ describe('SavedObjectsRepository Security Extension', () => { const objB = { ...obj2, namespaces: ['ns-3'] }; // use a different namespace than the options namespace; const optionsNamespace = 'ns-4'; - setupCheckAuthorized(mockSecurityExt); - await bulkGetSuccess(client, repository, registry, [objA, objB], { namespace: optionsNamespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_get', - }) - ); - - const expectedTypesAndSpaces = new Map([ - [objA.type, new Set([optionsNamespace, ...objA.namespaces])], - [objB.type, new Set([optionsNamespace, ...objB.namespaces])], - ]); + 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 { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; + const { + actions: actualActions, + spaces: actualSpaces, + types: actualTypes, + enforceMap: actualEnforceMap, + options: actualOptions, + } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); // ToDo? reference comparison ok, object is frozen + expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); + expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); + expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; await bulkGetSuccess(client, repository, registry, objects, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(2); objects.forEach((obj, i) => { @@ -1415,9 +1274,8 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); const objects = [obj1, obj2]; await bulkGetSuccess(client, repository, registry, objects, { namespace }); @@ -1432,8 +1290,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when not successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); const objects = [obj1, obj2]; await expect( @@ -1473,66 +1330,69 @@ describe('SavedObjectsRepository Security Extension', () => { references: [{ name: 'ref_0', type: 'test', id: '2' }], }; - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect(bulkCreateSuccess(client, repository, [obj1, obj2])).rejects.toThrow( checkAuthError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( bulkCreateSuccess(client, repository, [obj1, obj2], { namespace }) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; const result = await bulkCreateSuccess(client, repository, objects); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.bulk).toHaveBeenCalledTimes(1); expect(result).toEqual({ saved_objects: objects.map((obj) => expectCreateResult(obj)), }); }); - test(`calls checkAuthorization with type, actions, and namespace`, async () => { - setupCheckAuthorized(mockSecurityExt); + test(`calls PerformAuthorization with correct actions, types, spaces, and enforce map`, async () => { + setupPerformAuthFullyAuthorized(mockSecurityExt); await bulkCreateSuccess(client, repository, [obj1, obj2], { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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 { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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 checkAuthorization with type, actions, namespace, and initial namespaces`, async () => { + test(`calls performAuthorization with initial spaces for one type`, async () => { const objA = { ...obj1, type: MULTI_NAMESPACE_TYPE, @@ -1545,14 +1405,13 @@ describe('SavedObjectsRepository Security Extension', () => { }; const optionsNamespace = 'ns-5'; - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); await bulkCreateSuccess(client, repository, [objA, objB], { namespace: optionsNamespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedActions = new Set(['bulk_create']); const expectedSpaces = new Set([ optionsNamespace, @@ -1560,19 +1419,28 @@ describe('SavedObjectsRepository Security Extension', () => { ...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]) + ); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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 enforceAuthorization with action, type map, and auth map`, async () => { + test(`calls performAuthorization with initial spaces for multiple types`, async () => { const objA = { ...obj1, type: MULTI_NAMESPACE_TYPE, @@ -1585,41 +1453,48 @@ describe('SavedObjectsRepository Security Extension', () => { }; const optionsNamespace = 'ns-5'; - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); await bulkCreateSuccess(client, repository, [objA, objB], { namespace: optionsNamespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_create', - }) - ); - const expectedTypesAndSpaces = new Map([ - [objA.type, new Set([optionsNamespace, ...objA.initialNamespaces])], - [objB.type, new Set([optionsNamespace, ...objB.initialNamespaces])], + 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])); + expectedEnforceMap.set(objB.type, new Set([optionsNamespace, ...objB.initialNamespaces])); - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; + const { + actions: actualActions, + spaces: actualSpaces, + types: actualTypes, + enforceMap: actualEnforceMap, + options: actualOptions, + } = mockSecurityExt.performAuthorization.mock.calls[0][0]; - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + 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 redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; await bulkCreateSuccess(client, repository, [obj1, obj2], { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(2); objects.forEach((obj, i) => { @@ -1636,8 +1511,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); const objects = [obj1, obj2]; await bulkCreateSuccess(client, repository, objects, { namespace }); @@ -1653,8 +1527,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when not successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); const objects = [obj1, obj2]; await expect(bulkCreateSuccess(client, repository, objects, { namespace })).rejects.toThrow( @@ -1684,66 +1557,69 @@ describe('SavedObjectsRepository Security Extension', () => { attributes: { title: 'Test Two' }, }; - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect(bulkUpdateSuccess(client, repository, registry, [obj1, obj2])).rejects.toThrow( checkAuthError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(bulkUpdateSuccess(client, repository, registry, [obj1, obj2])).rejects.toThrow( enforceError ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; const result = await bulkUpdateSuccess(client, repository, registry, objects); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.bulk).toHaveBeenCalledTimes(1); expect(result).toEqual({ saved_objects: objects.map((obj) => expectUpdateResult(obj)), }); }); - test(`calls checkAuthorization with type, actions, and namespace`, async () => { - setupCheckAuthorized(mockSecurityExt); + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { + setupPerformAuthFullyAuthorized(mockSecurityExt); await bulkUpdateSuccess(client, repository, registry, [obj1, obj2], { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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])); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(`calls checkAuthorization with type, actions, namespace, and object namespaces`, async () => { + test(`calls performAuthorization with object spaces`, async () => { const objA = { ...obj1, namespace: 'ns-1', // object namespace @@ -1753,73 +1629,43 @@ describe('SavedObjectsRepository Security Extension', () => { namespace: 'ns-2', // object namespace }; - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); await bulkUpdateSuccess(client, repository, registry, [objA, objB], { namespace, }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + 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])); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - const objA = { - ...obj1, - namespace: 'ns-1', // object namespace - }; - const objB = { - ...obj2, - namespace: 'ns-2', // object namespace - }; - - setupCheckAuthorized(mockSecurityExt); - - await bulkUpdateSuccess(client, repository, registry, [objA, objB], { - namespace, - }); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_update', - }) - ); - - const expectedTypesAndSpaces = new Map([ - [objA.type, new Set([namespace, objA.namespace])], - [objB.type, new Set([namespace, objB.namespace])], - ]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toBeUndefined(); }); test(`calls redactNamespaces with authorization map`, async () => { - setupCheckAuthorized(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const objects = [obj1, obj2]; await bulkUpdateSuccess(client, repository, registry, objects, { namespace }); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.redactNamespaces).toHaveBeenCalledTimes(2); objects.forEach((obj, i) => { @@ -1836,8 +1682,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); const objects = [obj1, obj2]; await bulkUpdateSuccess(client, repository, registry, objects, { namespace }); @@ -1853,8 +1698,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when not successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); const objects = [obj1, obj2]; await expect( @@ -1906,30 +1750,26 @@ describe('SavedObjectsRepository Security Extension', () => { ], }; - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect( bulkDeleteSuccess(client, repository, registry, testObjs, options) ).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect( bulkDeleteSuccess(client, repository, registry, testObjs, options) ).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`returns result when authorized`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const result = await bulkDeleteSuccess( @@ -1941,63 +1781,41 @@ describe('SavedObjectsRepository Security Extension', () => { internalOptions ); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(client.bulk).toHaveBeenCalledTimes(1); expect(result).toEqual({ statuses: testObjs.map((obj) => createBulkDeleteSuccessStatus(obj)), }); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { - setupCheckAuthorized(mockSecurityExt); + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { + setupPerformAuthFullyAuthorized(mockSecurityExt); await bulkDeleteSuccess(client, repository, registry, testObjs, options, internalOptions); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); const expectedActions = new Set(['bulk_delete']); - const expectedSpaces = new Set(internalOptions.mockMGetResponseObjects[1].initialNamespaces); + 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, - spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + spaces: actualSpaces, + enforceMap: actualEnforceMap, + } = mockSecurityExt.performAuthorization.mock.calls[0][0]; expect(setsAreEqual(actualActions, expectedActions)).toBeTruthy(); - expect(setsAreEqual(actualSpaces, expectedSpaces)).toBeTruthy(); expect(setsAreEqual(actualTypes, expectedTypes)).toBeTruthy(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - setupCheckAuthorized(mockSecurityExt); - - await bulkDeleteSuccess(client, repository, registry, testObjs, options, internalOptions); - - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'bulk_delete', - }) - ); - - const expectedTypesAndSpaces = new Map([ - [obj1.type, new Set([namespace])], - [obj2.type, new Set([namespace])], // only need authz in current space - ]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setsAreEqual(actualSpaces, exptectedSpaces)).toBeTruthy(); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); }); test(`adds audit event per object when successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); const objects = [obj1, obj2]; await bulkDeleteSuccess(client, repository, registry, objects, options); @@ -2013,8 +1831,7 @@ describe('SavedObjectsRepository Security Extension', () => { }); test(`adds audit event per object when not successful`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); const objects = [obj1, obj2]; await expect( 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 c5c90b048dc317..81498a2b9df2fa 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 @@ -53,7 +53,7 @@ import { bulkCreateSuccess, bulkUpdateSuccess, findSuccess, - setupCheckUnauthorized, + setupPerformAuthUnauthorized, generateIndexPatternSearchResults, bulkDeleteSuccess, } from '../test_helpers/repository.test.common'; @@ -912,7 +912,7 @@ describe('SavedObjectsRepository Spaces Extension', () => { describe(`#find`, () => { test(`returns empty result if user is unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); + setupPerformAuthUnauthorized(mockSecurityExt); const type = 'index-pattern'; const spaceOverride = 'ns-4'; const generatedResults = generateIndexPatternSearchResults(spaceOverride); 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 7db63fc565a008..8260a7cdddec96 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 @@ -355,31 +355,25 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { 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?.checkAuthorization({ - types: new Set([type]), - spaces: new Set([...spacesToEnforce, ...spacesToAuthorize]), // existing namespaces are included so we can later redact if necessary - actions: new Set(['create']), + 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 }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces: new Map([[type, spacesToEnforce]]), - action: 'create', - typeMap: authorizationResult.typeMap, - 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 - }), - }); - } if (preflightResult?.error) { // This intentionally occurs _after_ the authZ enforcement (which may throw a 403 error earlier) @@ -548,34 +542,28 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { } } - const authorizationResult = await this._securityExtension?.checkAuthorization({ - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - actions: new Set(['bulk_create']), + 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 }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_create', - typeMap: authorizationResult.typeMap, - 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 - }); - } - }, - }); - } let bulkRequestIndexCounter = 0; const bulkCreateParams: object[] = []; @@ -777,21 +765,16 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { for (const { value } of validObjects) { typesAndSpaces.set(value.type, new Set([namespaceString])); // Always enforce authZ for the active space } - const authorizationResult = await this._securityExtension?.checkAuthorization({ + + 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 - actions: new Set(['bulk_create']), + 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 }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_create', - typeMap: authorizationResult.typeMap, - // 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 - }); - } const bulkGetDocs = validObjects.map(({ value: { type, id } }) => ({ _id: this._serializer.generateRawId(namespace, type, id), @@ -860,26 +843,21 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { const namespaceString = SavedObjectsUtils.namespaceIdToString(namespace); const typesAndSpaces = new Map>([[type, new Set([namespaceString])]]); // Always enforce authZ for the active space - const authorizationResult = await this._securityExtension?.checkAuthorization({ + + await this._securityExtension?.performAuthorization({ + actions: new Set(['delete']), types: new Set([type]), spaces: new Set([namespaceString]), // Always check authZ for the active space - actions: new Set(['delete']), + 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 + }); + }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'delete', - typeMap: authorizationResult.typeMap, - 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 - }); - }, - }); - } const rawId = this._serializer.generateRawId(namespace, type, id); let preflightResult: PreflightCheckNamespacesResult | undefined; @@ -1165,28 +1143,22 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { } } - const authorizationResult = await this._securityExtension?.checkAuthorization({ + await this._securityExtension?.performAuthorization({ + actions: new Set(['bulk_delete']), types: new Set(typesAndSpaces.keys()), spaces: spacesToAuthorize, - actions: new Set(['bulk_delete']), + 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 + }); + } + }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_delete', - typeMap: authorizationResult.typeMap, - 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 - }); - } - }, - }); - } // Filter valid objects const validObjects = expectedBulkDeleteMultiNamespaceDocsResults.filter(isRight); @@ -1471,10 +1443,10 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { let typeToNamespacesMap: Map | undefined; let preAuthorizationResult: CheckAuthorizationResult<'find'> | undefined; if (!disableExtensions && this._securityExtension) { - preAuthorizationResult = await this._securityExtension.checkAuthorization({ + preAuthorizationResult = await this._securityExtension.performAuthorization({ + actions: new Set(['find']), types: new Set(types), spaces: spacesToPreauthorize, - actions: new Set(['find']), }); if (preAuthorizationResult.status === 'unauthorized') { // If the user is unauthorized to find *anything* they requested, return an empty response @@ -1584,10 +1556,10 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { 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?.checkAuthorization({ + await this._securityExtension?.performAuthorization({ + actions: new Set(['find']), types: new Set(types), spaces: spacesToAuthorize, - actions: new Set(['find']), }) : undefined; @@ -1753,28 +1725,22 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { }), }; - const authorizationResult = await this._securityExtension?.checkAuthorization({ + const authorizationResult = await this._securityExtension?.performAuthorization({ + actions: new Set(['bulk_get']), types: new Set(typesAndSpaces.keys()), spaces: spacesToAuthorize, - actions: new Set(['bulk_get']), + 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, + }); + } + }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_get', - typeMap: authorizationResult.typeMap, - 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, - }); - } - }, - }); - } return this.optionallyDecryptAndRedactBulkResult(result, authorizationResult?.typeMap); } @@ -1842,28 +1808,23 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { const spacesToEnforce = new Set([SavedObjectsUtils.namespaceIdToString(namespace)]); // Always check/enforce authZ for the active space const existingNamespaces = body?._source?.namespaces || []; - const authorizationResult = await this._securityExtension?.checkAuthorization({ + + 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 - actions: new Set(['get']), + 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 + }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces: new Map([[type, spacesToEnforce]]), - action: 'get', - typeMap: authorizationResult.typeMap, - auditCallback: (error) => { - if (error) { - this._securityExtension!.addAuditEvent({ - action: AuditAction.GET, - savedObject: { type, id }, - error, - }); - } - // Audit event for success case is added separately below - }, - }); - } if ( !isFoundGetResponse(body) || @@ -1949,25 +1910,20 @@ 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?.checkAuthorization({ + + 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 - actions: new Set(['update']), + 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 + }), }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces: new Map([[type, spacesToEnforce]]), - action: 'update', - typeMap: authorizationResult.typeMap, - 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 - }), - }); - } if ( preflightResult?.checkResult === 'found_outside_namespace' || @@ -2236,28 +2192,22 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { } } - const authorizationResult = await this._securityExtension?.checkAuthorization({ + const authorizationResult = await this._securityExtension?.performAuthorization({ + actions: new Set(['bulk_update']), types: new Set(typesAndSpaces.keys()), spaces: spacesToAuthorize, - actions: new Set(['bulk_update']), + 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 + }); + } + }, }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_update', - typeMap: authorizationResult.typeMap, - 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 - }); - } - }, - }); - } let bulkUpdateRequestIndexCounter = 0; const bulkUpdateParams: object[] = []; @@ -2416,25 +2366,19 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { // 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 - const authorizationResult = await this._securityExtension?.checkAuthorization({ + await this._securityExtension?.performAuthorization({ + actions: new Set(['delete']), types: new Set([type]), spaces, - actions: new Set(['delete']), + 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 + }), }); - if (authorizationResult) { - this._securityExtension!.enforceAuthorization({ - typesAndSpaces: new Map([[type, spaces]]), - action: 'delete', - typeMap: authorizationResult.typeMap, - 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 - }), - }); - } const allTypes = this._registry.getAllTypes().map((t) => t.name); @@ -2707,10 +2651,10 @@ export class SavedObjectsRepository implements ISavedObjectsRepository { if (!disableExtensions && this._securityExtension) { const spaces = new Set(namespaces); - const preAuthorizationResult = await this._securityExtension.checkAuthorization({ + const preAuthorizationResult = await this._securityExtension?.performAuthorization({ + actions: new Set(['open_point_in_time']), types: new Set(types), spaces, - actions: new Set(['open_point_in_time']), }); if (preAuthorizationResult.status === 'unauthorized') { // If the user is unauthorized to find *anything* they requested, return an empty response 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 821d24b9c3b4fd..6016ef84fdc402 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 @@ -20,6 +20,8 @@ import type { SavedObjectsUpdateObjectsSpacesObject } from '@kbn/core-saved-obje import { SavedObjectsErrorHelpers, ALL_NAMESPACES_STRING, + setsAreEqual, + setMapsAreEqual, } 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'; @@ -27,15 +29,10 @@ import type { UpdateObjectsSpacesParams } from './update_objects_spaces'; import { updateObjectsSpaces } from './update_objects_spaces'; import { AuditAction, type ISavedObjectsSecurityExtension } from '@kbn/core-saved-objects-server'; import { - authMap, checkAuthError, enforceError, - typeMapsAreEqual, - setsAreEqual, - setupCheckAuthorized, - setupCheckUnauthorized, - setupEnforceFailure, - setupEnforceSuccess, + setupPerformAuthFullyAuthorized, + setupPerformAuthEnforceFailure, setupRedactPassthrough, } from '../test_helpers/repository.test.common'; import { savedObjectsExtensionsMock } from '../mocks/saved_objects_extensions.mock'; @@ -654,6 +651,11 @@ describe('#updateObjectsSpaces', () => { let mockSecurityExt: jest.Mocked; let params: UpdateObjectsSpacesParams; + afterEach(() => { + mockSecurityExt.performAuthorization.mockClear(); + mockSecurityExt.redactNamespaces.mockClear(); + }); + describe(`errors`, () => { beforeEach(() => { const obj1 = { type: SHAREABLE_OBJ_TYPE, id: 'id-1' }; @@ -666,8 +668,7 @@ describe('#updateObjectsSpaces', () => { }); test(`propagates error from es client bulk get`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); const error = SavedObjectsErrorHelpers.createBadRequestError('OOPS!'); @@ -681,30 +682,25 @@ describe('#updateObjectsSpaces', () => { await expect(updateObjectsSpaces(params)).rejects.toThrow(error); }); - test(`propagates decorated error when checkAuthorization rejects promise`, async () => { - mockSecurityExt.checkAuthorization.mockRejectedValueOnce(checkAuthError); + test(`propagates decorated error when performAuthorization rejects promise`, async () => { + mockSecurityExt.performAuthorization.mockRejectedValueOnce(checkAuthError); await expect(updateObjectsSpaces(params)).rejects.toThrow(checkAuthError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).not.toHaveBeenCalled(); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`propagates decorated error when unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(updateObjectsSpaces(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); }); test(`adds audit event when not unauthorized`, async () => { - setupCheckUnauthorized(mockSecurityExt); - setupEnforceFailure(mockSecurityExt); + setupPerformAuthEnforceFailure(mockSecurityExt); await expect(updateObjectsSpaces(params)).rejects.toThrow(enforceError); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); + expect(mockSecurityExt.performAuthorization).toHaveBeenCalledTimes(1); expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledTimes(1); expect(mockSecurityExt.addAuditEvent).toHaveBeenCalledWith({ @@ -717,8 +713,7 @@ describe('#updateObjectsSpaces', () => { }); test(`returns error from es client bulk operation`, async () => { - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); mockGetBulkOperationError.mockReset(); @@ -761,51 +756,37 @@ describe('#updateObjectsSpaces', () => { { 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 - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); }); - test(`calls checkAuthorization with type, actions, and namespaces`, async () => { + test(`calls performAuthorization with correct actions, types, spaces, and enforce map`, async () => { await updateObjectsSpaces(params); expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.checkAuthorization).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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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(); - }); - - test(`calls enforceAuthorization with action, type map, and auth map`, async () => { - await updateObjectsSpaces(params); - - expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.checkAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.enforceAuthorization).toHaveBeenCalledWith( - expect.objectContaining({ - action: 'share_to_space', - }) - ); - const expectedTypesAndSpaces = new Map([ - [SHAREABLE_OBJ_TYPE, new Set([defaultSpace, EXISTING_SPACE, otherSpace])], - ]); - - const { typesAndSpaces: actualTypesAndSpaces, typeMap: actualTypeMap } = - mockSecurityExt.enforceAuthorization.mock.calls[0][0]; - - expect(typeMapsAreEqual(actualTypesAndSpaces, expectedTypesAndSpaces)).toBeTruthy(); - expect(actualTypeMap).toBe(authMap); + expect(setMapsAreEqual(actualEnforceMap, expectedEnforceMap)).toBeTruthy(); + expect(actualOptions).toEqual(expect.objectContaining({ allowGlobalResource: true })); }); test(`adds audit event per object when successful`, async () => { @@ -844,55 +825,72 @@ describe('#updateObjectsSpaces', () => { { 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 - setupCheckAuthorized(mockSecurityExt); - setupEnforceSuccess(mockSecurityExt); + setupPerformAuthFullyAuthorized(mockSecurityExt); setupRedactPassthrough(mockSecurityExt); }; - test(`calls checkAuthorization with '*' when spacesToAdd includes '*'`, async () => { + test(`calls performAuthorization with '*' when spacesToAdd includes '*'`, async () => { const spacesToAdd = ['*']; const spacesToRemove = [otherSpace]; setupForAllSpaces(spacesToAdd, spacesToRemove); await updateObjectsSpaces(params); expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.checkAuthorization).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, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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 checkAuthorization with '*' when spacesToRemove includes '*'`, async () => { + test(`calls performAuthorization with '*' when spacesToRemove includes '*'`, async () => { const spacesToAdd = [otherSpace]; const spacesToRemove = ['*']; setupForAllSpaces(spacesToAdd, spacesToRemove); await updateObjectsSpaces(params); expect(client.bulk).toHaveBeenCalledTimes(1); - expect(mockSecurityExt.checkAuthorization).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]) + ); const { actions: actualActions, spaces: actualSpaces, types: actualTypes, - } = mockSecurityExt.checkAuthorization.mock.calls[0][0]; + 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 })); }); }); }); 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 f4afe7cf969616..3144460270178a 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 @@ -204,33 +204,27 @@ export async function updateObjectsSpaces({ } } - const authorizationResult = await securityExtension?.checkAuthorization({ - types: new Set(typesAndSpaces.keys()), - spaces: spacesToAuthorize, - actions: new Set(['share_to_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 }, }); - if (authorizationResult) { - securityExtension!.enforceAuthorization({ - typesAndSpaces, - action: 'share_to_space', - typeMap: authorizationResult.typeMap, - 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 - }); - } - }, - }); - } const time = new Date().toISOString(); let bulkOperationRequestIndexCounter = 0; 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 f4308ee6254c7c..fe775dd0cf945b 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,7 +20,7 @@ const createEncryptionExtension = (): jest.Mocked => ({ - checkAuthorization: jest.fn(), + performAuthorization: jest.fn(), enforceAuthorization: jest.fn(), addAuditEvent: jest.fn(), redactNamespaces: jest.fn(), 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 600b1e967c6776..396686b735e2fe 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 @@ -9,12 +9,12 @@ import * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { schema } from '@kbn/config-schema'; import { loggerMock } from '@kbn/logging-mocks'; -import { isEqual } from 'lodash'; import { Payload } from 'elastic-apm-node'; import { AuthorizationTypeEntry, - EnforceAuthorizationParams, + CheckAuthorizationResult, ISavedObjectsSecurityExtension, + PerformAuthorizationParams, SavedObjectsMappingProperties, SavedObjectsRawDocSource, SavedObjectsType, @@ -235,49 +235,47 @@ export const enforceError = SavedObjectsErrorHelpers.decorateForbiddenError( 'User lacks privileges' ); -export const setupCheckAuthorized = ( +export const setupPerformAuthFullyAuthorized = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.checkAuthorization.mockResolvedValue({ - status: 'fully_authorized', - typeMap: authMap, - }); -}; - -export const setupCheckPartiallyAuthorized = ( - mockSecurityExt: jest.Mocked -) => { - mockSecurityExt.checkAuthorization.mockResolvedValue({ - status: 'partially_authorized', - typeMap: authMap, - }); + mockSecurityExt.performAuthorization.mockImplementation( + (params: PerformAuthorizationParams): Promise> => { + const { auditCallback } = params; + auditCallback?.(undefined); + return Promise.resolve({ status: 'fully_authorized', typeMap: authMap }); + } + ); }; -export const setupCheckUnauthorized = ( +export const setupPerformAuthPartiallyAuthorized = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.checkAuthorization.mockResolvedValue({ - status: 'unauthorized', - typeMap: new Map([]), - }); + mockSecurityExt.performAuthorization.mockImplementation( + (params: PerformAuthorizationParams): Promise> => { + const { auditCallback } = params; + auditCallback?.(undefined); + return Promise.resolve({ status: 'partially_authorized', typeMap: authMap }); + } + ); }; -export const setupEnforceSuccess = ( +export const setupPerformAuthUnauthorized = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.enforceAuthorization.mockImplementation( - (params: EnforceAuthorizationParams) => { + mockSecurityExt.performAuthorization.mockImplementation( + (params: PerformAuthorizationParams): Promise> => { const { auditCallback } = params; auditCallback?.(undefined); + return Promise.resolve({ status: 'unauthorized', typeMap: new Map([]) }); } ); }; -export const setupEnforceFailure = ( +export const setupPerformAuthEnforceFailure = ( mockSecurityExt: jest.Mocked ) => { - mockSecurityExt.enforceAuthorization.mockImplementation( - (params: EnforceAuthorizationParams) => { + mockSecurityExt.performAuthorization.mockImplementation( + (params: PerformAuthorizationParams) => { const { auditCallback } = params; auditCallback?.(enforceError); throw enforceError; @@ -850,27 +848,6 @@ export const getSuccess = async ( return result; }; -export function setsAreEqual(setA: Set, setB: Set) { - return isEqual(Array(setA).sort(), Array(setB).sort()); -} - -export function typeMapsAreEqual(mapA: Map>, mapB: Map>) { - return ( - mapA.size === mapB.size && - Array.from(mapA.keys()).every((key) => setsAreEqual(mapA.get(key)!, mapB.get(key)!)) - ); -} - -export function namespaceMapsAreEqual( - mapA: Map, - mapB: Map -) { - return ( - mapA.size === mapB.size && - Array.from(mapA.keys()).every((key) => isEqual(mapA.get(key)?.sort(), mapB.get(key)?.sort())) - ); -} - export const getMockEsBulkDeleteResponse = ( registry: SavedObjectTypeRegistry, objects: TypeIdTuple[], 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 f4308ee6254c7c..fe775dd0cf945b 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,7 +20,7 @@ const createEncryptionExtension = (): jest.Mocked => ({ - checkAuthorization: jest.fn(), + performAuthorization: jest.fn(), enforceAuthorization: jest.fn(), addAuditEvent: jest.fn(), redactNamespaces: jest.fn(), 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 c96d40ca7a72fe..f8791a1efbe5a9 100644 --- a/packages/core/saved-objects/core-saved-objects-server/index.ts +++ b/packages/core/saved-objects/core-saved-objects-server/index.ts @@ -72,6 +72,7 @@ export type { } from './src/extensions/encryption'; export type { CheckAuthorizationParams, + PerformAuthorizationParams, AuthorizationTypeEntry, AuthorizationTypeMap, CheckAuthorizationResult, 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 2d6df725068be7..4364bbbf2ad8f6 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 @@ -9,6 +9,43 @@ import type { SavedObject } from '@kbn/core-saved-objects-common'; import type { EcsEventOutcome } 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. @@ -178,12 +215,12 @@ export interface RedactNamespacesParams { */ export interface ISavedObjectsSecurityExtension { /** - * Checks authorization of actions on specified types in specified spaces. - * @param params - types, spaces, and actions to check + * 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) * @returns CheckAuthorizationResult - the resulting authorization level and authorization map */ - checkAuthorization: ( - params: CheckAuthorizationParams + performAuthorization: ( + params: PerformAuthorizationParams ) => Promise>; /** 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 ee85e185a68b26..bae7583ae1e920 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 @@ -15,3 +15,5 @@ export { FIND_DEFAULT_PAGE, FIND_DEFAULT_PER_PAGE, } from './src/saved_objects_utils'; + +export { setsAreEqual, arrayMapsAreEqual, setMapsAreEqual } from './src/saved_objects_test_utils'; diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.test.ts b/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.test.ts new file mode 100644 index 00000000000000..a82095060070ed --- /dev/null +++ b/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.test.ts @@ -0,0 +1,160 @@ +/* + * Copyright 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 { arrayMapsAreEqual, setMapsAreEqual, setsAreEqual } from './saved_objects_test_utils'; + +describe('savedObjects/testUtils', () => { + describe('#setsAreEqual', () => { + const setA = new Set(['1', '2', '3']); + const setB = new Set(['1', '2']); + const setC = new Set(['1', '3', '4']); + const setD = new Set(['2', '3', '1']); + + describe('inequal', () => { + it('should return false if the sets are not the same size', () => { + expect(setsAreEqual(setA, setB)).toBeFalsy(); + expect(setsAreEqual(setB, setA)).toBeFalsy(); + expect(setsAreEqual(setA, new Set())).toBeFalsy(); + expect(setsAreEqual(new Set(), setA)).toBeFalsy(); + }); + + it('should return false if the sets do not have the same values', () => { + expect(setsAreEqual(setA, setC)).toBeFalsy(); + expect(setsAreEqual(setC, setA)).toBeFalsy(); + }); + }); + + describe('equal', () => { + it('should return true if the sets are exactly the same', () => { + expect(setsAreEqual(setA, setD)).toBeTruthy(); + expect(setsAreEqual(setD, setA)).toBeTruthy(); + expect(setsAreEqual(new Set(), new Set())).toBeTruthy(); + }); + }); + }); + + describe('#arrayMapsAreEqual', () => { + const mapA = new Map(); + mapA.set('a', ['1', '2', '3']); + mapA.set('b', ['1', '2']); + + const mapB = new Map(); + mapB.set('a', ['1', '2', '3']); + + const mapC = new Map(); + mapC.set('a', ['1', '2', '3']); + mapC.set('c', ['1', '2']); + + const mapD = new Map(); + mapD.set('a', ['1', '2', '3']); + mapD.set('b', ['1', '3']); + + const mapE = new Map(); + mapE.set('b', ['2', '1']); + mapE.set('a', ['3', '1', '2']); + + const mapF = new Map(); + mapF.set('a', ['1', '2', '3']); + mapF.set('b', undefined); + + const mapG = new Map(); + mapG.set('b', undefined); + mapG.set('a', ['3', '1', '2']); + + const mapH = new Map(); + mapF.set('a', ['1', '2', '3']); + mapF.set('b', []); + + const mapI = new Map(); + mapG.set('b', []); + mapG.set('a', ['3', '1', '2']); + + describe('inequal', () => { + it('should return false if the maps are not the same size', () => { + expect(arrayMapsAreEqual(mapA, mapB)).toBeFalsy(); + expect(arrayMapsAreEqual(mapB, mapA)).toBeFalsy(); + expect(arrayMapsAreEqual(mapA, new Map())).toBeFalsy(); + expect(arrayMapsAreEqual(new Map(), mapA)).toBeFalsy(); + }); + + it('should return false if the maps do not have the same keys', () => { + expect(arrayMapsAreEqual(mapA, mapC)).toBeFalsy(); + expect(arrayMapsAreEqual(mapC, mapA)).toBeFalsy(); + }); + + it('should return false if the maps do not have the same values', () => { + expect(arrayMapsAreEqual(mapA, mapD)).toBeFalsy(); + expect(arrayMapsAreEqual(mapD, mapA)).toBeFalsy(); + expect(arrayMapsAreEqual(mapA, mapF)).toBeFalsy(); + expect(arrayMapsAreEqual(mapF, mapA)).toBeFalsy(); + expect(arrayMapsAreEqual(mapA, mapH)).toBeFalsy(); + expect(arrayMapsAreEqual(mapH, mapA)).toBeFalsy(); + }); + }); + + describe('equal', () => { + it('should return true if the maps are exactly the same', () => { + expect(arrayMapsAreEqual(mapA, mapE)).toBeTruthy(); + expect(arrayMapsAreEqual(mapE, mapA)).toBeTruthy(); + expect(arrayMapsAreEqual(new Map(), new Map())).toBeTruthy(); + expect(arrayMapsAreEqual(mapF, mapG)).toBeTruthy(); + expect(arrayMapsAreEqual(mapG, mapF)).toBeTruthy(); + expect(arrayMapsAreEqual(mapH, mapI)).toBeTruthy(); + expect(arrayMapsAreEqual(mapI, mapH)).toBeTruthy(); + }); + }); + }); + + describe('#setMapsAreEqual', () => { + const mapA = new Map>(); + mapA.set('a', new Set(['1', '2', '3'])); + mapA.set('b', new Set(['1', '2'])); + + const mapB = new Map>(); + mapB.set('a', new Set(['1', '2', '3'])); + + const mapC = new Map>(); + mapC.set('a', new Set(['1', '2', '3'])); + mapC.set('c', new Set(['1', '2'])); + + const mapD = new Map>(); + mapD.set('a', new Set(['1', '2', '3'])); + mapD.set('b', new Set(['1', '3'])); + + const mapE = new Map>(); + mapE.set('b', new Set(['2', '1'])); + mapE.set('a', new Set(['3', '1', '2'])); + + describe('inequal', () => { + it('should return false if the maps are not the same size', () => { + expect(setMapsAreEqual(mapA, mapB)).toBeFalsy(); + expect(setMapsAreEqual(mapB, mapA)).toBeFalsy(); + expect(setMapsAreEqual(mapA, new Map())).toBeFalsy(); + expect(setMapsAreEqual(new Map(), mapA)).toBeFalsy(); + }); + + it('should return false if the maps do not have the same keys', () => { + expect(setMapsAreEqual(mapA, mapC)).toBeFalsy(); + expect(setMapsAreEqual(mapC, mapA)).toBeFalsy(); + }); + + it('should return false if the maps do not have the same values', () => { + expect(setMapsAreEqual(mapA, mapD)).toBeFalsy(); + expect(setMapsAreEqual(mapD, mapA)).toBeFalsy(); + }); + }); + + describe('equal', () => { + it('should return true if the maps are exactly the same', () => { + expect(setMapsAreEqual(mapA, mapE)).toBeTruthy(); + expect(setMapsAreEqual(mapE, mapA)).toBeTruthy(); + expect(setMapsAreEqual(new Map(), new Map())).toBeTruthy(); + }); + }); + }); +}); diff --git a/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts b/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts new file mode 100644 index 00000000000000..16cf2878c21c97 --- /dev/null +++ b/packages/core/saved-objects/core-saved-objects-utils-server/src/saved_objects_test_utils.ts @@ -0,0 +1,70 @@ +/* + * Copyright 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 { isEqual } from 'lodash'; + +/** + * Determines if a given Set is equal to another given Set. Set types must be the same, and comparable. + * + * @param setA The first Set to compare + * @param setB The second Set to compare + * @returns {boolean} True if Set A is equal to Set B + */ +export function setsAreEqual(setA: Set, setB: Set) { + if (setA.size !== setB.size) return false; + + for (const element of setA) { + if (!setB.has(element)) { + return false; + } + } + + return true; +} + +/** + * Determines if a given map of arrays is equal to another given map of arrays. + * Used for comparing namespace maps in saved object repo/security extension tests. + * + * @param mapA The first map to compare + * @param mapB The second map to compare + * @returns {boolean} True if map A is equal to map B + */ +export function arrayMapsAreEqual(mapA: Map, mapB: Map) { + if (mapA?.size !== mapB?.size) return false; + + for (const [key, valueA] of mapA!) { + const valueB = mapB?.get(key); + if (valueA?.length !== valueB?.length) return false; + if (!isEqual(valueA?.sort(), valueB?.sort())) return false; + } + + return true; +} + +/** + * Determines if a given Map of Sets is equal to another given Map of Sets. + * Used for comparing typeMaps and enforceMaps in saved object repo/security extension tests. + * + * @param mapA The first map to compare + * @param mapB The second map to compare + * @returns {boolean} True if map A is equal to map B + */ +export function setMapsAreEqual( + mapA: Map> | undefined, + mapB: Map> | undefined +) { + if (mapA?.size !== mapB?.size) return false; + + for (const [key, valueA] of mapA!) { + const valueB = mapB?.get(key); + if (!valueB || !setsAreEqual(valueA, valueB)) return false; + } + + return true; +} diff --git a/packages/kbn-ambient-ftr-types/BUILD.bazel b/packages/kbn-ambient-ftr-types/BUILD.bazel new file mode 100644 index 00000000000000..f6de3cba29f6a1 --- /dev/null +++ b/packages/kbn-ambient-ftr-types/BUILD.bazel @@ -0,0 +1,58 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "pkg_npm") + +PKG_DIRNAME = "kbn-ambient-ftr-types" +PKG_REQUIRE_NAME = "@kbn/ambient-ftr-types" + +SRCS = glob( + [ + "*.d.ts", + ] +) + +filegroup( + name = "srcs", + srcs = SRCS, +) + +NPM_MODULE_EXTRA_FILES = [ + "package.json", +] + +# In this array place runtime dependencies, including other packages and NPM packages +# which must be available for this code to run. +# +# To reference other packages use: +# "//repo/relative/path/to/package" +# eg. "//packages/kbn-utils" +# +# To reference a NPM package use: +# "@npm//name-of-package" +# eg. "@npm//lodash" +RUNTIME_DEPS = [ +] + +js_library( + name = PKG_DIRNAME, + srcs = SRCS + NPM_MODULE_EXTRA_FILES, + deps = RUNTIME_DEPS, + package_name = PKG_REQUIRE_NAME, + visibility = ["//visibility:public"], +) + +pkg_npm( + name = "npm_module", + deps = [":" + PKG_DIRNAME], +) + +filegroup( + name = "build", + srcs = [":npm_module"], + visibility = ["//visibility:public"], +) + +alias( + name = "npm_module_types", + actual = ":" + PKG_DIRNAME, + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-ambient-ftr-types/README.md b/packages/kbn-ambient-ftr-types/README.md new file mode 100644 index 00000000000000..835d0836fbe091 --- /dev/null +++ b/packages/kbn-ambient-ftr-types/README.md @@ -0,0 +1,3 @@ +# @kbn/ambient-ftr-types + +Ambient type definitions that should be included in `tsconfig.json` files for packages containing FTR test suites. diff --git a/packages/kbn-ambient-ftr-types/index.d.ts b/packages/kbn-ambient-ftr-types/index.d.ts new file mode 100644 index 00000000000000..ffc0f85058d296 --- /dev/null +++ b/packages/kbn-ambient-ftr-types/index.d.ts @@ -0,0 +1,983 @@ +/* eslint-disable @kbn/eslint/require-license-header */ +/* eslint-disable @typescript-eslint/unified-signatures */ + +/** + * @notice + * + * These types are extracted from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/bb83a9839cb23195f3f0ac5a0ec61af879f194e9/types/mocha + * and modified for use in the Kibana repository. + * + * This project is licensed under the MIT license. + * + * Copyrights are respective of each contributor listed at the beginning of each definition file. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +declare namespace Mocha { + /** + * Test context + * + * @see https://mochajs.org/api/module-Context.html#~Context + */ + interface Context { + /** + * Get test timeout. + */ + timeout(): number; + + /** + * Set test timeout. + */ + timeout(ms: string | number): this; + + /** + * Get test slowness threshold. + */ + slow(): number; + + /** + * Set test slowness threshold. + */ + slow(ms: string | number): this; + + /** + * Mark a test as skipped. + */ + skip(): never; + + /** + * Get the number of allowed retries on failed tests. + */ + retries(): number; + + /** + * Set the number of allowed retries on failed tests. + */ + retries(n: number): this; + + [key: string]: any; + } + + type Done = (err?: any) => void; + + /** + * Callback function used for tests and hooks. + */ + type Func = (this: Context, done: Done) => void; + + /** + * Async callback function used for tests and hooks. + */ + type AsyncFunc = (this: Context) => PromiseLike; + + interface Runnable { + id: string; + title: string; + fn: Func | AsyncFunc | undefined; + body: string; + async: boolean; + sync: boolean; + timedOut: boolean; + pending: boolean; + duration?: number | undefined; + parent?: Suite | undefined; + state?: 'failed' | 'passed' | 'pending' | undefined; + timer?: any; + ctx?: Context | undefined; + callback?: Done | undefined; + allowUncaught?: boolean | undefined; + file?: string | undefined; + + /** + * Get test timeout. + * + * @see https://mochajs.org/api/Runnable.html#timeout + */ + timeout(): number; + + /** + * Set test timeout. + * + * @see https://mochajs.org/api/Runnable.html#timeout + */ + timeout(ms: string | number): this; + + /** + * Get test slowness threshold. + * + * @see https://mochajs.org/api/Runnable.html#slow + */ + slow(): number; + + /** + * Set test slowness threshold. + * + * @see https://mochajs.org/api/Runnable.html#slow + */ + slow(ms: string | number): this; + + /** + * Halt and mark as pending. + */ + skip(): never; + + /** + * Check if this runnable or its parent suite is marked as pending. + * + * @see https://mochajs.org/api/Runnable.html#isPending + */ + isPending(): boolean; + + /** + * Return `true` if this Runnable has failed. + */ + isFailed(): boolean; + + /** + * Return `true` if this Runnable has passed. + */ + isPassed(): boolean; + + /** + * Set or get number of retries. + * + * @see https://mochajs.org/api/Runnable.html#retries + */ + retries(): number; + + /** + * Set or get number of retries. + * + * @see https://mochajs.org/api/Runnable.html#retries + */ + retries(n: number): void; + + /** + * Set or get current retry + * + * @see https://mochajs.org/api/Runnable.html#currentRetry + */ + protected currentRetry(): number; + + /** + * Set or get current retry + * + * @see https://mochajs.org/api/Runnable.html#currentRetry + */ + protected currentRetry(n: number): void; + + /** + * Return the full title generated by recursively concatenating the parent's full title. + */ + fullTitle(): string; + + /** + * Return the title path generated by concatenating the parent's title path with the title. + */ + titlePath(): string[]; + + /** + * Clear the timeout. + * + * @see https://mochajs.org/api/Runnable.html#clearTimeout + */ + clearTimeout(): void; + + /** + * Inspect the runnable void of private properties. + * + * @see https://mochajs.org/api/Runnable.html#inspect + */ + inspect(): string; + + /** + * Reset the timeout. + * + * @see https://mochajs.org/api/Runnable.html#resetTimeout + */ + resetTimeout(): void; + + /** + * Get a list of whitelisted globals for this test run. + * + * @see https://mochajs.org/api/Runnable.html#globals + */ + globals(): string[]; + + /** + * Set a list of whitelisted globals for this test run. + * + * @see https://mochajs.org/api/Runnable.html#globals + */ + globals(globals: readonly string[]): void; + + /** + * Run the test and invoke `fn(err)`. + * + * @see https://mochajs.org/api/Runnable.html#run + */ + run(fn: Done): void; + } + + interface Suite { + ctx: Context; + suites: Suite[]; + tests: Test[]; + pending: boolean; + file?: string | undefined; + root: boolean; + delayed: boolean; + parent: Suite | undefined; + title: string; + + /** + * Return a clone of this `Suite`. + * + * @see https://mochajs.org/api/Mocha.Suite.html#clone + */ + clone(): Suite; + + /** + * Get timeout `ms`. + * + * @see https://mochajs.org/api/Mocha.Suite.html#timeout + */ + timeout(): number; + + /** + * Set timeout `ms` or short-hand such as "2s". + * + * @see https://mochajs.org/api/Mocha.Suite.html#timeout + */ + timeout(ms: string | number): this; + + /** + * Get number of times to retry a failed test. + * + * @see https://mochajs.org/api/Mocha.Suite.html#retries + */ + retries(): number; + + /** + * Set number of times to retry a failed test. + * + * @see https://mochajs.org/api/Mocha.Suite.html#retries + */ + retries(n: string | number): this; + + /** + * Get slow `ms`. + * + * @see https://mochajs.org/api/Mocha.Suite.html#slow + */ + slow(): number; + + /** + * Set slow `ms` or short-hand such as "2s". + * + * @see https://mochajs.org/api/Mocha.Suite.html#slow + */ + slow(ms: string | number): this; + + /** + * Get whether to bail after first error. + * + * @see https://mochajs.org/api/Mocha.Suite.html#bail + */ + bail(): boolean; + + /** + * Set whether to bail after first error. + * + * @see https://mochajs.org/api/Mocha.Suite.html#bail + */ + bail(bail: boolean): this; + + /** + * Check if this suite or its parent suite is marked as pending. + * + * @see https://mochajs.org/api/Mocha.Suite.html#isPending + */ + isPending(): boolean; + + /** + * Run `fn(test[, done])` before running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeAll + */ + beforeAll(fn?: Func): this; + + /** + * Run `fn(test[, done])` before running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeAll + */ + beforeAll(fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` before running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeAll + */ + beforeAll(title: string, fn?: Func): this; + + /** + * Run `fn(test[, done])` before running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeAll + */ + beforeAll(title: string, fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` after running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterAll + */ + afterAll(fn?: Func): this; + + /** + * Run `fn(test[, done])` after running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterAll + */ + afterAll(fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` after running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterAll + */ + afterAll(title: string, fn?: Func): this; + + /** + * Run `fn(test[, done])` after running tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterAll + */ + afterAll(title: string, fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` before each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeEach + */ + beforeEach(fn?: Func): this; + + /** + * Run `fn(test[, done])` before each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeEach + */ + beforeEach(fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` before each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeEach + */ + beforeEach(title: string, fn?: Func): this; + + /** + * Run `fn(test[, done])` before each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#beforeEach + */ + beforeEach(title: string, fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` after each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterEach + */ + afterEach(fn?: Func): this; + + /** + * Run `fn(test[, done])` after each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterEach + */ + afterEach(fn?: AsyncFunc): this; + + /** + * Run `fn(test[, done])` after each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterEach + */ + afterEach(title: string, fn?: Func): this; + + /** + * Run `fn(test[, done])` after each test case. + * + * @see https://mochajs.org/api/Mocha.Suite.html#afterEach + */ + afterEach(title: string, fn?: AsyncFunc): this; + + /** + * Add a test `suite`. + * + * @see https://mochajs.org/api/Mocha.Suite.html#addSuite + */ + addSuite(suite: Suite): this; + + /** + * Add a `test` to this suite. + * + * @see https://mochajs.org/api/Mocha.Suite.html#addTest + */ + addTest(test: Test): this; + + /** + * Cleans all references from this suite and all child suites. + * + * https://mochajs.org/api/suite#dispose + */ + dispose(): void; + + /** + * Return the full title generated by recursively concatenating the parent's + * full title. + * + * @see https://mochajs.org/api/Mocha.Suite.html#.Suite#fullTitle + */ + fullTitle(): string; + + /** + * Return the title path generated by recursively concatenating the parent's + * title path. + * + * @see https://mochajs.org/api/Mocha.Suite.html#.Suite#titlePath + */ + titlePath(): string[]; + + /** + * Return the total number of tests. + * + * @see https://mochajs.org/api/Mocha.Suite.html#.Suite#total + */ + total(): number; + + /** + * Iterates through each suite recursively to find all tests. Applies a + * function in the format `fn(test)`. + * + * @see https://mochajs.org/api/Mocha.Suite.html#eachTest + */ + eachTest(fn: (test: Test) => void): this; + + /** + * This will run the root suite if we happen to be running in delayed mode. + * + * @see https://mochajs.org/api/Mocha.Suite.html#run + */ + run(): void; + + /** + * Attach the given tag(s) to this suite so that the suite can be applied + * via `--include-tag` or `--exclude-tag` CLI flags. + */ + tags(tags: string | string[]): void; + + /** + * A required version range for ES. When these tests are run against an ES + * instance that is not within the given version range, the tests in this + * suite will be automatically skipped. + * + * @param {string} semver A semver version range, like ">=8". + * See https://docs.npmjs.com/cli/v6/using-npm/semver#ranges for + * information about syntax + */ + onlyEsVersion(semver: string): void; + } + + /** + * Initialize a new `Test` with the given `title` and callback `fn`. + * + * @see https://mochajs.org/api/Test.html + */ + interface Test extends Runnable { + type: 'test'; + speed?: 'slow' | 'medium' | 'fast' | undefined; // added by reporters + err?: Error | undefined; // added by reporters + clone(): Test; + } + + interface HookFunction { + /** + * [bdd, qunit, tdd] Describe a "hook" to execute the given callback `fn`. The name of the + * function is used as the name of the hook. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: Func): void; + + /** + * [bdd, qunit, tdd] Describe a "hook" to execute the given callback `fn`. The name of the + * function is used as the name of the hook. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: AsyncFunc): void; + + /** + * [bdd, qunit, tdd] Describe a "hook" to execute the given `title` and callback `fn`. + * + * - _Only available when invoked via the mocha CLI._ + */ + (name: string, fn?: Func): void; + + /** + * [bdd, qunit, tdd] Describe a "hook" to execute the given `title` and callback `fn`. + * + * - _Only available when invoked via the mocha CLI._ + */ + (name: string, fn?: AsyncFunc): void; + } + + interface SuiteFunction { + /** + * [bdd, tdd] Describe a "suite" with the given `title` and callback `fn` containing + * nested suites. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn: (this: Suite) => void): Suite; + + /** + * [qunit] Describe a "suite" with the given `title`. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string): Suite; + + /** + * [bdd, tdd, qunit] Indicates this suite should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + only: ExclusiveSuiteFunction; + + /** + * [bdd, tdd] Indicates this suite should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + */ + skip: PendingSuiteFunction; + } + + interface ExclusiveSuiteFunction { + /** + * [bdd, tdd] Describe a "suite" with the given `title` and callback `fn` containing + * nested suites. Indicates this suite should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn: (this: Suite) => void): Suite; + + /** + * [qunit] Describe a "suite" with the given `title`. Indicates this suite should be executed + * exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string): Suite; + } + + /** + * [bdd, tdd] Describe a "suite" with the given `title` and callback `fn` containing + * nested suites. Indicates this suite should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + * + * @returns [bdd] `Suite` + * @returns [tdd] `void` + */ + type PendingSuiteFunction = (title: string, fn: (this: Suite) => void) => Suite | void; + + interface TestFunction { + /** + * Describe a specification or test-case with the given callback `fn` acting as a thunk. + * The name of the function is used as the name of the test. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: Func): Test; + + /** + * Describe a specification or test-case with the given callback `fn` acting as a thunk. + * The name of the function is used as the name of the test. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: AsyncFunc): Test; + + /** + * Describe a specification or test-case with the given `title` and callback `fn` acting + * as a thunk. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn?: Func): Test; + + /** + * Describe a specification or test-case with the given `title` and callback `fn` acting + * as a thunk. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn?: AsyncFunc): Test; + + /** + * Indicates this test should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + only: ExclusiveTestFunction; + + /** + * Indicates this test should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + */ + skip: PendingTestFunction; + + /** + * Number of attempts to retry. + * + * - _Only available when invoked via the mocha CLI._ + */ + retries(n: number): void; + } + + interface ExclusiveTestFunction { + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given callback `fn` + * acting as a thunk. The name of the function is used as the name of the test. Indicates + * this test should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: Func): Test; + + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given callback `fn` + * acting as a thunk. The name of the function is used as the name of the test. Indicates + * this test should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: AsyncFunc): Test; + + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given `title` and + * callback `fn` acting as a thunk. Indicates this test should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn?: Func): Test; + + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given `title` and + * callback `fn` acting as a thunk. Indicates this test should be executed exclusively. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn?: AsyncFunc): Test; + } + + interface PendingTestFunction { + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given callback `fn` + * acting as a thunk. The name of the function is used as the name of the test. Indicates + * this test should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: Func): Test; + + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given callback `fn` + * acting as a thunk. The name of the function is used as the name of the test. Indicates + * this test should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + */ + (fn: AsyncFunc): Test; + + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given `title` and + * callback `fn` acting as a thunk. Indicates this test should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn?: Func): Test; + + /** + * [bdd, tdd, qunit] Describe a specification or test-case with the given `title` and + * callback `fn` acting as a thunk. Indicates this test should not be executed. + * + * - _Only available when invoked via the mocha CLI._ + */ + (title: string, fn?: AsyncFunc): Test; + } + + /** + * Execute after each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#afterEach + */ + let afterEach: HookFunction; + + /** + * Execute after running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#after + */ + let after: HookFunction; + + /** + * Execute before each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#beforeEach + */ + let beforeEach: HookFunction; + + /** + * Execute before running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#before + */ + let before: HookFunction; + + /** + * Describe a "suite" containing nested suites and tests. + * + * - _Only available when invoked via the mocha CLI._ + */ + let describe: SuiteFunction; + + /** + * Describe a pending suite. + * + * - _Only available when invoked via the mocha CLI._ + */ + let xdescribe: PendingSuiteFunction; + + /** + * Describes a test case. + * + * - _Only available when invoked via the mocha CLI._ + */ + let it: TestFunction; + + /** + * Describes a pending test case. + * + * - _Only available when invoked via the mocha CLI._ + */ + let xit: PendingTestFunction; + + /** + * Execute before each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#beforeEach + */ + let setup: HookFunction; + + /** + * Execute before running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#before + */ + let suiteSetup: HookFunction; + + /** + * Execute after running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#after + */ + let suiteTeardown: HookFunction; + + /** + * Describe a "suite" containing nested suites and tests. + * + * - _Only available when invoked via the mocha CLI._ + */ + let suite: SuiteFunction; + + /** + * Execute after each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#afterEach + */ + let teardown: HookFunction; + + /** + * Describes a test case. + * + * - _Only available when invoked via the mocha CLI._ + */ + let test: TestFunction; +} + +/** + * Execute before running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#before + */ +declare let before: Mocha.HookFunction; + +/** + * Execute before running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#before + */ +declare let suiteSetup: Mocha.HookFunction; + +/** + * Execute after running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#after + */ +declare let after: Mocha.HookFunction; + +/** + * Execute after running tests. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#after + */ +declare let suiteTeardown: Mocha.HookFunction; + +/** + * Execute before each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#beforeEach + */ +declare let beforeEach: Mocha.HookFunction; + +/** + * Execute before each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#beforeEach + */ +declare let setup: Mocha.HookFunction; + +/** + * Execute after each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#afterEach + */ +declare let afterEach: Mocha.HookFunction; + +/** + * Execute after each test case. + * + * - _Only available when invoked via the mocha CLI._ + * + * @see https://mochajs.org/api/global.html#afterEach + */ +declare let teardown: Mocha.HookFunction; + +/** + * Describe a "suite" containing nested suites and tests. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let describe: Mocha.SuiteFunction; + +/** + * Describe a "suite" containing nested suites and tests. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let context: Mocha.SuiteFunction; + +/** + * Describe a "suite" containing nested suites and tests. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let suite: Mocha.SuiteFunction; + +/** + * Pending suite. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let xdescribe: Mocha.PendingSuiteFunction; + +/** + * Pending suite. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let xcontext: Mocha.PendingSuiteFunction; + +/** + * Describes a test case. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let it: Mocha.TestFunction; + +/** + * Describes a test case. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let specify: Mocha.TestFunction; + +/** + * Describes a test case. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let test: Mocha.TestFunction; + +/** + * Describes a pending test case. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let xit: Mocha.PendingTestFunction; + +/** + * Describes a pending test case. + * + * - _Only available when invoked via the mocha CLI._ + */ +declare let xspecify: Mocha.PendingTestFunction; diff --git a/packages/kbn-ambient-ftr-types/jest.config.js b/packages/kbn-ambient-ftr-types/jest.config.js new file mode 100644 index 00000000000000..448fc3f2bd9e3a --- /dev/null +++ b/packages/kbn-ambient-ftr-types/jest.config.js @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-ambient-ftr-types'], +}; diff --git a/packages/kbn-ambient-ftr-types/kibana.jsonc b/packages/kbn-ambient-ftr-types/kibana.jsonc new file mode 100644 index 00000000000000..5fa351e4d78148 --- /dev/null +++ b/packages/kbn-ambient-ftr-types/kibana.jsonc @@ -0,0 +1,8 @@ +{ + "type": "shared-common", + "id": "@kbn/ambient-ftr-types", + "owner": "@elastic/kibana-operations", + "devOnly": true, + "runtimeDeps": [], + "typeDeps": [], +} diff --git a/packages/kbn-ambient-ftr-types/package.json b/packages/kbn-ambient-ftr-types/package.json new file mode 100644 index 00000000000000..7928b304529cf6 --- /dev/null +++ b/packages/kbn-ambient-ftr-types/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kbn/ambient-ftr-types", + "private": true, + "version": "1.0.0", + "main": "./target_node/index.js", + "types": "./target_types/index.d.ts", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/packages/kbn-ambient-ftr-types/tsconfig.json b/packages/kbn-ambient-ftr-types/tsconfig.json new file mode 100644 index 00000000000000..292157c18591a5 --- /dev/null +++ b/packages/kbn-ambient-ftr-types/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.bazel.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "outDir": "target_types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ] +} diff --git a/packages/kbn-generate/templates/package/BUILD.bazel.ejs b/packages/kbn-generate/templates/package/BUILD.bazel.ejs index 92a407eea682c4..40463859985543 100644 --- a/packages/kbn-generate/templates/package/BUILD.bazel.ejs +++ b/packages/kbn-generate/templates/package/BUILD.bazel.ejs @@ -131,8 +131,8 @@ filegroup( visibility = ["//visibility:public"], ) -filegroup( +pkg_npm( name = "build_types", - srcs = [":npm_module_types"], + deps = [":npm_module_types"], visibility = ["//visibility:public"], ) diff --git a/packages/kbn-handlebars/index.test.ts b/packages/kbn-handlebars/index.test.ts index 9d255bf676746d..82f837a6b333f5 100644 --- a/packages/kbn-handlebars/index.test.ts +++ b/packages/kbn-handlebars/index.test.ts @@ -49,51 +49,118 @@ Expecting 'ID', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got } }); -it('Only provide options.fn/inverse to block helpers', () => { - function toHaveProperties(...args: any[]) { - toHaveProperties.calls++; - const options = args[args.length - 1]; - expect(options).toHaveProperty('fn'); - expect(options).toHaveProperty('inverse'); - return 42; - } - toHaveProperties.calls = 0; - - function toNotHaveProperties(...args: any[]) { - toNotHaveProperties.calls++; - const options = args[args.length - 1]; - expect(options).not.toHaveProperty('fn'); - expect(options).not.toHaveProperty('inverse'); - return 42; - } - toNotHaveProperties.calls = 0; +// Extra "helpers" tests +describe('helpers', () => { + it('Only provide options.fn/inverse to block helpers', () => { + function toHaveProperties(...args: any[]) { + toHaveProperties.calls++; + const options = args[args.length - 1]; + expect(options).toHaveProperty('fn'); + expect(options).toHaveProperty('inverse'); + return 42; + } + toHaveProperties.calls = 0; + + function toNotHaveProperties(...args: any[]) { + toNotHaveProperties.calls++; + const options = args[args.length - 1]; + expect(options).not.toHaveProperty('fn'); + expect(options).not.toHaveProperty('inverse'); + return 42; + } + toNotHaveProperties.calls = 0; + + const nonBlockTemplates = ['{{foo}}', '{{foo 1 2}}']; + const blockTemplates = ['{{#foo}}42{{/foo}}', '{{#foo 1 2}}42{{/foo}}']; + + for (const template of nonBlockTemplates) { + expectTemplate(template) + .withInput({ + foo: toNotHaveProperties, + }) + .toCompileTo('42'); - const nonBlockTemplates = ['{{foo}}', '{{foo 1 2}}']; - const blockTemplates = ['{{#foo}}42{{/foo}}', '{{#foo 1 2}}42{{/foo}}']; + expectTemplate(template).withHelper('foo', toNotHaveProperties).toCompileTo('42'); + } - for (const template of nonBlockTemplates) { - expectTemplate(template) - .withInput({ - foo: toNotHaveProperties, - }) - .toCompileTo('42'); + for (const template of blockTemplates) { + expectTemplate(template) + .withInput({ + foo: toHaveProperties, + }) + .toCompileTo('42'); - expectTemplate(template).withHelper('foo', toNotHaveProperties).toCompileTo('42'); - } + expectTemplate(template).withHelper('foo', toHaveProperties).toCompileTo('42'); + } + + const factor = process.env.AST || process.env.EVAL ? 1 : 2; + expect(toNotHaveProperties.calls).toEqual(nonBlockTemplates.length * 2 * factor); + expect(toHaveProperties.calls).toEqual(blockTemplates.length * 2 * factor); + }); - for (const template of blockTemplates) { - expectTemplate(template) + it('should pass expected "this" and arguments to helper functions', () => { + expectTemplate('{{hello "world" 12 true false}}') + .withHelper('hello', function (this: any, ...args) { + expect(this).toMatchInlineSnapshot(` + Object { + "people": Array [ + Object { + "id": 1, + "name": "Alan", + }, + Object { + "id": 2, + "name": "Yehuda", + }, + ], + } + `); + expect(args).toMatchInlineSnapshot(` + Array [ + "world", + 12, + true, + false, + Object { + "data": Object { + "root": Object { + "people": Array [ + Object { + "id": 1, + "name": "Alan", + }, + Object { + "id": 2, + "name": "Yehuda", + }, + ], + }, + }, + "hash": Object {}, + "loc": Object { + "end": Object { + "column": 31, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "lookupProperty": [Function], + "name": "hello", + }, + ] + `); + }) .withInput({ - foo: toHaveProperties, + people: [ + { name: 'Alan', id: 1 }, + { name: 'Yehuda', id: 2 }, + ], }) - .toCompileTo('42'); - - expectTemplate(template).withHelper('foo', toHaveProperties).toCompileTo('42'); - } - - const factor = process.env.AST || process.env.EVAL ? 1 : 2; - expect(toNotHaveProperties.calls).toEqual(nonBlockTemplates.length * 2 * factor); - expect(toHaveProperties.calls).toEqual(blockTemplates.length * 2 * factor); + .toCompileTo(''); + }); }); // Extra "blocks" tests diff --git a/packages/kbn-handlebars/index.ts b/packages/kbn-handlebars/index.ts index a7ad36a9e8663e..9f8256a3bb5164 100644 --- a/packages/kbn-handlebars/index.ts +++ b/packages/kbn-handlebars/index.ts @@ -392,17 +392,13 @@ class ElasticHandlebarsVisitor extends Handlebars.Visitor { decorator: hbs.AST.DecoratorBlock | hbs.AST.Decorator, prog: Handlebars.TemplateDelegate ) { - // TypeScript: The types indicate that `decorator.path` technically can be an `hbs.AST.Literal`. However, the upstream codebase always treats it as an `hbs.AST.PathExpression`, so we do too. - const name = (decorator.path as hbs.AST.PathExpression).original; const props = {}; - // TypeScript: Because `decorator` can be of type `hbs.AST.Decorator`, TS indicates that `decorator.path` technically can be an `hbs.AST.Literal`. However, the upstream codebase always treats it as an `hbs.AST.PathExpression`, so we do too. - const options = this.setupParams(decorator as hbs.AST.DecoratorBlock, name); - // @ts-expect-error: Property 'lookupProperty' does not exist on type 'HelperOptions' - delete options.lookupProperty; // There's really no tests/documentation on this, but to match the upstream codebase we'll remove `lookupProperty` from the decorator context + const options = this.setupDecoratorOptions(decorator); const result = this.container.lookupProperty( this.container.decorators, - name + // @ts-expect-error: Property 'name' does not exist on type 'HelperOptions' - The types are wrong + options.name )(prog, props, this.container, options); Object.assign(result || prog, props); @@ -642,31 +638,44 @@ class ElasticHandlebarsVisitor extends Handlebars.Visitor { }; } - private setupParams( - node: ProcessableNodeWithPathParts, - helperName: string + private setupDecoratorOptions( + decorator: hbs.AST.Decorator | hbs.AST.DecoratorBlock ): Handlebars.HelperOptions { - const options: Handlebars.HelperOptions = { - // @ts-expect-error: Name should be on there, but the offical types doesn't know this - name: helperName, - hash: this.getHash(node), - data: this.runtimeOptions!.data, - loc: { start: node.loc.start, end: node.loc.end }, - }; + // TypeScript: The types indicate that `decorator.path` technically can be an `hbs.AST.Literal`. However, the upstream codebase always treats it as an `hbs.AST.PathExpression`, so we do too. + const name = (decorator.path as hbs.AST.PathExpression).original; + const options = this.setupParams(decorator as hbs.AST.DecoratorBlock, name); - if (node.params.length > 0) { + if (decorator.params.length > 0) { if (!this.processedRootDecorators) { // When processing the root decorators, temporarily remove the root context so it's not accessible to the decorator const context = this.scopes.shift(); // @ts-expect-error: Property 'args' does not exist on type 'HelperOptions'. The 'args' property is expected in decorators - options.args = this.resolveNodes(node.params); + options.args = this.resolveNodes(decorator.params); this.scopes.unshift(context); } else { // @ts-expect-error: Property 'args' does not exist on type 'HelperOptions'. The 'args' property is expected in decorators - options.args = this.resolveNodes(node.params); + options.args = this.resolveNodes(decorator.params); } } + // @ts-expect-error: Property 'lookupProperty' does not exist on type 'HelperOptions' + delete options.lookupProperty; // There's really no tests/documentation on this, but to match the upstream codebase we'll remove `lookupProperty` from the decorator context + + return options; + } + + private setupParams( + node: ProcessableNodeWithPathParts, + helperName: string + ): Handlebars.HelperOptions { + const options: Handlebars.HelperOptions = { + // @ts-expect-error: Name should be on there, but the offical types doesn't know this + name: helperName, + hash: this.getHash(node), + data: this.runtimeOptions!.data, + loc: { start: node.loc.start, end: node.loc.end }, + }; + if (isBlock(node)) { options.fn = this.generateProgramFunction(node.program); if (node.program) this.processDecorators(node.program, options.fn); diff --git a/packages/kbn-journeys/BUILD.bazel b/packages/kbn-journeys/BUILD.bazel index b6c6f0ed2fbf29..298b36dbca2e33 100644 --- a/packages/kbn-journeys/BUILD.bazel +++ b/packages/kbn-journeys/BUILD.bazel @@ -59,7 +59,6 @@ RUNTIME_DEPS = [ # References to NPM packages work the same as RUNTIME_DEPS TYPES_DEPS = [ "@npm//@types/node", - "@npm//@types/mocha", "@npm//playwright", "@npm//uuid", "@npm//axios", @@ -70,6 +69,7 @@ TYPES_DEPS = [ "//packages/kbn-ftr-screenshot-filename:npm_module_types", "//packages/kbn-test:npm_module_types", "//packages/kbn-utils:npm_module_types", + "//packages/kbn-ambient-ftr-types:npm_module_types", ] jsts_transpiler( diff --git a/packages/kbn-journeys/tsconfig.json b/packages/kbn-journeys/tsconfig.json index d625ae13bf409e..7e77ca978f3e82 100644 --- a/packages/kbn-journeys/tsconfig.json +++ b/packages/kbn-journeys/tsconfig.json @@ -5,8 +5,8 @@ "emitDeclarationOnly": true, "outDir": "target_types", "types": [ - "mocha", - "node" + "node", + "@kbn/ambient-ftr-types", ] }, "include": [ diff --git a/packages/kbn-monaco/BUILD.bazel b/packages/kbn-monaco/BUILD.bazel index 541ba68265771a..35da648bccb598 100644 --- a/packages/kbn-monaco/BUILD.bazel +++ b/packages/kbn-monaco/BUILD.bazel @@ -47,6 +47,7 @@ RUNTIME_DEPS = [ "@npm//antlr4ts", "@npm//babel-loader", "@npm//monaco-editor", + "@npm//monaco-yaml", "@npm//raw-loader", "@npm//rxjs", ] diff --git a/packages/kbn-monaco/src/monaco_imports.ts b/packages/kbn-monaco/src/monaco_imports.ts index 07a24c8c8bd2ea..9da2a3f4562f30 100644 --- a/packages/kbn-monaco/src/monaco_imports.ts +++ b/packages/kbn-monaco/src/monaco_imports.ts @@ -26,5 +26,6 @@ import 'monaco-editor/esm/vs/editor/contrib/bracketMatching/bracketMatching.js'; import 'monaco-editor/esm/vs/language/json/monaco.contribution.js'; import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution.js'; // Needed for basic javascript support import 'monaco-editor/esm/vs/basic-languages/xml/xml.contribution.js'; // Needed for basic xml support +import 'monaco-editor/esm/vs/basic-languages/yaml/yaml.contribution'; // Needed for yaml support export { monaco }; diff --git a/packages/kbn-monaco/src/register_globals.ts b/packages/kbn-monaco/src/register_globals.ts index 21b4b8d92cf749..7754b140305aac 100644 --- a/packages/kbn-monaco/src/register_globals.ts +++ b/packages/kbn-monaco/src/register_globals.ts @@ -11,12 +11,13 @@ import { PainlessLang } from './painless'; import { SQLLang } from './sql'; import { monaco } from './monaco_imports'; import { ESQL_THEME_ID, ESQLLang, buildESQlTheme } from './esql'; - import { registerLanguage, registerTheme } from './helpers'; import { createWorkersRegistry } from './workers_registry'; export const DEFAULT_WORKER_ID = 'default'; +const Yaml = 'yaml'; + const workerRegistry = createWorkersRegistry(DEFAULT_WORKER_ID); workerRegistry.register( @@ -44,6 +45,11 @@ workerRegistry.register( async () => await import('!!raw-loader!../../target_workers/json.editor.worker.js') ); +workerRegistry.register( + Yaml, + async () => await import('!!raw-loader!../../target_workers/yaml.editor.worker.js') +); + /** * Register languages and lexer rules */ diff --git a/packages/kbn-monaco/webpack.config.js b/packages/kbn-monaco/webpack.config.js index 15af5ad2f8e893..f15f48ac10da54 100644 --- a/packages/kbn-monaco/webpack.config.js +++ b/packages/kbn-monaco/webpack.config.js @@ -14,6 +14,8 @@ const getWorkerEntry = (language) => { return 'monaco-editor/esm/vs/editor/editor.worker.js'; case 'json': return 'monaco-editor/esm/vs/language/json/json.worker.js'; + case 'yaml': + return 'monaco-yaml/lib/esm/yaml.worker.js'; default: return path.resolve(__dirname, 'src', language, 'worker', `${language}.worker.ts`); } @@ -47,4 +49,4 @@ const getWorkerConfig = (language) => ({ }, }); -module.exports = ['default', 'json', 'painless', 'xjson', 'esql'].map(getWorkerConfig); +module.exports = ['default', 'json', 'painless', 'xjson', 'esql', 'yaml'].map(getWorkerConfig); diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index fc0b4fc3d08310..c1371edbd4068e 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -12,6 +12,7 @@ pageLoadAssetSize: cloud: 21076 cloudChat: 19894 cloudDataMigration: 19170 + cloudDefend: 18697 cloudExperiments: 59358 cloudFullStory: 18493 cloudGainsight: 18710 diff --git a/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap b/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap index e0babefec51d40..875d4b39ad7dea 100644 --- a/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap +++ b/packages/kbn-securitysolution-exception-list-components/src/list_header/__snapshots__/list_header.test.tsx.snap @@ -22,6 +22,7 @@ Object { >
  • } diff --git a/renovate.json b/renovate.json index 801f2f0b0ceaed..87e3ca8986be40 100644 --- a/renovate.json +++ b/renovate.json @@ -259,6 +259,15 @@ "enabled": true, "prCreation": "immediate" }, + { + "groupName": "Cloud Defend", + "matchPackageNames": ["monaco-yaml"], + "reviewers": ["team:sec-cloudnative-integrations"], + "matchBaseBranches": ["main"], + "labels": ["Team: Cloud Native Integrations", "release_note:skip", "backport:skip"], + "enabled": true, + "prCreation": "immediate" + }, { "groupName": "XState", "matchPackageNames": ["xstate"], diff --git a/src/core/server/index.ts b/src/core/server/index.ts index 054887bed7b869..3b4f860093c09b 100644 --- a/src/core/server/index.ts +++ b/src/core/server/index.ts @@ -356,7 +356,7 @@ export type { SavedObjectsRequestHandlerContext, EncryptedObjectDescriptor, ISavedObjectsEncryptionExtension, - CheckAuthorizationParams, + PerformAuthorizationParams, AuthorizationTypeEntry, AuthorizationTypeMap, CheckAuthorizationResult, diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index eebb7e8eabe589..45b605d824b63c 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.3.3': ['Elastic License 2.0'], - '@elastic/eui@70.4.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@71.0.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/src/plugins/controls/public/control_group/control_group_renderer.tsx b/src/plugins/controls/public/control_group/control_group_renderer.tsx index 987c8fcd7e5e56..9611c5a3c6c47b 100644 --- a/src/plugins/controls/public/control_group/control_group_renderer.tsx +++ b/src/plugins/controls/public/control_group/control_group_renderer.tsx @@ -7,11 +7,14 @@ */ import uuid from 'uuid'; +import { isEqual } from 'lodash'; import useLifecycles from 'react-use/lib/useLifecycles'; -import React, { useMemo, useRef, useState } from 'react'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; import { IEmbeddable } from '@kbn/embeddable-plugin/public'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; +import type { Filter, TimeRange, Query } from '@kbn/es-query'; +import { compareFilters } from '@kbn/es-query'; import { pluginServices } from '../services'; import { getDefaultControlGroupInput } from '../../common'; @@ -26,16 +29,22 @@ import { controlGroupReducers } from './state/control_group_reducers'; import { controlGroupInputBuilder } from './control_group_input_builder'; export interface ControlGroupRendererProps { - onLoadComplete?: (controlGroup: ControlGroupContainer) => void; + filters?: Filter[]; getInitialInput: ( initialInput: Partial, builder: typeof controlGroupInputBuilder ) => Promise>; + onLoadComplete?: (controlGroup: ControlGroupContainer) => void; + timeRange?: TimeRange; + query?: Query; } export const ControlGroupRenderer = ({ onLoadComplete, getInitialInput, + filters, + timeRange, + query, }: ControlGroupRendererProps) => { const controlGroupRef = useRef(null); const [controlGroup, setControlGroup] = useState(); @@ -74,6 +83,24 @@ export const ControlGroupRenderer = ({ } ); + useEffect(() => { + if (!controlGroup) { + return; + } + + if ( + (timeRange && !isEqual(controlGroup.getInput().timeRange, timeRange)) || + !compareFilters(controlGroup.getInput().filters ?? [], filters ?? []) || + !isEqual(controlGroup.getInput().query, query) + ) { + controlGroup.updateInput({ + timeRange, + query, + filters, + }); + } + }, [query, filters, controlGroup, timeRange]); + return
    ; }; diff --git a/src/plugins/controls/public/range_slider/components/range_slider_control.tsx b/src/plugins/controls/public/range_slider/components/range_slider_control.tsx index 8a88ba65609e44..5e5bd512ab3559 100644 --- a/src/plugins/controls/public/range_slider/components/range_slider_control.tsx +++ b/src/plugins/controls/public/range_slider/components/range_slider_control.tsx @@ -15,20 +15,19 @@ import { EuiLoadingSpinner, EuiFlexGroup, EuiFlexItem, - EuiDualRange, } from '@elastic/eui'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; import { rangeSliderReducers } from '../range_slider_reducers'; import { RangeSliderReduxState } from '../types'; -import { RangeSliderPopover } from './range_slider_popover'; +import { RangeSliderPopover, EuiDualRangeRef } from './range_slider_popover'; import './range_slider.scss'; const INVALID_CLASS = 'rangeSliderAnchor__fieldNumber--invalid'; export const RangeSliderControl: FC = () => { - const rangeRef = useRef(null); + const rangeRef = useRef(null); const [isPopoverOpen, setIsPopoverOpen] = useState(false); // Controls Services Context @@ -143,13 +142,11 @@ export const RangeSliderControl: FC = () => { anchorPosition="downCenter" attachToAnchor={false} disableFocusTrap - onPanelResize={() => { - if (rangeRef?.current) { - rangeRef.current.onResize(); - } + onPanelResize={(width) => { + rangeRef.current?.onResize(width); }} > - + ); }; diff --git a/src/plugins/controls/public/range_slider/components/range_slider_popover.tsx b/src/plugins/controls/public/range_slider/components/range_slider_popover.tsx index fea4db4fc268d5..bd2fee564e9cb0 100644 --- a/src/plugins/controls/public/range_slider/components/range_slider_popover.tsx +++ b/src/plugins/controls/public/range_slider/components/range_slider_popover.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React, { FC, useEffect, useRef, useState } from 'react'; +import React, { FC, ComponentProps, Ref, useEffect, useState } from 'react'; import useMount from 'react-use/lib/useMount'; import { @@ -18,6 +18,7 @@ import { EuiToolTip, EuiButtonIcon, } from '@elastic/eui'; +import type { EuiDualRangeClass } from '@elastic/eui/src/components/form/range/dual_range'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; import { RangeValue } from '../../../common/range_slider/types'; @@ -26,9 +27,11 @@ import { rangeSliderReducers } from '../range_slider_reducers'; import { RangeSliderReduxState } from '../types'; import { RangeSliderStrings } from './range_slider_strings'; -export const RangeSliderPopover: FC = () => { +// Unfortunately, wrapping EuiDualRange in `withEuiTheme` has created this annoying/verbose typing +export type EuiDualRangeRef = EuiDualRangeClass & ComponentProps; + +export const RangeSliderPopover: FC<{ rangeRef?: Ref }> = ({ rangeRef }) => { const [fieldFormatter, setFieldFormatter] = useState(() => (toFormat: string) => toFormat); - const rangeRef = useRef(null); // Controls Services Context const { @@ -143,8 +146,8 @@ export const RangeSliderPopover: FC = () => { { const updatedLowerBound = typeof newLowerBound === 'number' ? String(newLowerBound) : value[0]; diff --git a/src/plugins/controls/public/time_slider/components/time_slider.tsx b/src/plugins/controls/public/time_slider/components/time_slider.tsx index bb8c698ee7c3bd..3962d85bec1d94 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider.tsx @@ -7,12 +7,12 @@ */ import React, { FC, useRef } from 'react'; -import { EuiInputPopover, EuiDualRange } from '@elastic/eui'; +import { EuiInputPopover } from '@elastic/eui'; import { useReduxEmbeddableContext } from '@kbn/presentation-util-plugin/public'; import { timeSliderReducers } from '../time_slider_reducers'; import { TimeSliderReduxState } from '../types'; import { TimeSliderPopoverButton } from './time_slider_popover_button'; -import { TimeSliderPopoverContent } from './time_slider_popover_content'; +import { TimeSliderPopoverContent, EuiDualRangeRef } from './time_slider_popover_content'; import { FROM_INDEX, TO_INDEX } from '../time_utils'; import { getRoundedTimeRangeBounds } from '../time_slider_selectors'; @@ -46,7 +46,7 @@ export const TimeSlider: FC = (props: Props) => { return state.componentState.isOpen; }); - const rangeRef = useRef(null); + const rangeRef = useRef(null); const onPanelResize = (width?: number) => { rangeRef.current?.onResize(width); diff --git a/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx b/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx index 9ec21f73528177..3ce28761f713c0 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx @@ -7,9 +7,19 @@ */ import { i18n } from '@kbn/i18n'; -import React, { Ref } from 'react'; -import { EuiButtonIcon, EuiDualRange, EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; -import { EuiRangeTick } from '@elastic/eui/src/components/form/range/range_ticks'; +import React, { Ref, ComponentProps } from 'react'; +import { + EuiButtonIcon, + EuiDualRange, + EuiRangeTick, + EuiFlexGroup, + EuiFlexItem, + EuiToolTip, +} from '@elastic/eui'; +import type { EuiDualRangeClass } from '@elastic/eui/src/components/form/range/dual_range'; + +// Unfortunately, wrapping EuiDualRange in `withEuiTheme` has created a super annoying/verbose typing +export type EuiDualRangeRef = EuiDualRangeClass & ComponentProps; interface Props { value: [number, number]; @@ -19,7 +29,7 @@ interface Props { ticks: EuiRangeTick[]; timeRangeMin: number; timeRangeMax: number; - rangeRef?: Ref; + rangeRef?: Ref; } export function TimeSliderPopoverContent(props: Props) { diff --git a/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx b/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx index e12320356dd667..a927843ca13371 100644 --- a/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx +++ b/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx @@ -50,6 +50,10 @@ export class TimeSliderControlEmbeddable extends Embeddable< private getTimezone: ControlsSettingsService['getTimezone']; private timefilter: ControlsDataService['timefilter']; private prevTimeRange: TimeRange | undefined; + private prevTimesliceAsPercentage: { + timesliceStartAsPercentageOfTimeRange?: number; + timesliceEndAsPercentageOfTimeRange?: number; + }; private readonly waitForControlOutputConsumersToLoad$; private reduxEmbeddableTools: ReduxEmbeddableTools< @@ -112,6 +116,10 @@ export class TimeSliderControlEmbeddable extends Embeddable< ) : undefined; + this.prevTimesliceAsPercentage = { + timesliceStartAsPercentageOfTimeRange: this.getInput().timesliceStartAsPercentageOfTimeRange, + timesliceEndAsPercentageOfTimeRange: this.getInput().timesliceEndAsPercentageOfTimeRange, + }; this.syncWithTimeRange(); } @@ -125,13 +133,29 @@ export class TimeSliderControlEmbeddable extends Embeddable< private onInputChange() { const input = this.getInput(); + const { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange } = + this.prevTimesliceAsPercentage ?? {}; - if (!input.timeRange) { - return; - } - - if (!_.isEqual(input.timeRange, this.prevTimeRange)) { - const { actions, dispatch } = this.reduxEmbeddableTools; + const { actions, dispatch } = this.reduxEmbeddableTools; + if ( + timesliceStartAsPercentageOfTimeRange !== input.timesliceStartAsPercentageOfTimeRange || + timesliceEndAsPercentageOfTimeRange !== input.timesliceEndAsPercentageOfTimeRange + ) { + // Discarding edit mode changes results in replacing edited input with original input + // Re-sync with time range when edited input timeslice changes are discarded + if ( + !input.timesliceStartAsPercentageOfTimeRange && + !input.timesliceEndAsPercentageOfTimeRange + ) { + // If no selections have been saved into the timeslider, then both `timesliceStartAsPercentageOfTimeRange` + // and `timesliceEndAsPercentageOfTimeRange` will be undefined - so, need to reset component state to match + dispatch(actions.publishValue({ value: undefined })); + dispatch(actions.setValue({ value: undefined })); + } else { + // Otherwise, need to call `syncWithTimeRange` so that the component state value can be calculated and set + this.syncWithTimeRange(); + } + } else if (input.timeRange && !_.isEqual(input.timeRange, this.prevTimeRange)) { const nextBounds = this.timeRangeToBounds(input.timeRange); const ticks = getTicks(nextBounds[FROM_INDEX], nextBounds[TO_INDEX], this.getTimezone()); dispatch( @@ -153,6 +177,7 @@ export class TimeSliderControlEmbeddable extends Embeddable< getState().explicitInput.timesliceStartAsPercentageOfTimeRange; const timesliceEndAsPercentageOfTimeRange = getState().explicitInput.timesliceEndAsPercentageOfTimeRange; + if ( timesliceStartAsPercentageOfTimeRange !== undefined && timesliceEndAsPercentageOfTimeRange !== undefined @@ -187,8 +212,8 @@ export class TimeSliderControlEmbeddable extends Embeddable< dispatch(actions.publishValue({ value })); }, 500); - private onTimesliceChange = (value?: [number, number]) => { - const { actions, dispatch, getState } = this.reduxEmbeddableTools; + private getTimeSliceAsPercentageOfTimeRange(value?: [number, number]) { + const { getState } = this.reduxEmbeddableTools; let timesliceStartAsPercentageOfTimeRange: number | undefined; let timesliceEndAsPercentageOfTimeRange: number | undefined; if (value) { @@ -199,6 +224,18 @@ export class TimeSliderControlEmbeddable extends Embeddable< timesliceEndAsPercentageOfTimeRange = (value[TO_INDEX] - timeRangeBounds[FROM_INDEX]) / timeRange; } + this.prevTimesliceAsPercentage = { + timesliceStartAsPercentageOfTimeRange, + timesliceEndAsPercentageOfTimeRange, + }; + return { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange }; + } + + private onTimesliceChange = (value?: [number, number]) => { + const { actions, dispatch } = this.reduxEmbeddableTools; + + const { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange } = + this.getTimeSliceAsPercentageOfTimeRange(value); dispatch( actions.setValueAsPercentageOfTimeRange({ timesliceStartAsPercentageOfTimeRange, diff --git a/src/plugins/controls/public/time_slider/time_slider_reducers.ts b/src/plugins/controls/public/time_slider/time_slider_reducers.ts index 160d4bf5b25ade..eb550d998f3aff 100644 --- a/src/plugins/controls/public/time_slider/time_slider_reducers.ts +++ b/src/plugins/controls/public/time_slider/time_slider_reducers.ts @@ -8,7 +8,7 @@ import { PayloadAction } from '@reduxjs/toolkit'; import { WritableDraft } from 'immer/dist/types/types-external'; -import { EuiRangeTick } from '@elastic/eui/src/components/form/range/range_ticks'; +import { EuiRangeTick } from '@elastic/eui'; import { TimeSliderReduxState } from './types'; export const timeSliderReducers = { diff --git a/src/plugins/controls/public/time_slider/time_utils.ts b/src/plugins/controls/public/time_slider/time_utils.ts index bd978e9f7ec7ef..89995bb4b0cf5f 100644 --- a/src/plugins/controls/public/time_slider/time_utils.ts +++ b/src/plugins/controls/public/time_slider/time_utils.ts @@ -7,7 +7,7 @@ */ import moment from 'moment-timezone'; -import { EuiRangeTick } from '@elastic/eui/src/components/form/range/range_ticks'; +import { EuiRangeTick } from '@elastic/eui'; import { calcAutoIntervalNear } from '@kbn/data-plugin/common'; const MAX_TICKS = 20; // eui range has hard limit of 20 ticks and throws when exceeded diff --git a/src/plugins/controls/public/time_slider/types.ts b/src/plugins/controls/public/time_slider/types.ts index 56c78b0e45c2dd..9e72b7dd501137 100644 --- a/src/plugins/controls/public/time_slider/types.ts +++ b/src/plugins/controls/public/time_slider/types.ts @@ -7,7 +7,7 @@ */ import { ReduxEmbeddableState } from '@kbn/presentation-util-plugin/public'; -import { EuiRangeTick } from '@elastic/eui/src/components/form/range/range_ticks'; +import { EuiRangeTick } from '@elastic/eui'; import { ControlOutput } from '../types'; import { TimeSliderControlEmbeddableInput } from '../../common/time_slider/types'; diff --git a/src/plugins/es_ui_shared/static/forms/components/fields/range_field.tsx b/src/plugins/es_ui_shared/static/forms/components/fields/range_field.tsx index c063e46a247b01..872e442943e0db 100644 --- a/src/plugins/es_ui_shared/static/forms/components/fields/range_field.tsx +++ b/src/plugins/es_ui_shared/static/forms/components/fields/range_field.tsx @@ -7,7 +7,7 @@ */ import React, { useCallback } from 'react'; -import { EuiFormRow, EuiRange } from '@elastic/eui'; +import { EuiFormRow, EuiRange, EuiRangeProps } from '@elastic/eui'; import { FieldHook, getFieldValidityAndErrorMessage } from '../../hook_form_lib'; @@ -22,11 +22,9 @@ export const RangeField = ({ field, euiFieldProps = {}, idAria, ...rest }: Props const { isInvalid, errorMessage } = getFieldValidityAndErrorMessage(field); const { onChange: onFieldChange } = field; - const onChange = useCallback( - (e: React.ChangeEvent | React.MouseEvent) => { - const event = { ...e, value: `${e.currentTarget.value}` } as unknown as React.ChangeEvent<{ - value: string; - }>; + const onChange: EuiRangeProps['onChange'] = useCallback( + (e) => { + const event = { ...e, value: `${e.currentTarget.value}` }; onFieldChange(event); }, [onFieldChange] diff --git a/src/plugins/input_control_vis/public/components/vis/__snapshots__/range_control.test.tsx.snap b/src/plugins/input_control_vis/public/components/vis/__snapshots__/range_control.test.tsx.snap index c54397bf0e30c0..8bd5c5bd46041b 100644 --- a/src/plugins/input_control_vis/public/components/vis/__snapshots__/range_control.test.tsx.snap +++ b/src/plugins/input_control_vis/public/components/vis/__snapshots__/range_control.test.tsx.snap @@ -12,6 +12,8 @@ exports[`disabled 1`] = ` compressed={false} disabled={true} fullWidth={false} + max={100} + min={0} showInput={true} /> diff --git a/src/plugins/input_control_vis/public/components/vis/range_control.tsx b/src/plugins/input_control_vis/public/components/vis/range_control.tsx index dd003a74369df6..602cc79dd8f5c5 100644 --- a/src/plugins/input_control_vis/public/components/vis/range_control.tsx +++ b/src/plugins/input_control_vis/public/components/vis/range_control.tsx @@ -82,7 +82,7 @@ export class RangeControl extends PureComponent; + return ; } const decimalPlaces = _.get(this.props, 'control.options.decimalPlaces', 0); diff --git a/src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx b/src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx index 1b929be8af8ba1..14dc13962fa8b6 100644 --- a/src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx +++ b/src/plugins/kibana_react/public/validated_range/validated_dual_range.tsx @@ -8,9 +8,8 @@ import { i18n } from '@kbn/i18n'; import React, { Component, ReactNode } from 'react'; -import { EuiFormRow, EuiDualRange } from '@elastic/eui'; +import { EuiFormRow, EuiDualRange, EuiDualRangeProps } from '@elastic/eui'; import { EuiFormRowDisplayKeys } from '@elastic/eui/src/components/form/form_row/form_row'; -import { EuiDualRangeProps } from '@elastic/eui/src/components/form/range/dual_range'; import { isRangeValid } from './is_range_valid'; // Wrapper around EuiDualRange that ensures onChange callback is only called when range value @@ -19,14 +18,12 @@ import { isRangeValid } from './is_range_valid'; export type Value = EuiDualRangeProps['value']; export type ValueMember = EuiDualRangeProps['value'][0]; -interface Props extends Omit { +interface Props extends Omit { value?: Value; allowEmptyRange?: boolean; label?: string | ReactNode; formRowDisplay?: EuiFormRowDisplayKeys; onChange?: (val: [string, string]) => void; - min?: number; - max?: number; } interface State { diff --git a/src/plugins/presentation_util/public/redux_embeddables/create_redux_embeddable_tools.tsx b/src/plugins/presentation_util/public/redux_embeddables/create_redux_embeddable_tools.tsx index 426cb073b55fb7..ed7938a0760b44 100644 --- a/src/plugins/presentation_util/public/redux_embeddables/create_redux_embeddable_tools.tsx +++ b/src/plugins/presentation_util/public/redux_embeddables/create_redux_embeddable_tools.tsx @@ -52,17 +52,17 @@ export const createReduxEmbeddableTools = < }): ReduxEmbeddableTools => { // Additional generic reducers to aid in embeddable syncing const genericReducers = { - updateEmbeddableReduxInput: ( + replaceEmbeddableReduxInput: ( state: Draft, - action: PayloadAction> + action: PayloadAction ) => { - state.explicitInput = { ...state.explicitInput, ...action.payload }; + state.explicitInput = action.payload; }, - updateEmbeddableReduxOutput: ( + replaceEmbeddableReduxOutput: ( state: Draft, - action: PayloadAction> + action: PayloadAction ) => { - state.output = { ...state.output, ...action.payload }; + state.output = action.payload; }, }; diff --git a/src/plugins/presentation_util/public/redux_embeddables/sync_redux_embeddable.ts b/src/plugins/presentation_util/public/redux_embeddables/sync_redux_embeddable.ts index 5f4dd20818ba21..37aadd1e9fe478 100644 --- a/src/plugins/presentation_util/public/redux_embeddables/sync_redux_embeddable.ts +++ b/src/plugins/presentation_util/public/redux_embeddables/sync_redux_embeddable.ts @@ -81,7 +81,7 @@ export const syncReduxEmbeddable = < if (!inputEqual(reduxExplicitInput, embeddableExplictInput)) { store.dispatch( - actions.updateEmbeddableReduxInput(cleanInputForRedux(embeddableExplictInput)) + actions.replaceEmbeddableReduxInput(cleanInputForRedux(embeddableExplictInput)) ); } embeddableToReduxInProgress = false; @@ -93,7 +93,7 @@ export const syncReduxEmbeddable = < embeddableToReduxInProgress = true; const reduxState = store.getState(); if (!outputEqual(reduxState.output, embeddableOutput)) { - store.dispatch(actions.updateEmbeddableReduxOutput(embeddableOutput)); + store.dispatch(actions.replaceEmbeddableReduxOutput(embeddableOutput)); } embeddableToReduxInProgress = false; }); diff --git a/src/plugins/vis_default_editor/public/components/controls/precision.tsx b/src/plugins/vis_default_editor/public/components/controls/precision.tsx index 2e9c2b252fa63a..872c254cc91058 100644 --- a/src/plugins/vis_default_editor/public/components/controls/precision.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/precision.tsx @@ -31,9 +31,7 @@ function PrecisionParamEditor({ agg, value, setValue }: AggParamEditorProps | React.MouseEvent) => - setValue(Number(ev.currentTarget.value)) - } + onChange={(ev) => setValue(Number(ev.currentTarget.value))} data-test-subj={`visEditorMapPrecision${agg.id}`} showValue compressed diff --git a/src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx b/src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx index 408204b2a2dfb9..b97a68f0c59844 100644 --- a/src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx +++ b/src/plugins/vis_default_editor/public/components/controls/radius_ratio_option.tsx @@ -7,7 +7,7 @@ */ import React, { useCallback } from 'react'; -import { EuiFormRow, EuiIconTip, EuiRange, EuiSpacer } from '@elastic/eui'; +import { EuiFormRow, EuiIconTip, EuiRange, EuiRangeProps, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import useMount from 'react-use/lib/useMount'; @@ -40,9 +40,8 @@ function RadiusRatioOptionControl({ editorStateParams, setStateParamValue }: Agg } }); - const onChange = useCallback( - (e: React.ChangeEvent | React.MouseEvent) => - setStateParamValue(PARAM_NAME, parseFloat(e.currentTarget.value)), + const onChange: EuiRangeProps['onChange'] = useCallback( + (e) => setStateParamValue(PARAM_NAME, parseFloat(e.currentTarget.value)), [setStateParamValue] ); diff --git a/src/plugins/vis_types/xy/public/editor/components/options/metrics_axes/__snapshots__/point_options.test.tsx.snap b/src/plugins/vis_types/xy/public/editor/components/options/metrics_axes/__snapshots__/point_options.test.tsx.snap index fcd6f8d00a1385..43b613a9c7f47f 100644 --- a/src/plugins/vis_types/xy/public/editor/components/options/metrics_axes/__snapshots__/point_options.test.tsx.snap +++ b/src/plugins/vis_types/xy/public/editor/components/options/metrics_axes/__snapshots__/point_options.test.tsx.snap @@ -23,21 +23,15 @@ exports[`PointOptions component should init with the default set of props 1`] = label="Dots size" labelType="label" > - diff --git a/test/functional/apps/dashboard_elements/controls/options_list.ts b/test/functional/apps/dashboard_elements/controls/options_list.ts index 9ea4193ce23dfc..09c14f1804566a 100644 --- a/test/functional/apps/dashboard_elements/controls/options_list.ts +++ b/test/functional/apps/dashboard_elements/controls/options_list.ts @@ -439,6 +439,23 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await pieChart.getPieSliceCount()).to.be(2); await dashboard.clearUnsavedChanges(); }); + + it('changes to selections can be discarded', async () => { + await dashboardControls.optionsListOpenPopover(controlId); + await dashboardControls.optionsListPopoverSelectOption('bark'); + await dashboardControls.optionsListEnsurePopoverIsClosed(controlId); + let selections = await dashboardControls.optionsListGetSelectionsString(controlId); + expect(selections).to.equal('hiss, grr, bark'); + + await dashboard.clickCancelOutOfEditMode(); + selections = await dashboardControls.optionsListGetSelectionsString(controlId); + expect(selections).to.equal('hiss, grr'); + }); + + it('dashboard does not load with unsaved changes when changes are discarded', async () => { + await dashboard.switchToEditMode(); + await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); + }); }); describe('test data view runtime field', async () => { diff --git a/test/functional/apps/dashboard_elements/controls/range_slider.ts b/test/functional/apps/dashboard_elements/controls/range_slider.ts index e75c83c53bc18b..17d787b55c5d1f 100644 --- a/test/functional/apps/dashboard_elements/controls/range_slider.ts +++ b/test/functional/apps/dashboard_elements/controls/range_slider.ts @@ -183,6 +183,27 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const firstId = (await dashboardControls.getAllControlIds())[0]; await dashboardControls.rangeSliderClearSelection(firstId); await dashboardControls.validateRange('value', firstId, '', ''); + await dashboard.clearUnsavedChanges(); + }); + + it('making changes to range causes unsaved changes', async () => { + const firstId = (await dashboardControls.getAllControlIds())[0]; + await dashboardControls.rangeSliderSetLowerBound(firstId, '0'); + await dashboardControls.rangeSliderSetUpperBound(firstId, '3'); + await dashboardControls.rangeSliderWaitForLoading(); + await testSubjects.existOrFail('dashboardUnsavedChangesBadge'); + }); + + it('changes to range can be discarded', async () => { + const firstId = (await dashboardControls.getAllControlIds())[0]; + await dashboardControls.validateRange('value', firstId, '0', '3'); + await dashboard.clickCancelOutOfEditMode(); + await dashboardControls.validateRange('value', firstId, '', ''); + }); + + it('dashboard does not load with unsaved changes when changes are discarded', async () => { + await dashboard.switchToEditMode(); + await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); }); it('deletes an existing control', async () => { diff --git a/test/functional/apps/dashboard_elements/controls/time_slider.ts b/test/functional/apps/dashboard_elements/controls/time_slider.ts index 03331f97827d93..d2cff619282b8b 100644 --- a/test/functional/apps/dashboard_elements/controls/time_slider.ts +++ b/test/functional/apps/dashboard_elements/controls/time_slider.ts @@ -16,6 +16,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const security = getService('security'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); + const { dashboardControls, discover, timePicker, common, dashboard } = getPageObjects([ 'dashboardControls', 'discover', @@ -52,7 +53,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await security.testUser.restoreDefaults(); }); - describe('create and delete', async () => { + describe('create, edit, and delete', async () => { before(async () => { await common.navigateToApp('dashboard'); await dashboard.preserveCrossAppState(); @@ -62,11 +63,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'Oct 22, 2018 @ 00:00:00.000', 'Dec 3, 2018 @ 00:00:00.000' ); + await dashboard.saveDashboard('test time slider control', { exitFromEditMode: false }); }); it('can create a new time slider control from a blank state', async () => { await dashboardControls.createTimeSliderControl(); expect(await dashboardControls.getControlsCount()).to.be(1); + await dashboard.clearUnsavedChanges(); }); it('can not add a second time slider control', async () => { @@ -87,13 +90,34 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardControls.validateRange('placeholder', secondId, '100', '1200'); }); - it('applies filter from the first control on the second control', async () => { + it('making changes to time slice causes unsaved changes', async () => { await dashboardControls.gotoNextTimeSlice(); + await dashboard.clearUnsavedChanges(); + }); + + it('applies filter from the first control on the second control', async () => { await dashboardControls.rangeSliderWaitForLoading(); const secondId = (await dashboardControls.getAllControlIds())[1]; await dashboardControls.validateRange('placeholder', secondId, '101', '1000'); }); + it('changes to time slice can be discarded', async () => { + const valueBefore = await dashboardControls.getTimeSliceFromTimeSlider(); + await dashboardControls.gotoNextTimeSlice(); + const valueAfter = await dashboardControls.getTimeSliceFromTimeSlider(); + expect(valueBefore).to.not.equal(valueAfter); + + await dashboardControls.closeTimeSliderPopover(); + await dashboard.clickCancelOutOfEditMode(); + const valueNow = await dashboardControls.getTimeSliceFromTimeSlider(); + expect(valueNow).to.equal(valueBefore); + }); + + it('dashboard does not load with unsaved changes when changes are discarded', async () => { + await dashboard.switchToEditMode(); + await testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); + }); + it('deletes an existing control', async () => { const firstId = (await dashboardControls.getAllControlIds())[0]; await dashboardControls.removeExistingControl(firstId); diff --git a/test/functional/page_objects/dashboard_page_controls.ts b/test/functional/page_objects/dashboard_page_controls.ts index e2b91346d15eec..a584fbed741e9f 100644 --- a/test/functional/page_objects/dashboard_page_controls.ts +++ b/test/functional/page_objects/dashboard_page_controls.ts @@ -615,4 +615,21 @@ export class DashboardPageControls extends FtrService { await this.testSubjects.click('timeSlider-popoverToggleButton'); } } + + public async getTimeSliceFromTimeSlider() { + const isOpen = await this.testSubjects.exists('timeSlider-popoverContents'); + if (!isOpen) { + await this.testSubjects.click('timeSlider-popoverToggleButton'); + await this.retry.try(async () => { + await this.testSubjects.existOrFail('timeSlider-popoverContents'); + }); + } + const popover = await this.testSubjects.find('timeSlider-popoverContents'); + const dualRangeSlider = await this.find.descendantDisplayedByCssSelector( + '.euiRangeDraggable', + popover + ); + const value = await dualRangeSlider.getAttribute('aria-valuetext'); + return value; + } } diff --git a/test/tsconfig.json b/test/tsconfig.json index 1b5cf6f7a0eb25..904735349c3adc 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -9,6 +9,7 @@ "node", "@emotion/react/types/css-prop", "@kbn/ambient-ui-types", + "@kbn/ambient-ftr-types", ] }, "include": [ diff --git a/tsconfig.base.json b/tsconfig.base.json index c4770118c83859..8b656877ab7a70 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -380,6 +380,8 @@ "@kbn/alerts/*": ["packages/kbn-alerts/*"], "@kbn/ambient-common-types": ["packages/kbn-ambient-common-types"], "@kbn/ambient-common-types/*": ["packages/kbn-ambient-common-types/*"], + "@kbn/ambient-ftr-types": ["packages/kbn-ambient-ftr-types"], + "@kbn/ambient-ftr-types/*": ["packages/kbn-ambient-ftr-types/*"], "@kbn/ambient-storybook-types": ["packages/kbn-ambient-storybook-types"], "@kbn/ambient-storybook-types/*": ["packages/kbn-ambient-storybook-types/*"], "@kbn/ambient-ui-types": ["packages/kbn-ambient-ui-types"], @@ -1070,6 +1072,8 @@ "@kbn/canvas-plugin/*": ["x-pack/plugins/canvas/*"], "@kbn/cases-plugin": ["x-pack/plugins/cases"], "@kbn/cases-plugin/*": ["x-pack/plugins/cases/*"], + "@kbn/cloud-defend-plugin": ["x-pack/plugins/cloud_defend"], + "@kbn/cloud-defend-plugin/*": ["x-pack/plugins/cloud_defend/*"], "@kbn/cloud-chat-plugin": ["x-pack/plugins/cloud_integrations/cloud_chat"], "@kbn/cloud-chat-plugin/*": ["x-pack/plugins/cloud_integrations/cloud_chat/*"], "@kbn/cloud-data-migration-plugin": ["x-pack/plugins/cloud_integrations/cloud_data_migration"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index a27882c5bfc62e..6e214dcb448e81 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -11,6 +11,7 @@ "xpack.cases": "plugins/cases", "xpack.cloud": "plugins/cloud", "xpack.cloudChat": "plugins/cloud_integrations/cloud_chat", + "xpack.cloudDefend": "plugins/cloud_defend", "xpack.cloudLinks": "plugins/cloud_integrations/cloud_links", "xpack.cloudDataMigration": "plugins/cloud_integrations/cloud_data_migration", "xpack.csp": "plugins/cloud_security_posture", diff --git a/x-pack/plugins/aiops/public/application/utils/query_utils.test.ts b/x-pack/plugins/aiops/public/application/utils/query_utils.test.ts index 59d680d236b15a..c886b16fa0ec2f 100644 --- a/x-pack/plugins/aiops/public/application/utils/query_utils.test.ts +++ b/x-pack/plugins/aiops/public/application/utils/query_utils.test.ts @@ -27,16 +27,16 @@ const selectedGroupMock: GroupTableItem = { id: '21289599', docCount: 20468, pValue: 2.2250738585072626e-308, - group: { - 'error.message': 'rate limit exceeded', - message: 'too many requests', - 'user_agent.original.keyword': 'Mozilla/5.0', - }, - repeatedValues: { - 'beat.hostname.keyword': 'ip-192-168-1-1', - 'beat.name.keyword': 'i-1234', - 'docker.container.id.keyword': 'asdf', - }, + group: [ + { fieldName: 'error.message', fieldValue: 'rate limit exceeded' }, + { fieldName: 'message', fieldValue: 'too many requests' }, + { fieldName: 'user_agent.original.keyword', fieldValue: 'Mozilla/5.0' }, + ], + repeatedValues: [ + { fieldName: 'beat.hostname.keyword', fieldValue: 'ip-192-168-1-1' }, + { fieldName: 'beat.name.keyword', fieldValue: 'i-1234' }, + { fieldName: 'docker.container.id.keyword', fieldValue: 'asdf' }, + ], histogram: [], }; diff --git a/x-pack/plugins/aiops/public/application/utils/query_utils.ts b/x-pack/plugins/aiops/public/application/utils/query_utils.ts index 1779b434df5086..0c0363d852bc96 100644 --- a/x-pack/plugins/aiops/public/application/utils/query_utils.ts +++ b/x-pack/plugins/aiops/public/application/utils/query_utils.ts @@ -15,7 +15,7 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { Query } from '@kbn/es-query'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; -import type { ChangePoint } from '@kbn/ml-agg-utils'; +import type { ChangePoint, FieldValuePair } from '@kbn/ml-agg-utils'; import type { GroupTableItem } from '../../components/spike_analysis_table/spike_analysis_table_groups'; /* @@ -52,11 +52,10 @@ export function buildBaseFilterCriteria( const groupFilter = []; if (selectedGroup) { - const allItems = { ...selectedGroup.group, ...selectedGroup.repeatedValues }; - for (const fieldName in allItems) { - if (allItems.hasOwnProperty(fieldName)) { - groupFilter.push({ term: { [fieldName]: allItems[fieldName] } }); - } + const allItems: FieldValuePair[] = [...selectedGroup.group, ...selectedGroup.repeatedValues]; + for (const item of allItems) { + const { fieldName, fieldValue } = item; + groupFilter.push({ term: { [fieldName]: fieldValue } }); } } diff --git a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx index 4b8ad8a8919617..e84f50b02711c3 100644 --- a/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx +++ b/x-pack/plugins/aiops/public/components/explain_log_rate_spikes/explain_log_rate_spikes_analysis.tsx @@ -25,6 +25,7 @@ import type { WindowParameters } from '@kbn/aiops-utils'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { Query } from '@kbn/es-query'; +import type { FieldValuePair } from '@kbn/ml-agg-utils'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; import { initialState, streamReducer } from '../../../common/api/stream_reducer'; @@ -163,15 +164,15 @@ export const ExplainLogRateSpikesAnalysis: FC const sortedGroup = group.sort((a, b) => a.fieldName > b.fieldName ? 1 : b.fieldName > a.fieldName ? -1 : 0 ); - const dedupedGroup: Record = {}; - const repeatedValues: Record = {}; + const dedupedGroup: FieldValuePair[] = []; + const repeatedValues: FieldValuePair[] = []; sortedGroup.forEach((pair) => { const { fieldName, fieldValue } = pair; if (pair.duplicate === false) { - dedupedGroup[fieldName] = fieldValue; + dedupedGroup.push({ fieldName, fieldValue }); } else { - repeatedValues[fieldName] = fieldValue; + repeatedValues.push({ fieldName, fieldValue }); } }); @@ -197,7 +198,7 @@ export const ExplainLogRateSpikesAnalysis: FC const showSpikeAnalysisTable = data?.changePoints.length > 0; const groupItemCount = groupTableItems.reduce((p, c) => { - return p + Object.keys(c.group).length; + return p + c.group.length; }, 0); const foundGroups = groupTableItems.length > 0 && groupItemCount > 0; diff --git a/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table_groups.tsx b/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table_groups.tsx index 7f628a7dfaa665..25518598537714 100644 --- a/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table_groups.tsx +++ b/x-pack/plugins/aiops/public/components/spike_analysis_table/spike_analysis_table_groups.tsx @@ -27,7 +27,7 @@ import { import { i18n } from '@kbn/i18n'; import { escapeKuery } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { ChangePoint } from '@kbn/ml-agg-utils'; +import type { ChangePoint, FieldValuePair } from '@kbn/ml-agg-utils'; import { SEARCH_QUERY_LANGUAGE } from '../../application/utils/search_utils'; import { useAiopsAppContext } from '../../hooks/use_aiops_app_context'; @@ -58,8 +58,8 @@ export interface GroupTableItem { id: string; docCount: number; pValue: number | null; - group: Record; - repeatedValues: Record; + group: FieldValuePair[]; + repeatedValues: FieldValuePair[]; histogram: ChangePoint['histogram']; } @@ -99,23 +99,22 @@ export const SpikeAnalysisGroupsTable: FC = ({ const { group, repeatedValues } = item; const expandedTableItems = []; - const fullGroup = { ...group, ...repeatedValues }; - - for (const fieldName in fullGroup) { - if (fullGroup.hasOwnProperty(fieldName)) { - const fieldValue = fullGroup[fieldName]; - expandedTableItems.push({ - fieldName: `${fieldName}`, - fieldValue: `${fullGroup[fieldName]}`, - ...(changePoints.find( - (changePoint) => - (changePoint.fieldName === fieldName || - changePoint.fieldName === `${fieldName}.keyword`) && - (changePoint.fieldValue === fieldValue || - changePoint.fieldValue === `${fieldValue}.keyword`) - ) ?? {}), - }); - } + const fullGroup: FieldValuePair[] = [...group, ...repeatedValues]; + + for (const fullGroupItem of fullGroup) { + const { fieldName, fieldValue } = fullGroupItem; + + expandedTableItems.push({ + ...(changePoints.find( + (changePoint) => + (changePoint.fieldName === fieldName || + changePoint.fieldName === `${fieldName}.keyword`) && + (changePoint.fieldValue === fieldValue || + changePoint.fieldValue === `${fieldValue}.keyword`) + ) ?? {}), + fieldName: `${fieldName}`, + fieldValue: `${fieldValue}`, + }); } itemIdToExpandedRowMapValues[item.id] = ( @@ -178,12 +177,12 @@ export const SpikeAnalysisGroupsTable: FC = ({ query: { language: SEARCH_QUERY_LANGUAGE.KUERY, query: [ - ...Object.entries(groupTableItem.group).map( - ([fieldName, fieldValue]) => + ...groupTableItem.group.map( + ({ fieldName, fieldValue }) => `${escapeKuery(fieldName)}:${escapeKuery(String(fieldValue))}` ), - ...Object.entries(groupTableItem.repeatedValues).map( - ([fieldName, fieldValue]) => + ...groupTableItem.repeatedValues.map( + ({ fieldName, fieldValue }) => `${escapeKuery(fieldName)}:${escapeKuery(String(fieldValue))}` ), ].join(' AND '), @@ -253,27 +252,26 @@ export const SpikeAnalysisGroupsTable: FC = ({ ), render: (_, { group, repeatedValues }) => { const valuesBadges = []; - const hasExtraBadges = Object.keys(group).length > MAX_GROUP_BADGES; - - for (const fieldName in group) { - if (group.hasOwnProperty(fieldName)) { - if (valuesBadges.length === MAX_GROUP_BADGES) break; - valuesBadges.push( - <> - - {`${fieldName}: `} - {`${group[fieldName]}`} - - - - ); - } + const hasExtraBadges = group.length > MAX_GROUP_BADGES; + + for (const groupItem of group) { + const { fieldName, fieldValue } = groupItem; + if (valuesBadges.length === MAX_GROUP_BADGES) break; + valuesBadges.push( + <> + + {`${fieldName}: `} + {`${fieldValue}`} + + + + ); } - if (Object.keys(repeatedValues).length > 0 || hasExtraBadges) { + if (repeatedValues.length > 0 || hasExtraBadges) { valuesBadges.push( <> = ({
    ) : null} - {Object.keys(repeatedValues).length > 0 ? ( + {repeatedValues.length > 0 ? ( ) : null}
    diff --git a/x-pack/plugins/alerting/server/rules_client.mock.ts b/x-pack/plugins/alerting/server/rules_client.mock.ts index cef3381600fa1b..585d3b1c6aa053 100644 --- a/x-pack/plugins/alerting/server/rules_client.mock.ts +++ b/x-pack/plugins/alerting/server/rules_client.mock.ts @@ -12,7 +12,7 @@ export type RulesClientMock = jest.Mocked; const createRulesClientMock = () => { const mocked: RulesClientMock = { - aggregate: jest.fn(), + aggregate: jest.fn().mockReturnValue({ alertExecutionStatus: {}, ruleLastRunOutcome: {} }), create: jest.fn(), get: jest.fn(), resolve: jest.fn(), diff --git a/x-pack/plugins/alerting/server/rules_client/methods/aggregate.ts b/x-pack/plugins/alerting/server/rules_client/methods/aggregate.ts index 79a07b3ebad496..2c9b991618aa12 100644 --- a/x-pack/plugins/alerting/server/rules_client/methods/aggregate.ts +++ b/x-pack/plugins/alerting/server/rules_client/methods/aggregate.ts @@ -22,6 +22,7 @@ export interface AggregateOptions extends IndexType { id: string; }; filter?: string | KueryNode; + maxTags?: number; } interface IndexType { @@ -79,7 +80,9 @@ export interface RuleAggregation { export async function aggregate( context: RulesClientContext, - { options: { fields, filter, ...options } = {} }: { options?: AggregateOptions } = {} + { + options: { fields, filter, maxTags = 50, ...options } = {}, + }: { options?: AggregateOptions } = {} ): Promise { let authorizationTuple; try { @@ -123,7 +126,7 @@ export async function aggregate( terms: { field: 'alert.attributes.muteAll' }, }, tags: { - terms: { field: 'alert.attributes.tags', order: { _key: 'asc' }, size: 50 }, + terms: { field: 'alert.attributes.tags', order: { _key: 'asc' }, size: maxTags }, }, snoozed: { nested: { diff --git a/x-pack/plugins/alerting/server/rules_client/tests/aggregate.test.ts b/x-pack/plugins/alerting/server/rules_client/tests/aggregate.test.ts index 937c027ed04ce5..7a9e7db4348180 100644 --- a/x-pack/plugins/alerting/server/rules_client/tests/aggregate.test.ts +++ b/x-pack/plugins/alerting/server/rules_client/tests/aggregate.test.ts @@ -310,4 +310,38 @@ describe('aggregate()', () => { }) ); }); + + describe('tags number limit', () => { + test('sets to default (50) if it is not provided', async () => { + const rulesClient = new RulesClient(rulesClientParams); + + await rulesClient.aggregate(); + + expect(unsecuredSavedObjectsClient.find.mock.calls[0]).toMatchObject([ + { + aggs: { + tags: { + terms: { size: 50 }, + }, + }, + }, + ]); + }); + + test('sets to the provided value', async () => { + const rulesClient = new RulesClient(rulesClientParams); + + await rulesClient.aggregate({ options: { maxTags: 1000 } }); + + expect(unsecuredSavedObjectsClient.find.mock.calls[0]).toMatchObject([ + { + aggs: { + tags: { + terms: { size: 1000 }, + }, + }, + }, + ]); + }); + }); }); 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 b5aa5d6184c994..af74acc622789f 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 @@ -5,7 +5,14 @@ * 2.0. */ -import React, { ChangeEvent, MouseEvent, FunctionComponent, useCallback, useEffect } from 'react'; +import React, { + ChangeEvent, + MouseEvent, + KeyboardEvent, + FunctionComponent, + useCallback, + useEffect, +} from 'react'; import PropTypes from 'prop-types'; import { EuiFormRow, @@ -80,7 +87,10 @@ export const ExtendedTemplate: FunctionComponent = ({ onValueChange, argV const onCommonFieldChange = useCallback( (field: Fields) => ( - event: ChangeEvent | MouseEvent + event: + | ChangeEvent + | KeyboardEvent + | MouseEvent ) => { onChangeField(field, event.currentTarget.value); }, diff --git a/x-pack/plugins/canvas/public/components/datasource/datasource_component.js b/x-pack/plugins/canvas/public/components/datasource/datasource_component.js index 1a357b6722c719..4b64149d2a8f64 100644 --- a/x-pack/plugins/canvas/public/components/datasource/datasource_component.js +++ b/x-pack/plugins/canvas/public/components/datasource/datasource_component.js @@ -172,6 +172,7 @@ export class DatasourceComponent extends PureComponent { className="canvasDataSource__triggerButton" flush="left" size="s" + data-test-subj="canvasChangeDatasourceButton" > {stateDatasource.displayName} @@ -188,7 +189,14 @@ export class DatasourceComponent extends PureComponent {
    - + {strings.getSaveButtonLabel()} diff --git a/x-pack/plugins/canvas/public/components/datasource/datasource_selector.js b/x-pack/plugins/canvas/public/components/datasource/datasource_selector.js index 6cfa005f92735b..1f27c70d16f633 100644 --- a/x-pack/plugins/canvas/public/components/datasource/datasource_selector.js +++ b/x-pack/plugins/canvas/public/components/datasource/datasource_selector.js @@ -25,6 +25,7 @@ export const DatasourceSelector = ({ onSelect, datasources, current }) => ( isSelected: d.name === current ? true : false, onClick: () => onSelect(d.name), }} + data-test-subj={`canvasDatasourceCard__${d.name}`} /> ))}
    diff --git a/x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx b/x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx index 182c4607486711..4539b1f7274fcd 100644 --- a/x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx +++ b/x-pack/plugins/canvas/public/components/es_data_view_select/es_data_view_select.component.tsx @@ -36,7 +36,11 @@ export const ESDataViewSelect: React.FunctionComponent = const selectedOption = selectedDataView ? { value: selectedDataView.title, label: selectedDataView.name || selectedDataView.title } : { value, label: value }; - const options = dataViews.map(({ name, title }) => ({ value: title, label: name || title })); + const options = dataViews.map(({ name, title }) => ({ + value: title, + label: name || title, + 'data-test-subj': `canvasDataViewSelect__${name || title}`, + })); return ( = isClearable={false} onCreateOption={(input) => onChange(input || defaultOption.value)} compressed + data-test-subj="canvasDataViewSelect" /> ); }; diff --git a/x-pack/plugins/canvas/public/components/sidebar/element_settings/element_settings.component.tsx b/x-pack/plugins/canvas/public/components/sidebar/element_settings/element_settings.component.tsx index 6f1fabf26fecc0..5d51d8a56dcb84 100644 --- a/x-pack/plugins/canvas/public/components/sidebar/element_settings/element_settings.component.tsx +++ b/x-pack/plugins/canvas/public/components/sidebar/element_settings/element_settings.component.tsx @@ -55,6 +55,7 @@ export const ElementSettings: FunctionComponent = ({ element }) => { ), + 'data-test-subj': 'canvasSidebarFiltersTab', }; return [ @@ -68,6 +69,7 @@ export const ElementSettings: FunctionComponent = ({ element }) => { ), + 'data-test-subj': 'canvasSidebarDisplayTab', }, { id: 'data', @@ -77,6 +79,7 @@ export const ElementSettings: FunctionComponent = ({ element }) => { ), + 'data-test-subj': 'canvasSidebarDataTab', }, ...(filtersTab ? [filtersTab] : []), ]; @@ -93,6 +96,7 @@ export const ElementSettings: FunctionComponent = ({ element }) => { key={tab.id} onClick={() => onSelectedTabChanged(tab.id)} isSelected={tab.id === selectedTab} + data-test-subj={tab['data-test-subj']} > {tab.name} diff --git a/x-pack/plugins/canvas/public/components/workpad_header/element_menu/element_menu.component.tsx b/x-pack/plugins/canvas/public/components/workpad_header/element_menu/element_menu.component.tsx index d45b723dd53cd6..784c040ee61741 100644 --- a/x-pack/plugins/canvas/public/components/workpad_header/element_menu/element_menu.component.tsx +++ b/x-pack/plugins/canvas/public/components/workpad_header/element_menu/element_menu.component.tsx @@ -146,6 +146,7 @@ export const ElementMenu: FunctionComponent = ({ elements, addElement }) addElement(element); closePopover(); }, + 'data-test-subj': `canvasAddElementMenu__${element.name}`, }); const elementListToMenuItems = (elementList: ElementSpec[]) => { @@ -161,6 +162,7 @@ export const ElementMenu: FunctionComponent = ({ elements, addElement }) title: name, items: elementList.map(elementToMenuItem), }, + 'data-test-subj': `canvasAddElementMenu__${name}`, }; } diff --git a/x-pack/plugins/cloud_defend/.i18nrc.json b/x-pack/plugins/cloud_defend/.i18nrc.json new file mode 100755 index 00000000000000..c1b9cf0f87f0c2 --- /dev/null +++ b/x-pack/plugins/cloud_defend/.i18nrc.json @@ -0,0 +1,7 @@ +{ + "prefix": "cloudDefend", + "paths": { + "cloudDefend": "." + }, + "translations": ["translations/ja-JP.json"] +} diff --git a/x-pack/plugins/cloud_defend/README.md b/x-pack/plugins/cloud_defend/README.md new file mode 100755 index 00000000000000..c0175af9cc2a6e --- /dev/null +++ b/x-pack/plugins/cloud_defend/README.md @@ -0,0 +1,48 @@ +# Cloud Defend (for containers) + +This plugin currently only exists to provide custom fleet policy UX for a set of new BPF LSM features. The first feature being container "drift prevention". + +Drift prevention is a way to block when executables are created or modified. Our agent service detects these events, and applies a set of selectors and responses configured to either block, alert or both. + +## Example configuration +``` +selectors: + # default selector (user can modify or remove if they want) + - name: default + operation: [createExecutable, modifyExecutable, execMemFd] + + # example custom selector + - name: nginxOnly + containerImageName: + - nginx + + # example selector used for exclude + - name: excludeCustomNginxBuild + containerImageTag: + - staging + +# responses are evaluated from top to bottom +# only the first response with a match will run its actions +responses: + - match: [nginxOnly] + exclude: [excludeCustomNginxBuild] + actions: [alert, block] + + # default response + # delete this if no default response needed + - match: [default] + actions: [alert] +``` + +--- + +## Development + +## pre commit checks + +``` +node scripts/type_check.js --project x-pack/plugins/cloud_defend/tsconfig.json +yarn test:jest x-pack/plugins/cloud_defend +``` + +See the [kibana contributing guide](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md) for instructions setting up your development environment. diff --git a/x-pack/plugins/cloud_defend/common/constants.ts b/x-pack/plugins/cloud_defend/common/constants.ts new file mode 100755 index 00000000000000..860f3d4adffea1 --- /dev/null +++ b/x-pack/plugins/cloud_defend/common/constants.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. + */ + +export const PLUGIN_ID = 'cloudDefend'; +export const PLUGIN_NAME = 'cloudDefend'; +export const INTEGRATION_PACKAGE_NAME = 'cloud_defend'; +export const INPUT_CONTROL = 'cloud_defend/control'; +export const ALERTS_DATASET = 'cloud_defend.alerts'; diff --git a/x-pack/plugins/cloud_defend/jest.config.js b/x-pack/plugins/cloud_defend/jest.config.js new file mode 100644 index 00000000000000..144b2f1ad9e19c --- /dev/null +++ b/x-pack/plugins/cloud_defend/jest.config.js @@ -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. + */ + +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + preset: '@kbn/test', + rootDir: '../../..', + roots: ['/x-pack/plugins/cloud_defend'], + coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/cloud_defend', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/plugins/cloud_defend/{common,public,server}/**/*.{ts,tsx}', + ], +}; diff --git a/x-pack/plugins/cloud_defend/kibana.json b/x-pack/plugins/cloud_defend/kibana.json new file mode 100755 index 00000000000000..af91d3eec34a0c --- /dev/null +++ b/x-pack/plugins/cloud_defend/kibana.json @@ -0,0 +1,14 @@ +{ + "id": "cloudDefend", + "version": "1.0.0", + "kibanaVersion": "kibana", + "owner": { + "name": "Cloud Native Integrations", + "githubTeam": "sec-cloudnative-integrations" + }, + "description": "Defend for Containers", + "server": false, + "ui": true, + "requiredPlugins": ["fleet", "kibanaReact"], + "optionalPlugins": [] +} diff --git a/x-pack/plugins/cloud_defend/public/common/utils.ts b/x-pack/plugins/cloud_defend/public/common/utils.ts new file mode 100644 index 00000000000000..7f2ee09ad3e07d --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/common/utils.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 { NewPackagePolicy } from '@kbn/fleet-plugin/public'; + +export function getInputFromPolicy(policy: NewPackagePolicy, inputId: string) { + return policy.inputs.find((input) => input.type === inputId); +} diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/__mocks__/resizeobserver.js b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/__mocks__/resizeobserver.js new file mode 100644 index 00000000000000..489a06a024c711 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/__mocks__/resizeobserver.js @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +class ResizeObserver { + observe() { + // do nothing + } + unobserve() { + // do nothing + } + disconnect() { + // do nothing + } +} + +window.ResizeObserver = ResizeObserver; +export default ResizeObserver; diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/__mocks__/worker.js b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/__mocks__/worker.js new file mode 100644 index 00000000000000..0db713b040c02f --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/__mocks__/worker.js @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +class Worker { + constructor(stringUrl) { + this.url = stringUrl; + this.onmessage = () => {}; + } + + postMessage(msg) { + this.onmessage(msg); + } + + terminate() {} +} + +window.Worker = Worker; +export default Worker; diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/hooks/use_config_model.ts b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/hooks/use_config_model.ts new file mode 100644 index 00000000000000..58d9a8c9a46c2f --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/hooks/use_config_model.ts @@ -0,0 +1,150 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useMemo } from 'react'; +import yaml from 'js-yaml'; +import { setDiagnosticsOptions } from 'monaco-yaml'; +import { monaco } from '@kbn/monaco'; + +const { Uri, editor } = monaco; + +const SCHEMA_URI = 'http://elastic.co/cloud_defend.yaml'; +const modelUri = Uri.parse(SCHEMA_URI); + +export const useConfigModel = (configuration: string) => { + const json = useMemo(() => { + try { + return yaml.load(configuration); + } catch { + return { selectors: [] }; + } + }, [configuration]); + + return useMemo(() => { + const selectorNames = json?.selectors?.map((selector: any) => selector.name) || []; + + setDiagnosticsOptions({ + validate: true, + completion: true, + hover: true, + schemas: [ + { + uri: SCHEMA_URI, + fileMatch: [String(modelUri)], + schema: { + type: 'object', + required: ['selectors', 'responses'], + additionalProperties: false, + properties: { + selectors: { + type: 'array', + minItems: 1, + items: { $ref: '#/$defs/selector' }, + }, + responses: { + type: 'array', + minItems: 1, + items: { $ref: '#/$defs/response' }, + }, + }, + $defs: { + selector: { + type: 'object', + required: ['name'], + additionalProperties: false, + anyOf: [ + { required: ['operation'] }, + { required: ['containerImageName'] }, + { required: ['containerImageTag'] }, + { required: ['targetFilePath'] }, + { required: ['orchestratorClusterId'] }, + { required: ['orchestratorClusterName'] }, + { required: ['orchestratorNamespace'] }, + { required: ['orchestratorResourceLabel'] }, + { required: ['orchestratorResourceName'] }, + { required: ['orchestratorType'] }, + ], + properties: { + name: { + type: 'string', + }, + operation: { + type: 'array', + minItems: 1, + items: { enum: ['createExecutable', 'modifyExecutable', 'execMemFd'] }, + }, + containerImageName: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + containerImageTag: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + targetFilePath: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + orchestratorClusterId: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + orchestratorClusterName: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + orchestratorNamespace: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + orchestratorResourceLabel: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + orchestratorResourceName: { + type: 'array', + minItems: 1, + items: { type: 'string' }, + }, + orchestratorType: { + type: 'array', + minItems: 1, + items: { enum: ['kubernetes'] }, + }, + }, + }, + response: { + type: 'object', + required: ['match', 'actions'], + additionalProperties: false, + properties: { + match: { type: 'array', minItems: 1, items: { enum: selectorNames } }, + exclude: { type: 'array', items: { enum: selectorNames } }, + actions: { type: 'array', minItems: 1, items: { enum: ['alert', 'block'] } }, + }, + }, + }, + }, + }, + ], + }); + + let model = editor.getModel(modelUri); + + if (model === null) { + model = editor.createModel(configuration, 'yaml', modelUri); + } + + return model; + }, [configuration, json.selectors]); +}; diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/index.test.tsx b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/index.test.tsx new file mode 100644 index 00000000000000..78429546b31f3b --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/index.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 } from '@testing-library/react'; +import '@kbn/kibana-react-plugin/public/code_editor/code_editor.test.helpers'; +import { TestProvider } from '../../test/test_provider'; +import { getCloudDefendNewPolicyMock } from './mocks'; +import { ConfigYamlView } from '.'; +import './__mocks__/worker'; +import './__mocks__/resizeobserver'; + +// @ts-ignore-next +window.Worker = Worker; + +describe('', () => { + beforeAll(() => { + Object.defineProperty(window, 'matchMedia', { + writable: true, + value: jest.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: jest.fn(), // Deprecated + removeListener: jest.fn(), // Deprecated + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + })), + }); + }); + + const onChange = jest.fn(); + + const WrappedComponent = ({ policy = getCloudDefendNewPolicyMock() }) => { + return ( + + ; + + ); + }; + + beforeEach(() => { + onChange.mockClear(); + }); + + it('renders a checkbox to toggle BPF/LSM control mechanism', () => { + const { getByTestId } = render(); + const input = getByTestId('cloud-defend-control-toggle') as HTMLInputElement; + expect(input).toBeInTheDocument(); + expect(input).toBeEnabled(); + }); + + it('renders a yaml editor', () => { + const { getByTestId } = render(); + const el = getByTestId('monacoEditorTextarea') as HTMLTextAreaElement; + expect(el).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/index.tsx b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/index.tsx new file mode 100644 index 00000000000000..21bee7282b17af --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/index.tsx @@ -0,0 +1,124 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useCallback, useEffect, useState } from 'react'; +import { EuiSwitch, EuiSpacer, EuiText, EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui'; +import { CodeEditor, YamlLang } from '@kbn/kibana-react-plugin/public'; +import { NewPackagePolicy } from '@kbn/fleet-plugin/public'; +import { monaco } from '@kbn/monaco'; +import { INPUT_CONTROL } from '../../../common/constants'; +import { useStyles } from './styles'; +import { useConfigModel } from './hooks/use_config_model'; +import { getInputFromPolicy } from '../../common/utils'; +import * as i18n from './translations'; + +const { editor } = monaco; + +interface OnChangeDeps { + isValid: boolean; + updatedPolicy: NewPackagePolicy; +} + +interface ConfigYamlViewDeps { + policy: NewPackagePolicy; + onChange(opts: OnChangeDeps): void; +} + +interface ConfigError { + line: number; + message: string; +} + +export const ConfigYamlView = ({ policy, onChange }: ConfigYamlViewDeps) => { + const styles = useStyles(); + const [errors, setErrors] = useState([]); + const input = getInputFromPolicy(policy, INPUT_CONTROL); + const configuration = input?.vars?.configuration?.value || ''; + const currentModel = useConfigModel(configuration); + const controlEnabled = !!input?.enabled; + + useEffect(() => { + const listener = editor.onDidChangeMarkers(([resource]) => { + const markers = editor.getModelMarkers({ resource }); + const errs = markers.map((marker) => { + const error: ConfigError = { + line: marker.startLineNumber, + message: marker.message, + }; + + return error; + }); + + onChange({ isValid: errs.length === 0, updatedPolicy: policy }); + setErrors(errs); + }); + + return () => { + listener.dispose(); + }; + }, [onChange, policy]); + + const onYamlChange = useCallback( + (value) => { + if (input?.vars) { + input.vars.configuration.value = value; + onChange({ isValid: errors.length === 0, updatedPolicy: policy }); + } + }, + [errors.length, input, onChange, policy] + ); + + const onToggleEnabled = useCallback( + (e) => { + if (input) { + input.enabled = e.target.checked; + onChange({ isValid: errors.length === 0, updatedPolicy: policy }); + } + }, + [errors.length, input, onChange, policy] + ); + + return ( + + + + + + {i18n.enableControlHelp} + + + {controlEnabled && ( + + +

    {i18n.controlYaml}

    +
    + + + {i18n.controlYamlHelp} + + +
    + +
    + +
    + )} +
    + ); +}; diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/mocks.ts b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/mocks.ts new file mode 100644 index 00000000000000..7e1d30d6dba227 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/mocks.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { NewPackagePolicy } from '@kbn/fleet-plugin/public'; +import type { PackagePolicy } from '@kbn/fleet-plugin/common'; +import { INTEGRATION_PACKAGE_NAME, INPUT_CONTROL, ALERTS_DATASET } from '../../../common/constants'; + +const MOCK_YAML_CONFIGURATION = ` +selectors: + # default selector (user can modify or remove if they want) + - name: default + operation: [createExecutable, modifyExecutable, execMemFd] + + # example custom selector + - name: nginxOnly + containerImageName: + - nginx + + # example selector used for exclude + - name: excludeCustomNginxBuild + containerImageTag: + - staging + +# responses are evaluated from top to bottom +# only the first response with a match will run its actions +responses: + - match: [nginxOnly] + exclude: [excludeCustomNginxBuild] + actions: [alert, block] + + # default response + # delete this if no default response needed + - match: [default] + actions: [alert] +`; + +export const getCloudDefendNewPolicyMock = (): NewPackagePolicy => ({ + name: 'some-cloud_defend-policy', + description: '', + namespace: 'default', + policy_id: '', + enabled: true, + inputs: [ + { + type: INPUT_CONTROL, + policy_template: INTEGRATION_PACKAGE_NAME, + enabled: true, + vars: { + configuration: { + type: 'yaml', + value: MOCK_YAML_CONFIGURATION, + }, + }, + streams: [ + { + enabled: true, + data_stream: { + type: 'logs', + dataset: ALERTS_DATASET, + }, + }, + ], + }, + ], + package: { + name: 'cloud_defend', + title: 'Kubernetes Security Posture Management', + version: '0.0.21', + }, +}); + +export const getCloudDefendPolicyMock = (): PackagePolicy => ({ + id: 'c6d16e42-c32d-4dce-8a88-113cfe276ad1', + version: 'abcd', + revision: 1, + updated_at: '2020-06-25T16:03:38.159292', + updated_by: 'kibana', + created_at: '2020-06-25T16:03:38.159292', + created_by: 'kibana', + name: 'some-cloud_defend-policy', + description: '', + namespace: 'default', + policy_id: '', + enabled: true, + inputs: [ + { + type: INPUT_CONTROL, + policy_template: INTEGRATION_PACKAGE_NAME, + enabled: true, + vars: { + configuration: { + type: 'yaml', + value: MOCK_YAML_CONFIGURATION, + }, + }, + streams: [ + { + id: '1234', + enabled: true, + data_stream: { + type: 'logs', + dataset: ALERTS_DATASET, + }, + }, + ], + }, + ], + package: { + name: 'cloud_defend', + title: 'Kubernetes Security Posture Management', + version: '0.0.21', + }, +}); diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/styles.ts b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/styles.ts new file mode 100644 index 00000000000000..0d49630b95d661 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/styles.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 { useMemo } from 'react'; +import { CSSObject } from '@emotion/react'; + +export const useStyles = () => { + return useMemo(() => { + const yamlEditor: CSSObject = { + height: '400px', + }; + + return { yamlEditor }; + }, []); +}; diff --git a/x-pack/plugins/cloud_defend/public/components/config_yaml_view/translations.ts b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/translations.ts new file mode 100644 index 00000000000000..f7765910d38a58 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/config_yaml_view/translations.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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'; + +export const enableControl = i18n.translate('xpack.cloudDefend.enableControl', { + defaultMessage: 'Enable BPF/LSM controls', +}); + +export const enableControlHelp = i18n.translate('xpack.cloudDefend.enableControlHelp', { + defaultMessage: + 'Enables BPF/LSM control mechanism, for use with FIM and container drift prevention.', +}); + +export const controlYaml = i18n.translate('xpack.cloudDefend.controlYaml', { + defaultMessage: 'Configuration yaml', +}); + +export const controlYamlHelp = i18n.translate('xpack.cloudDefend.controlYamlHelp', { + defaultMessage: + 'Configure BPF/LSM controls by creating selectors, and responses below. To learn more click ', +}); diff --git a/x-pack/plugins/cloud_defend/public/components/fleet_extensions/policy_extension_create.tsx b/x-pack/plugins/cloud_defend/public/components/fleet_extensions/policy_extension_create.tsx new file mode 100644 index 00000000000000..4d46204d40efff --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/fleet_extensions/policy_extension_create.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo } from 'react'; +import type { PackagePolicyCreateExtensionComponentProps } from '@kbn/fleet-plugin/public'; +import { ConfigYamlView } from '../config_yaml_view'; + +export const CloudDefendCreatePolicyExtension = memo( + ({ newPolicy, onChange }) => { + return ; + } +); + +CloudDefendCreatePolicyExtension.displayName = 'CloudDefendCreatePolicyExtension'; + +// eslint-disable-next-line import/no-default-export +export { CloudDefendCreatePolicyExtension as default }; diff --git a/x-pack/plugins/cloud_defend/public/components/fleet_extensions/policy_extension_edit.tsx b/x-pack/plugins/cloud_defend/public/components/fleet_extensions/policy_extension_edit.tsx new file mode 100644 index 00000000000000..c1e1b6c755d53c --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/components/fleet_extensions/policy_extension_edit.tsx @@ -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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { memo } from 'react'; +import type { PackagePolicyEditExtensionComponentProps } from '@kbn/fleet-plugin/public'; +import { ConfigYamlView } from '../config_yaml_view'; + +export const CloudDefendEditPolicyExtension = memo( + ({ newPolicy, onChange }) => { + return ; + } +); + +CloudDefendEditPolicyExtension.displayName = 'CloudDefendEditPolicyExtension'; + +// eslint-disable-next-line import/no-default-export +export { CloudDefendEditPolicyExtension as default }; diff --git a/x-pack/plugins/cloud_defend/public/index.ts b/x-pack/plugins/cloud_defend/public/index.ts new file mode 100755 index 00000000000000..fd8099aa2ed11d --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { CloudDefendPlugin } from './plugin'; + +// This exports static code and TypeScript types, +// as well as, Kibana Platform `plugin()` initializer. +export function plugin() { + return new CloudDefendPlugin(); +} +export type { CloudDefendPluginSetup, CloudDefendPluginStart } from './types'; diff --git a/x-pack/plugins/cloud_defend/public/plugin.ts b/x-pack/plugins/cloud_defend/public/plugin.ts new file mode 100755 index 00000000000000..5bbb1215e22708 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/plugin.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 { lazy } from 'react'; +import { CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; +import { + CloudDefendPluginSetup, + CloudDefendPluginStart, + CloudDefendPluginStartDeps, +} from './types'; +import { INTEGRATION_PACKAGE_NAME } from '../common/constants'; + +const LazyEditPolicy = lazy(() => import('./components/fleet_extensions/policy_extension_edit')); +const LazyCreatePolicy = lazy( + () => import('./components/fleet_extensions/policy_extension_create') +); + +export class CloudDefendPlugin implements Plugin { + public setup(core: CoreSetup): CloudDefendPluginSetup { + // Return methods that should be available to other plugins + return {}; + } + + public start(core: CoreStart, plugins: CloudDefendPluginStartDeps): CloudDefendPluginStart { + plugins.fleet.registerExtension({ + package: INTEGRATION_PACKAGE_NAME, + view: 'package-policy-create', + Component: LazyCreatePolicy, + }); + + plugins.fleet.registerExtension({ + package: INTEGRATION_PACKAGE_NAME, + view: 'package-policy-edit', + Component: LazyEditPolicy, + }); + + return {}; + } + + public stop() {} +} diff --git a/x-pack/plugins/cloud_defend/public/test/test_provider.tsx b/x-pack/plugins/cloud_defend/public/test/test_provider.tsx new file mode 100755 index 00000000000000..8f692a7f381ec5 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/test/test_provider.tsx @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { AppMountParameters, CoreStart } from '@kbn/core/public'; +import React, { useMemo } from 'react'; +import { I18nProvider } from '@kbn/i18n-react'; +import { Router, Switch, Route } from 'react-router-dom'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { coreMock } from '@kbn/core/public/mocks'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { fleetMock } from '@kbn/fleet-plugin/public/mocks'; +import type { CloudDefendPluginStartDeps } from '../types'; + +interface CspAppDeps { + core: CoreStart; + deps: CloudDefendPluginStartDeps; + params: AppMountParameters; +} + +export const TestProvider: React.FC> = ({ + core = coreMock.createStart(), + deps = { + data: dataPluginMock.createStartContract(), + fleet: fleetMock.createStartMock(), + }, + params = coreMock.createAppMountParameters(), + children, +} = {}) => { + const queryClient = useMemo(() => new QueryClient(), []); + return ( + + + + + + <>{children}} /> + + + + + + ); +}; diff --git a/x-pack/plugins/cloud_defend/public/test/utils.ts b/x-pack/plugins/cloud_defend/public/test/utils.ts new file mode 100644 index 00000000000000..c523c102a7bd58 --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/test/utils.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 { screen } from '@testing-library/react'; + +export const expectIdsInDoc = ({ be = [], notToBe = [] }: { be: string[]; notToBe?: string[] }) => { + be.forEach((testId) => { + expect(screen.getByTestId(testId)).toBeInTheDocument(); + }); + notToBe.forEach((testId) => { + expect(screen.queryByTestId(testId)).not.toBeInTheDocument(); + }); +}; diff --git a/x-pack/plugins/cloud_defend/public/types.ts b/x-pack/plugins/cloud_defend/public/types.ts new file mode 100755 index 00000000000000..afdc76cb852c9e --- /dev/null +++ b/x-pack/plugins/cloud_defend/public/types.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FleetSetup, FleetStart } from '@kbn/fleet-plugin/public'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CloudDefendPluginSetup {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CloudDefendPluginStart {} + +export interface CloudDefendPluginSetupDeps { + fleet: FleetSetup; +} +export interface CloudDefendPluginStartDeps { + fleet: FleetStart; +} diff --git a/x-pack/plugins/cloud_defend/tsconfig.json b/x-pack/plugins/cloud_defend/tsconfig.json new file mode 100755 index 00000000000000..e40b3d8e9c273e --- /dev/null +++ b/x-pack/plugins/cloud_defend/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true + }, + "include": [ + "common/**/*", + "public/**/*", + "../../../typings/**/*" + ], + "kbn_references": [ + { "path": "../../../src/core/tsconfig.json" }, + { "path": "../../../x-pack/plugins/fleet/tsconfig.json" } + ] +} diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.test.tsx index 49dc7223e54e6c..0a821deff90c96 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.test.tsx @@ -73,7 +73,7 @@ describe('GroupSourcePrioritization', () => { const wrapper = shallow(); const slider = wrapper.find(EuiRange).first(); - slider.simulate('change', { target: { value: 2 } }); + slider.simulate('change', { currentTarget: { value: 2 } }); expect(updatePriority).toHaveBeenCalledWith('123', 2); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.tsx index 615e7b22b343f7..f72d4825aa0400 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/groups/components/group_source_prioritization.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { ChangeEvent, MouseEvent } from 'react'; +import React from 'react'; import { useActions, useValues } from 'kea'; @@ -24,6 +24,7 @@ import { EuiTableRow, EuiTableRowCell, } from '@elastic/eui'; +import { _SingleRangeChangeEvent } from '@elastic/eui/src/components/form/range/types'; import { i18n } from '@kbn/i18n'; import { SAVE_BUTTON_LABEL } from '../../../../shared/constants'; @@ -91,10 +92,8 @@ export const GroupSourcePrioritization: React.FC = () => { {SAVE_BUTTON_LABEL} ); - const handleSliderChange = ( - id: string, - e: ChangeEvent | MouseEvent - ) => updatePriority(id, Number((e.target as HTMLInputElement).value)); + const handleSliderChange = (id: string, e: _SingleRangeChangeEvent) => + updatePriority(id, Number(e.currentTarget.value)); const hasSources = contentSources.length > 0; const zeroState = ( @@ -150,9 +149,7 @@ export const GroupSourcePrioritization: React.FC = () => { step={1} showInput value={activeSourcePriorities[id]} - onChange={(e: ChangeEvent | MouseEvent) => - handleSliderChange(id, e) - } + onChange={(e) => handleSliderChange(id, e)} /> diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts index 15e2bf5d80a7b4..3dc25332a848bb 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts @@ -6,7 +6,6 @@ */ import type { ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; -import { isEqual } from 'lodash'; import { decodeCloudId, normalizeHostsForAgents } from '../../../common/services'; import type { FleetConfigType } from '../../config'; @@ -24,6 +23,8 @@ import { } from '../fleet_server_host'; import { agentPolicyService } from '../agent_policy'; +import { isDifferent } from './utils'; + export function getCloudFleetServersHosts() { const cloudSetup = appContextService.getCloud(); if (cloudSetup && cloudSetup.isCloudEnabled && cloudSetup.cloudId && cloudSetup.deploymentId) { @@ -101,14 +102,15 @@ export async function createOrUpdatePreconfiguredFleetServerHosts( const isCreate = !existingHost; const isUpdateWithNewData = - existingHost && - (!existingHost.is_preconfigured || - existingHost.is_default !== preconfiguredFleetServerHost.is_default || - existingHost.name !== preconfiguredFleetServerHost.name || - !isEqual( - existingHost.host_urls.map(normalizeHostsForAgents), - preconfiguredFleetServerHost.host_urls.map(normalizeHostsForAgents) - )); + (existingHost && + (!existingHost.is_preconfigured || + existingHost.is_default !== preconfiguredFleetServerHost.is_default || + existingHost.name !== preconfiguredFleetServerHost.name || + isDifferent( + existingHost.host_urls.map(normalizeHostsForAgents), + preconfiguredFleetServerHost.host_urls.map(normalizeHostsForAgents) + ))) || + isDifferent(existingHost?.proxy_id, preconfiguredFleetServerHost.proxy_id); if (isCreate) { await createFleetServerHost( diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts index d7f43ce181a429..d51058fcb58e25 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.ts @@ -15,9 +15,10 @@ import type { FleetConfigType } from '../../config'; import { DEFAULT_OUTPUT_ID, DEFAULT_OUTPUT } from '../../constants'; import { outputService } from '../output'; import { agentPolicyService } from '../agent_policy'; - import { appContextService } from '../app_context'; +import { isDifferent } from './utils'; + export function getPreconfiguredOutputFromConfig(config?: FleetConfigType) { const { outputs: outputsOrUndefined } = config; @@ -151,17 +152,6 @@ export async function cleanPreconfiguredOutputs( } } -function isDifferent(val1: any, val2: any) { - if ( - (val1 === null || typeof val1 === 'undefined') && - (val2 === null || typeof val2 === 'undefined') - ) { - return false; - } - - return !isEqual(val1, val2); -} - function isPreconfiguredOutputDifferentFromCurrent( existingOutput: Output, preconfiguredOutput: Partial @@ -187,6 +177,7 @@ function isPreconfiguredOutputDifferentFromCurrent( existingOutput.ca_trusted_fingerprint, preconfiguredOutput.ca_trusted_fingerprint ) || - isDifferent(existingOutput.config_yaml, preconfiguredOutput.config_yaml) + isDifferent(existingOutput.config_yaml, preconfiguredOutput.config_yaml) || + isDifferent(existingOutput.proxy_id, preconfiguredOutput.proxy_id) ); } diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/utils.ts b/x-pack/plugins/fleet/server/services/preconfiguration/utils.ts new file mode 100644 index 00000000000000..442f80c9e22686 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/preconfiguration/utils.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 { isEqual } from 'lodash'; + +export function isDifferent(val1: any, val2: any) { + if ( + (val1 === null || typeof val1 === 'undefined') && + (val2 === null || typeof val2 === 'undefined') + ) { + return false; + } + + return !isEqual(val1, val2); +} diff --git a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts index 13ba525ee420ba..e6b6a40ddb2b36 100644 --- a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts @@ -91,6 +91,7 @@ export const PreconfiguredFleetServerHostsSchema = schema.arrayOf( name: schema.string(), is_default: schema.boolean({ defaultValue: false }), host_urls: schema.arrayOf(schema.string(), { minSize: 1 }), + proxy_id: schema.nullable(schema.string()), }), { defaultValue: [] } ); diff --git a/x-pack/plugins/infra/public/pages/metrics/hosts/components/controls_content.tsx b/x-pack/plugins/infra/public/pages/metrics/hosts/components/controls_content.tsx index 085330abf979ad..d3f2df19e78c55 100644 --- a/x-pack/plugins/infra/public/pages/metrics/hosts/components/controls_content.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/hosts/components/controls_content.tsx @@ -8,8 +8,7 @@ import React, { useEffect, useState } from 'react'; import { ControlGroupContainer, CONTROL_GROUP_TYPE } from '@kbn/controls-plugin/public'; import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { Filter, TimeRange, compareFilters } from '@kbn/es-query'; -import { isEqual } from 'lodash'; +import { Filter, TimeRange } from '@kbn/es-query'; import { LazyControlsRenderer } from './lazy_controls_renderer'; import { useControlPanels } from '../hooks/use_control_panels_url_state'; @@ -44,21 +43,26 @@ export const ControlsContent: React.FC = ({ if (!controlGroup) { return; } - if ( - !isEqual(controlGroup.getInput().timeRange, timeRange) || - !compareFilters(controlGroup.getInput().filters ?? [], filters) || - !isEqual(controlGroup.getInput().query, query) - ) { - controlGroup.updateInput({ - timeRange, - query, - filters, + const filtersSubscription = controlGroup.onFiltersPublished$.subscribe((newFilters) => { + setPanelFilters([...newFilters]); + }); + const inputSubscription = controlGroup + .getInput$() + .subscribe(({ panels, filters: currentFilters }) => { + setControlPanels(panels); + if (currentFilters?.length === 0) { + setPanelFilters([]); + } }); - } - }, [query, filters, controlGroup, timeRange]); + return () => { + filtersSubscription.unsubscribe(); + inputSubscription.unsubscribe(); + }; + }, [controlGroup, setControlPanels, setPanelFilters]); return ( ({ id: dataViewId, type: CONTROL_GROUP_TYPE, @@ -74,16 +78,9 @@ export const ControlsContent: React.FC = ({ })} onLoadComplete={(newControlGroup) => { setControlGroup(newControlGroup); - newControlGroup.onFiltersPublished$.subscribe((newFilters) => { - setPanelFilters([...newFilters]); - }); - newControlGroup.getInput$().subscribe(({ panels, filters: currentFilters }) => { - setControlPanels(panels); - if (currentFilters?.length === 0) { - setPanelFilters([]); - } - }); }} + query={query} + timeRange={timeRange} /> ); }; diff --git a/x-pack/plugins/infra/public/pages/metrics/settings/input_fields.tsx b/x-pack/plugins/infra/public/pages/metrics/settings/input_fields.tsx index e2380dedaee159..72e71143e2c840 100644 --- a/x-pack/plugins/infra/public/pages/metrics/settings/input_fields.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/settings/input_fields.tsx @@ -56,7 +56,10 @@ export interface InputRangeFieldProps< isInvalid: boolean; name: string; onChange?: ( - evt: React.ChangeEvent | React.MouseEvent, + evt: + | React.ChangeEvent + | React.KeyboardEvent + | React.MouseEvent, isValid: boolean ) => void; value: Value; @@ -81,7 +84,10 @@ export const createInputRangeFieldProps = < isInvalid: errors.length > 0, name, onChange: ( - evt: React.ChangeEvent | React.MouseEvent, + evt: + | React.ChangeEvent + | React.KeyboardEvent + | React.MouseEvent, isValid: boolean ) => onChange(+evt.currentTarget.value, isValid), value, diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/__snapshots__/resolution_editor.test.tsx.snap b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/__snapshots__/resolution_editor.test.tsx.snap index 79be012887af92..dfff4bdd6ca441 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/__snapshots__/resolution_editor.test.tsx.snap +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/__snapshots__/resolution_editor.test.tsx.snap @@ -10,19 +10,12 @@ exports[`should render 3 tick slider when renderAs is HEX 1`] = ` label="Resolution" labelType="label" > - - - - { return resolution ? (resolution as GRID_RESOLUTION) : GRID_RESOLUTION.COARSE; } - _onResolutionChange = (event: ChangeEvent | MouseEvent) => { + _onResolutionChange: EuiRangeProps['onChange'] = (event) => { const resolution = this._sliderValueToResolution(parseInt(event.currentTarget.value, 10)); if (isMvt(this.props.renderAs, resolution)) { const hasUnsupportedMetrics = this.props.metrics.find(isUnsupportedVectorTileMetric); diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/data_mapping/ordinal_data_mapping_popover.tsx b/x-pack/plugins/maps/public/classes/styles/vector/components/data_mapping/ordinal_data_mapping_popover.tsx index 3f3266d399c70e..a614d707d0c839 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/data_mapping/ordinal_data_mapping_popover.tsx +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/data_mapping/ordinal_data_mapping_popover.tsx @@ -6,7 +6,7 @@ */ import _ from 'lodash'; -import React, { ChangeEvent, Fragment, MouseEvent } from 'react'; +import React, { Fragment } from 'react'; import { EuiFormRow, EuiHorizontalRule, @@ -18,6 +18,7 @@ import { EuiText, EuiToolTip, } from '@elastic/eui'; +import type { _SingleRangeChangeEvent } from '@elastic/eui/src/components/form/range/types'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { DEFAULT_SIGMA } from '../../vector_style_defaults'; @@ -95,7 +96,7 @@ export function OrdinalDataMappingPopover(props: Props | MouseEvent) { + function onSigmaChange(event: _SingleRangeChangeEvent) { // @ts-expect-error props.onChange({ fieldMetaOptions: { diff --git a/x-pack/plugins/maps/public/classes/styles/vector/components/size/size_range_selector.tsx b/x-pack/plugins/maps/public/classes/styles/vector/components/size/size_range_selector.tsx index 59bdfa3be59381..bc3b29a7653985 100644 --- a/x-pack/plugins/maps/public/classes/styles/vector/components/size/size_range_selector.tsx +++ b/x-pack/plugins/maps/public/classes/styles/vector/components/size/size_range_selector.tsx @@ -7,7 +7,7 @@ import React from 'react'; import { ValidatedDualRange } from '@kbn/kibana-react-plugin/public'; -import { EuiDualRangeProps } from '@elastic/eui/src/components/form/range/dual_range'; +import { EuiDualRangeProps } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { MIN_SIZE, MAX_SIZE } from '../../vector_style_defaults'; diff --git a/x-pack/plugins/maps/public/components/__snapshots__/validated_range.test.js.snap b/x-pack/plugins/maps/public/components/__snapshots__/validated_range.test.js.snap index cee44b3e6b27cb..dd9b6dcc3a61c1 100644 --- a/x-pack/plugins/maps/public/components/__snapshots__/validated_range.test.js.snap +++ b/x-pack/plugins/maps/public/components/__snapshots__/validated_range.test.js.snap @@ -2,19 +2,10 @@ exports[`Should display error message when value is outside of range 1`] = `
    - @@ -33,37 +24,22 @@ exports[`Should display error message when value is outside of range 1`] = ` `; exports[`Should pass slider props to slider 1`] = ` - `; exports[`Should render slider 1`] = ` - `; diff --git a/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx b/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx index 75e474cc064fcc..a0756e35b4323e 100644 --- a/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx +++ b/x-pack/plugins/maps/public/connected_components/timeslider/timeslider.tsx @@ -31,7 +31,6 @@ export interface Props { export class Timeslider extends Component { private _isMounted: boolean = false; - private _controlGroup?: ControlGroupContainer | undefined; private readonly _subscriptions = new Subscription(); componentWillUnmount() { @@ -39,17 +38,6 @@ export class Timeslider extends Component { this._subscriptions.unsubscribe(); } - componentDidUpdate() { - if ( - this._controlGroup && - !_.isEqual(this._controlGroup.getInput().timeRange, this.props.timeRange) - ) { - this._controlGroup.updateInput({ - timeRange: this.props.timeRange, - }); - } - } - componentDidMount() { this._isMounted = true; } @@ -71,9 +59,8 @@ export class Timeslider extends Component { return; } - this._controlGroup = controlGroup; this._subscriptions.add( - this._controlGroup + controlGroup .getOutput$() .pipe( distinctUntilChanged(({ timeslice: timesliceA }, { timeslice: timesliceB }) => @@ -84,7 +71,7 @@ export class Timeslider extends Component { // use waitForTimesliceToLoad$ observable to wait until next frame loaded // .pipe(first()) waits until the first value is emitted from an observable and then automatically unsubscribes this.props.waitForTimesliceToLoad$.pipe(first()).subscribe(() => { - this._controlGroup!.anyControlOutputConsumerLoading$.next(false); + controlGroup.anyControlOutputConsumerLoading$.next(false); }); this.props.setTimeslice( @@ -105,6 +92,7 @@ export class Timeslider extends Component {
    ); diff --git a/x-pack/plugins/ml/public/application/components/severity_control/severity_control.tsx b/x-pack/plugins/ml/public/application/components/severity_control/severity_control.tsx index de3585ce9f63c7..1ac6fc5ff46deb 100644 --- a/x-pack/plugins/ml/public/application/components/severity_control/severity_control.tsx +++ b/x-pack/plugins/ml/public/application/components/severity_control/severity_control.tsx @@ -54,13 +54,6 @@ export const SeverityControl: FC = React.memo(({ value, o const resultValue = value ?? ANOMALY_THRESHOLD.LOW; - const onChangeCallback = ( - e: React.ChangeEvent | React.MouseEvent - ) => { - // @ts-ignore Property 'value' does not exist on type 'EventTarget' | (EventTarget & HTMLInputElement) - onChange(Number(e.target.value)); - }; - const ticks = new Array(5).fill(null).map((x, i) => { const v = i * 25; return { value: v, label: v }; @@ -76,7 +69,7 @@ export const SeverityControl: FC = React.memo(({ value, o compressed prepend={label} value={resultValue} - onChange={onChangeCallback} + onChange={(e) => onChange(Number(e.target.value))} min={ANOMALY_THRESHOLD.LOW} max={MAX_ANOMALY_SCORE} /> @@ -88,7 +81,7 @@ export const SeverityControl: FC = React.memo(({ value, o min={ANOMALY_THRESHOLD.LOW} max={MAX_ANOMALY_SCORE} value={resultValue} - onChange={onChangeCallback} + onChange={(e) => onChange(Number(e.currentTarget.value))} aria-label={i18n.translate('xpack.ml.severitySelector.formControlAriaLabel', { defaultMessage: 'Select severity threshold', })} diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx index 724aed7b082949..052c4e64272c9a 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx @@ -285,9 +285,7 @@ export const ConfigurationStepForm: FC = ({ const formStateUpdated = { ...(shouldUpdateModelMemoryLimit ? { modelMemoryLimit: expectedMemory } : {}), - ...(depVarIsRuntimeField || jobTypeChanged || depVarNotIncluded - ? { includes: formToUse.includes } - : {}), + ...(depVarIsRuntimeField || depVarNotIncluded ? { includes: formToUse.includes } : {}), requiredFieldsError: !hasRequiredFields ? requiredFieldsErrorText : undefined, }; diff --git a/x-pack/plugins/osquery/public/packs/form/shards/shards_percentage_field.tsx b/x-pack/plugins/osquery/public/packs/form/shards/shards_percentage_field.tsx index 61a98219f3c380..4afb27570689ef 100644 --- a/x-pack/plugins/osquery/public/packs/form/shards/shards_percentage_field.tsx +++ b/x-pack/plugins/osquery/public/packs/form/shards/shards_percentage_field.tsx @@ -7,6 +7,7 @@ import React, { useCallback, useMemo } from 'react'; import { useController } from 'react-hook-form'; import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiRange } from '@elastic/eui'; +import type { EuiRangeProps } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import type { ShardsFormReturn } from './shards_form'; @@ -32,8 +33,8 @@ const ShardsPercentageFieldComponent = ({ defaultValue: 100, }); - const handleChange = useCallback( - (e: React.ChangeEvent | React.MouseEvent) => { + const handleChange: EuiRangeProps['onChange'] = useCallback( + (e) => { const numberValue = (e.target as { valueAsNumber: number }).valueAsNumber ? (e.target as { valueAsNumber: number }).valueAsNumber : 0; diff --git a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap index 8a5add971f7f54..ad48ecadd165f1 100644 --- a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap +++ b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; +exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; -exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; +exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

    Some Title

    Some Body
    Action#1
    Action#2
    "`; diff --git a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap index 7895382d4f654a..015467a7c8da58 100644 --- a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts
    "`; +exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts"`; diff --git a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap index a19757b3f52b27..604ca460ac67fb 100644 --- a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts"`; +exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts"`; 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 3c6ff01aea9207..1aad389855c10a 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 @@ -34,234 +34,6 @@ function setup() { return { actions, auditLogger, errors, checkPrivileges, securityExtension }; } -describe('#checkAuthorization', () => { - // 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 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 checkPrivileges with expected privilege actions and namespaces', async () => { - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error - - await securityExtension.checkAuthorization({ types, spaces, actions }); - 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', - 'login:', - ], - [...spaces] - ); - }); - - test('throws an error when `types` is empty', async () => { - const { securityExtension, checkPrivileges } = setup(); - - await expect( - securityExtension.checkAuthorization({ types: new Set(), spaces, actions }) - ).rejects.toThrowError('No types specified for authorization check'); - expect(checkPrivileges).not.toHaveBeenCalled(); - }); - - test('throws an error when `spaces` is empty', async () => { - const { securityExtension, checkPrivileges } = setup(); - - await expect( - securityExtension.checkAuthorization({ types, spaces: new Set(), actions }) - ).rejects.toThrowError('No spaces specified for authorization check'); - expect(checkPrivileges).not.toHaveBeenCalled(); - }); - - test('throws an error when `actions` is empty', async () => { - const { securityExtension, checkPrivileges } = setup(); - - await expect( - securityExtension.checkAuthorization({ types, spaces, actions: new Set([]) }) - ).rejects.toThrowError('No actions specified for authorization check'); - expect(checkPrivileges).not.toHaveBeenCalled(); - }); - - test('throws an error when privilege check fails', async () => { - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockRejectedValue(new Error('Oh no!')); - - await expect( - securityExtension.checkAuthorization({ types, spaces, actions }) - ).rejects.toThrowError('Oh no!'); - }); - - test('fully authorized', async () => { - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); - - const result = await securityExtension.checkAuthorization({ types, spaces, actions }); - expect(result).toEqual({ - status: 'fully_authorized', - typeMap: new Map() - .set('a', { - foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, - bar: { 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'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }) - .set('c', { - foo: { authorizedSpaces: ['x', 'y'] }, - bar: { authorizedSpaces: ['x', 'y'] }, - ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, - }), - }); - }); - - test('partially authorized', async () => { - const { securityExtension, checkPrivileges } = 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 '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 }, - { 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: '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) - ], - }, - } as CheckPrivilegesResponse); - - const result = await securityExtension.checkAuthorization({ types, spaces, actions }); - expect(result).toEqual({ - status: 'partially_authorized', - typeMap: new Map() - .set('a', { - foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, - ['login:']: { authorizedSpaces: ['x', 'y'] }, - }) - .set('b', { - foo: { authorizedSpaces: ['x', 'y'] }, - ['login:']: { authorizedSpaces: ['x', 'y'] }, - }) - .set('c', { - foo: { authorizedSpaces: ['x'] }, - bar: { authorizedSpaces: ['x'] }, - ['login:']: { authorizedSpaces: ['x', 'y'] }, - }), - }); - }); - - test('unauthorized', async () => { - const { securityExtension, checkPrivileges } = 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 }, - { 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: '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) - ], - }, - } as CheckPrivilegesResponse); - - const result = await securityExtension.checkAuthorization({ types, spaces, actions }); - 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'. - status: 'unauthorized', - typeMap: new Map() - .set('a', { ['login:']: { authorizedSpaces: ['y'] } }) - .set('b', { ['login:']: { authorizedSpaces: ['y'] } }) - .set('c', { ['login:']: { authorizedSpaces: ['y'] } }), - }); - }); - - test('conflicting privilege failsafe', async () => { - const conflictingPrivilegesResponse = { - 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 }, - ], - }, - } as CheckPrivilegesResponse; - - const { securityExtension, checkPrivileges } = setup(); - checkPrivileges.mockResolvedValue(conflictingPrivilegesResponse); - - const result = await securityExtension.checkAuthorization({ types, spaces, actions }); - expect(result).toEqual({ - status: 'fully_authorized', - typeMap: new Map().set('b', { - foo: { authorizedSpaces: ['y'] }, // should NOT be authorized for conflicted privilege - }), - }); - }); -}); - describe('#enforceAuthorization', () => { test('fully authorized', () => { const { securityExtension } = setup(); @@ -367,6 +139,335 @@ describe('#enforceAuthorization', () => { }); }); +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 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 () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); // Return any well-formed response to avoid an unhandled error + + await securityExtension.performAuthorization({ types, spaces, actions }); + 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', + 'login:', + ], + [...spaces] + ); + }); + + 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'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `spaces` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + + await expect( + securityExtension.performAuthorization({ types, spaces: new Set(), actions }) + ).rejects.toThrowError('No spaces specified for authorization check'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when `actions` is empty', async () => { + const { securityExtension, checkPrivileges } = setup(); + + await expect( + securityExtension.performAuthorization({ types, spaces, actions: new Set([]) }) + ).rejects.toThrowError('No actions specified for authorization check'); + expect(checkPrivileges).not.toHaveBeenCalled(); + }); + + test('throws an error when privilege check fails', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockRejectedValue(new Error('Oh no!')); + + await expect( + securityExtension.performAuthorization({ types, spaces, actions }) + ).rejects.toThrowError('Oh no!'); + }); + + test('fully authorized', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + const result = await securityExtension.performAuthorization({ types, spaces, actions }); + + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: new Map() + .set('a', { + foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, + bar: { 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'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }) + .set('c', { + foo: { authorizedSpaces: ['x', 'y'] }, + bar: { authorizedSpaces: ['x', 'y'] }, + ['login:']: { isGloballyAuthorized: true, authorizedSpaces: [] }, + }), + }); + }); + + test('partially authorized', async () => { + const { securityExtension, checkPrivileges } = 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 '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 }, + { 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: '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) + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.performAuthorization({ types, spaces, actions }); + expect(result).toEqual({ + status: 'partially_authorized', + typeMap: new Map() + .set('a', { + foo: { isGloballyAuthorized: true, authorizedSpaces: [] }, + ['login:']: { authorizedSpaces: ['x', 'y'] }, + }) + .set('b', { + foo: { authorizedSpaces: ['x', 'y'] }, + ['login:']: { authorizedSpaces: ['x', 'y'] }, + }) + .set('c', { + foo: { authorizedSpaces: ['x'] }, + bar: { authorizedSpaces: ['x'] }, + ['login:']: { authorizedSpaces: ['x', 'y'] }, + }), + }); + }); + + test('unauthorized', async () => { + const { securityExtension, checkPrivileges } = 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 }, + { 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: '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) + ], + }, + } as CheckPrivilegesResponse); + + const result = await securityExtension.performAuthorization({ types, spaces, actions }); + 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'. + status: 'unauthorized', + typeMap: new Map() + .set('a', { ['login:']: { authorizedSpaces: ['y'] } }) + .set('b', { ['login:']: { authorizedSpaces: ['y'] } }) + .set('c', { ['login:']: { authorizedSpaces: ['y'] } }), + }); + }); + + test('conflicting privilege failsafe', async () => { + const conflictingPrivilegesResponse = { + 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 }, + ], + }, + } as CheckPrivilegesResponse; + + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(conflictingPrivilegesResponse); + + const result = await securityExtension.performAuthorization({ types, spaces, actions }); + expect(result).toEqual({ + status: 'fully_authorized', + typeMap: new Map().set('b', { + foo: { authorizedSpaces: ['y'] }, // should NOT be authorized for conflicted privilege + }), + }); + }); + }); + + describe('with 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']); + + 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 partiallyAuthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + 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: 'y', privilege: 'mock-saved_object:c/foo', authorized: true }, + ], + }, + } as CheckPrivilegesResponse; + + const unauthorizedCheckPrivilegesResponse = { + hasAllRequested: false, + 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 }, + ], + }, + } as CheckPrivilegesResponse; + + test('fully authorized', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(fullyAuthorizedCheckPrivilegesResponse); + + await expect(() => + securityExtension.performAuthorization({ + actions, + types, + spaces, + enforceMap: new Map([ + ['a', new Set(['x', 'y', 'z'])], + ['b', new Set(['x', 'y'])], + ['c', new Set(['y'])], + ]), + }) + ).not.toThrowError(); + }); + + test('partially authorized', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(partiallyAuthorizedCheckPrivilegesResponse); + + await expect(() => + securityExtension.performAuthorization({ + 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 foo b,c'); + }); + + test('unauthorized', async () => { + const { securityExtension, checkPrivileges } = setup(); + checkPrivileges.mockResolvedValue(unauthorizedCheckPrivilegesResponse); + + await expect(() => + securityExtension.performAuthorization({ + 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 foo a,b,c'); + }); + }); +}); + describe('#addAuditEvent', () => { test(`adds an unknown audit event`, async () => { const { auditLogger, securityExtension } = setup(); 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 07c720c0aa59bc..6a85951231a592 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 @@ -15,6 +15,7 @@ import type { CheckAuthorizationResult, EnforceAuthorizationParams, ISavedObjectsSecurityExtension, + PerformAuthorizationParams, RedactNamespacesParams, } from '@kbn/core-saved-objects-server'; @@ -45,7 +46,7 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten this.checkPrivilegesFunc = checkPrivileges; } - async checkAuthorization( + private async checkAuthorization( params: CheckAuthorizationParams ): Promise> { const { types, spaces, actions, options = { allowGlobalResource: false } } = params; @@ -158,6 +159,31 @@ export class SavedObjectsSecurityExtension implements ISavedObjectsSecurityExten auditCallback?.(); } + async performAuthorization( + params: PerformAuthorizationParams + ): Promise> { + const checkResult: CheckAuthorizationResult = await this.checkAuthorization({ + types: params.types, + spaces: params.spaces, + actions: params.actions, + options: { allowGlobalResource: params.options?.allowGlobalResource === true }, + }); + + const typesAndSpaces = params.enforceMap; + if (typesAndSpaces !== undefined && checkResult) { + params.actions.forEach((action) => { + this.enforceAuthorization({ + typesAndSpaces, + action, + typeMap: checkResult.typeMap, + auditCallback: params.auditCallback, + }); + }); + } + + return checkResult; + } + addAuditEvent(params: AddAuditEventParams): void { if (this.auditLogger.enabled) { const auditEvent = savedObjectEvent(params); 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 caa45118e2879c..c571c96e87e717 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 @@ -8,6 +8,7 @@ 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 { EcsEventOutcome, SavedObjectsFindResponse } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { httpServerMock } from '@kbn/core/server/mocks'; @@ -732,15 +733,34 @@ describe('SecureSpacesClientWrapper', () => { function expectAuthorizationCheck( securityExtension: jest.Mocked, - targetTypes: string[], - targetSpaces: string[] + aliases: Array<{ targetSpace: string; targetType: string }> ) { - expect(securityExtension!.checkAuthorization).toHaveBeenCalledTimes(1); - expect(securityExtension!.checkAuthorization).toHaveBeenCalledWith({ - types: new Set(targetTypes), // unique types of the alias targets - spaces: new Set(targetSpaces), // unique spaces of the alias targets - actions: new Set(['bulk_update']), - }); + 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(); } describe('when security is not enabled', () => { @@ -764,12 +784,7 @@ describe('SecureSpacesClientWrapper', () => { const { wrapper, baseClient, forbiddenError, securityExtension } = setup({ securityEnabled, }); - securityExtension!.checkAuthorization.mockResolvedValue({ - // These values don't actually matter, the call to enforceAuthorization matters - status: 'unauthorized', - typeMap: new Map(), - }); - securityExtension!.enforceAuthorization.mockImplementation(() => { + securityExtension!.performAuthorization.mockImplementation(() => { throw new Error('Oh no!'); }); const aliases = [alias1, alias2]; @@ -777,14 +792,14 @@ describe('SecureSpacesClientWrapper', () => { forbiddenError ); - expectAuthorizationCheck(securityExtension!, ['type-1', 'type-2'], ['space-1', 'space-2']); + 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!.checkAuthorization.mockResolvedValue({ + securityExtension!.performAuthorization.mockResolvedValue({ // These values don't actually matter, the call to enforceAuthorization matters status: 'fully_authorized', typeMap: new Map(), @@ -793,7 +808,7 @@ describe('SecureSpacesClientWrapper', () => { const aliases = [alias1, alias2]; await wrapper.disableLegacyUrlAliases(aliases); - expectAuthorizationCheck(securityExtension!, ['type-1', 'type-2'], ['space-1', 'space-2']); + 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 7e8adf5cb8ec95..ae89dc5991ee7a 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 @@ -322,23 +322,20 @@ export class SecureSpacesClientWrapper implements ISpacesClient { [new Set(), new Map>()] ); - const { typeMap } = await this.securityExtension.checkAuthorization({ - types: new Set(typesAndSpaces.keys()), - spaces: uniqueSpaces, - actions: new Set(['bulk_update']), - }); let error: Error | undefined; try { - await this.securityExtension.enforceAuthorization({ - typesAndSpaces, - action: 'bulk_update', - typeMap, + 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({ diff --git a/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/rules/filters/response_schema.test.ts b/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/rules/filters/response_schema.test.ts new file mode 100644 index 00000000000000..85a28a30420923 --- /dev/null +++ b/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/rules/filters/response_schema.test.ts @@ -0,0 +1,151 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { left } from 'fp-ts/lib/Either'; +import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils'; + +import { RuleManagementFiltersResponse } from './response_schema'; + +describe('Rule management filters response schema', () => { + test('it should validate an empty response with defaults', () => { + const payload: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: 0, + prebuilt_installed_count: 0, + }, + aggregated_fields: { + tags: [], + }, + }; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + test('it should validate an non empty response with defaults', () => { + const payload: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: 10, + prebuilt_installed_count: 20, + }, + aggregated_fields: { + tags: ['a', 'b', 'c'], + }, + }; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual([]); + expect(message.schema).toEqual(payload); + }); + + test('it should not validate an extra invalid field added', () => { + const payload: RuleManagementFiltersResponse & { invalid_field: string } = { + rules_summary: { + custom_count: 0, + prebuilt_installed_count: 0, + }, + aggregated_fields: { + tags: [], + }, + invalid_field: 'invalid', + }; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual(['invalid keys "invalid_field"']); + expect(message.schema).toEqual({}); + }); + + test('it should NOT validate an empty response with a negative "summary.prebuilt_installed_count" number', () => { + const payload: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: 0, + prebuilt_installed_count: -1, + }, + aggregated_fields: { + tags: [], + }, + }; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "-1" supplied to "rules_summary,prebuilt_installed_count"', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should NOT validate an empty response with a negative "summary.custom_count"', () => { + const payload: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: -1, + prebuilt_installed_count: 0, + }, + aggregated_fields: { + tags: [], + }, + }; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "-1" supplied to "rules_summary,custom_count"', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should NOT validate an empty prepackaged response if "summary.prebuilt_installed_count" is not there', () => { + const payload: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: 0, + prebuilt_installed_count: 0, + }, + aggregated_fields: { + tags: [], + }, + }; + // @ts-expect-error + delete payload.rules_summary.prebuilt_installed_count; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "undefined" supplied to "rules_summary,prebuilt_installed_count"', + ]); + expect(message.schema).toEqual({}); + }); + + test('it should NOT validate an empty response with wrong "aggregated_fields.tags"', () => { + const payload: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: 0, + prebuilt_installed_count: 0, + }, + aggregated_fields: { + // @ts-expect-error Passing an invalid value for the test + tags: [1], + }, + }; + const decoded = RuleManagementFiltersResponse.decode(payload); + const checked = exactCheck(payload, decoded); + const message = foldLeftRight(checked); + + expect(getPaths(left(message.errors))).toEqual([ + 'Invalid value "1" supplied to "aggregated_fields,tags"', + ]); + expect(message.schema).toEqual({}); + }); +}); diff --git a/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/rules/filters/response_schema.ts b/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/rules/filters/response_schema.ts new file mode 100644 index 00000000000000..89d12bff729b3f --- /dev/null +++ b/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/rules/filters/response_schema.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as t from 'io-ts'; +import { PositiveInteger } from '@kbn/securitysolution-io-ts-types'; + +export type RuleManagementFiltersResponse = t.TypeOf; +export const RuleManagementFiltersResponse = t.exact( + t.type({ + rules_summary: t.type({ + custom_count: PositiveInteger, + prebuilt_installed_count: PositiveInteger, + }), + aggregated_fields: t.type({ + tags: t.array(t.string), + }), + }) +); diff --git a/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/urls.ts b/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/urls.ts new file mode 100644 index 00000000000000..4a4cae72cf04de --- /dev/null +++ b/x-pack/plugins/security_solution/common/detection_engine/rule_management/api/urls.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 { INTERNAL_DETECTION_ENGINE_URL } from '../../../constants'; + +export const RULE_MANAGEMENT_FILTERS_URL = `${INTERNAL_DETECTION_ENGINE_URL}/rules/_rule_management_filters`; diff --git a/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/add_edit_exception_data_view.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/add_edit_exception_data_view.cy.ts index b3c807fdf72971..79f9945219dc23 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/add_edit_exception_data_view.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/exceptions/rule_details_flow/add_edit_exception_data_view.cy.ts @@ -5,15 +5,24 @@ * 2.0. */ +import { LOADING_INDICATOR } from '../../../screens/security_header'; import { getNewRule } from '../../../objects/rule'; import { ALERTS_COUNT, EMPTY_ALERT_TABLE, NUMBER_OF_ALERTS } from '../../../screens/alerts'; import { createCustomRuleEnabled } from '../../../tasks/api_calls/rules'; import { goToRuleDetails } from '../../../tasks/alerts_detection_rules'; -import { goToClosedAlerts, goToOpenedAlerts } from '../../../tasks/alerts'; import { + addExceptionFromFirstAlert, + goToClosedAlerts, + goToOpenedAlerts, +} from '../../../tasks/alerts'; +import { + addExceptionConditions, + addExceptionFlyoutItemName, editException, editExceptionFlyoutItemName, + selectBulkCloseAlerts, submitEditedExceptionItem, + submitNewExceptionItem, } from '../../../tasks/exceptions'; import { esArchiverLoad, @@ -75,14 +84,57 @@ describe('Add exception using data views from rule details', () => { ); visitWithoutDateRange(DETECTIONS_RULE_MANAGEMENT_URL); goToRuleDetails(); - goToExceptionsTab(); + waitForAlertsToPopulate(); }); afterEach(() => { esArchiverUnload('exceptions_2'); }); + it('Creates an exception item from alert actions overflow menu', () => { + cy.get(LOADING_INDICATOR).should('not.exist'); + addExceptionFromFirstAlert(); + addExceptionFlyoutItemName(ITEM_NAME); + addExceptionConditions({ + field: 'agent.name', + operator: 'is', + values: ['foo'], + }); + selectBulkCloseAlerts(); + submitNewExceptionItem(); + + // Alerts table should now be empty from having added exception and closed + // matching alert + cy.get(EMPTY_ALERT_TABLE).should('exist'); + + // Closed alert should appear in table + goToClosedAlerts(); + cy.get(ALERTS_COUNT).should('exist'); + cy.get(NUMBER_OF_ALERTS).should('have.text', `${NUMBER_OF_AUDITBEAT_EXCEPTIONS_ALERTS}`); + + // Remove the exception and load an event that would have matched that exception + // to show that said exception now starts to show up again + goToExceptionsTab(); + + // when removing exception and again, no more exist, empty screen shows again + removeException(); + cy.get(NO_EXCEPTIONS_EXIST_PROMPT).should('exist'); + + // load more docs + esArchiverLoad('exceptions_2'); + + // now that there are no more exceptions, the docs should match and populate alerts + goToAlertsTab(); + goToOpenedAlerts(); + waitForTheRuleToBeExecuted(); + waitForAlertsToPopulate(); + + cy.get(ALERTS_COUNT).should('exist'); + cy.get(NUMBER_OF_ALERTS).should('have.text', '2 alerts'); + }); + it('Creates an exception item', () => { + goToExceptionsTab(); // when no exceptions exist, empty component shows with action to add exception cy.get(NO_EXCEPTIONS_EXIST_PROMPT).should('exist'); @@ -136,6 +188,7 @@ describe('Add exception using data views from rule details', () => { const ITEM_FIELD = 'unique_value.test'; const FIELD_DIFFERENT_FROM_EXISTING_ITEM_FIELD = 'agent.name'; + goToExceptionsTab(); // add item to edit addFirstExceptionFromRuleDetails( { diff --git a/x-pack/plugins/security_solution/cypress/screens/common/page.ts b/x-pack/plugins/security_solution/cypress/screens/common/page.ts index 3f6a130ca33147..f81d5543b830fa 100644 --- a/x-pack/plugins/security_solution/cypress/screens/common/page.ts +++ b/x-pack/plugins/security_solution/cypress/screens/common/page.ts @@ -8,3 +8,5 @@ export const PAGE_TITLE = '[data-test-subj="header-page-title"]'; export const NOT_FOUND = '[data-test-subj="notFoundPage"]'; + +export const LOADING_SPINNER = '.euiLoadingSpinner'; diff --git a/x-pack/plugins/security_solution/cypress/tasks/alerts.ts b/x-pack/plugins/security_solution/cypress/tasks/alerts.ts index 8003f1ba3c304e..1e7b3047edaa27 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/alerts.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/alerts.ts @@ -46,15 +46,14 @@ import { USER_DETAILS_LINK, } from '../screens/alerts_details'; import { FIELD_INPUT } from '../screens/exceptions'; +import { LOADING_SPINNER } from '../screens/common/page'; export const addExceptionFromFirstAlert = () => { - cy.get(TIMELINE_CONTEXT_MENU_BTN).first().click({ force: true }); - cy.root() - .pipe(($el) => { - $el.find(ADD_EXCEPTION_BTN).trigger('click'); - return $el.find(FIELD_INPUT); - }) - .should('be.visible'); + expandFirstAlertActions(); + cy.get(ADD_EXCEPTION_BTN, { timeout: 10000 }).should('be.visible'); + cy.get(ADD_EXCEPTION_BTN, { timeout: 10000 }).first().click(); + cy.get(LOADING_SPINNER).should('exist'); + cy.get(LOADING_SPINNER).should('not.exist'); }; export const openAddEndpointExceptionFromFirstAlert = () => { @@ -108,8 +107,8 @@ export const closeAlerts = () => { }; export const expandFirstAlertActions = () => { - cy.get(TIMELINE_CONTEXT_MENU_BTN).should('be.visible'); - cy.get(TIMELINE_CONTEXT_MENU_BTN).first().click({ force: true }); + cy.get(TIMELINE_CONTEXT_MENU_BTN, { timeout: 10000 }).should('be.visible'); + cy.get(TIMELINE_CONTEXT_MENU_BTN, { timeout: 10000 }).first().click({ force: true }); }; export const expandFirstAlert = () => { diff --git a/x-pack/plugins/security_solution/cypress/tasks/exceptions.ts b/x-pack/plugins/security_solution/cypress/tasks/exceptions.ts index ac7e5572cc1d11..3fb544101f177d 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/exceptions.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/exceptions.ts @@ -69,12 +69,10 @@ export const editException = (updatedField: string, itemIndex = 0, fieldIndex = }; export const addExceptionFlyoutItemName = (name: string) => { - cy.root() - .pipe(($el) => { - return $el.find(EXCEPTION_ITEM_NAME_INPUT); - }) - .type(`${name}{enter}`) - .should('have.value', name); + cy.get(EXCEPTION_ITEM_NAME_INPUT).should('exist'); + cy.get(EXCEPTION_ITEM_NAME_INPUT).should('be.visible'); + cy.get(EXCEPTION_ITEM_NAME_INPUT).first().focus(); + cy.get(EXCEPTION_ITEM_NAME_INPUT).type(`${name}{enter}`).should('have.value', name); }; export const editExceptionFlyoutItemName = (name: string) => { @@ -88,6 +86,7 @@ export const editExceptionFlyoutItemName = (name: string) => { }; export const selectBulkCloseAlerts = () => { + cy.get(CLOSE_ALERTS_CHECKBOX).should('exist'); cy.get(CLOSE_ALERTS_CHECKBOX).click({ force: true }); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts index 265cf9d42e9d24..bf1ac32d2bc78b 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.test.ts @@ -31,7 +31,6 @@ import { createPrepackagedRules, importRules, exportRules, - fetchTags, getPrePackagedRulesStatus, previewRule, findRuleExceptionReferences, @@ -630,26 +629,6 @@ describe('Detections Rules API', () => { }); }); - describe('fetchTags', () => { - beforeEach(() => { - fetchMock.mockClear(); - fetchMock.mockResolvedValue(['some', 'tags']); - }); - - test('check parameter url when fetching tags', async () => { - await fetchTags({ signal: abortCtrl.signal }); - expect(fetchMock).toHaveBeenCalledWith('/api/detection_engine/tags', { - signal: abortCtrl.signal, - method: 'GET', - }); - }); - - test('happy path', async () => { - const resp = await fetchTags({ signal: abortCtrl.signal }); - expect(resp).toEqual(['some', 'tags']); - }); - }); - describe('getPrePackagedRulesStatus', () => { const prePackagedRulesStatus = { rules_custom_installed: 33, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts index e7fe4dd64fb7da..9e4f22484a00d0 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/api.ts @@ -11,13 +11,14 @@ import type { ExceptionListItemSchema, } from '@kbn/securitysolution-io-ts-list-types'; +import type { RuleManagementFiltersResponse } from '../../../../common/detection_engine/rule_management/api/rules/filters/response_schema'; +import { RULE_MANAGEMENT_FILTERS_URL } from '../../../../common/detection_engine/rule_management/api/urls'; import type { BulkActionsDryRunErrCode } from '../../../../common/constants'; import { DETECTION_ENGINE_RULES_BULK_ACTION, DETECTION_ENGINE_RULES_PREVIEW, DETECTION_ENGINE_RULES_URL, DETECTION_ENGINE_RULES_URL_FIND, - DETECTION_ENGINE_TAGS_URL, } from '../../../../common/constants'; import { @@ -33,7 +34,6 @@ import type { BulkActionDuplicatePayload, } from '../../../../common/detection_engine/rule_management/api/rules/bulk_actions/request_schema'; import { BulkActionType } from '../../../../common/detection_engine/rule_management/api/rules/bulk_actions/request_schema'; - import type { RuleResponse, PreviewResponse, @@ -388,17 +388,19 @@ export const exportRules = async ({ }); }; -export type FetchTagsResponse = string[]; - /** - * Fetch all unique Tags used by Rules + * Fetch rule filters related information like installed rules count, tags and etc * * @param signal to cancel request * * @throws An error if response is not OK */ -export const fetchTags = async ({ signal }: { signal?: AbortSignal }): Promise => - KibanaServices.get().http.fetch(DETECTION_ENGINE_TAGS_URL, { +export const fetchRuleManagementFilters = async ({ + signal, +}: { + signal?: AbortSignal; +}): Promise => + KibanaServices.get().http.fetch(RULE_MANAGEMENT_FILTERS_URL, { method: 'GET', signal, }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts index 3f652063707c2e..2647dfae6934e9 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts @@ -10,11 +10,11 @@ import type { IHttpFetchError } from '@kbn/core/public'; import { BulkActionType } from '../../../../../common/detection_engine/rule_management/api/rules/bulk_actions/request_schema'; import type { BulkActionErrorResponse, BulkActionResponse, PerformBulkActionProps } from '../api'; import { performBulkAction } from '../api'; +import { DETECTION_ENGINE_RULES_BULK_ACTION } from '../../../../../common/constants'; import { useInvalidateFetchPrebuiltRulesStatusQuery } from './use_fetch_prebuilt_rules_status_query'; import { useInvalidateFindRulesQuery, useUpdateRulesCache } from './use_find_rules_query'; -import { useInvalidateFetchTagsQuery } from './use_fetch_tags_query'; import { useInvalidateFetchRuleByIdQuery } from './use_fetch_rule_by_id_query'; -import { DETECTION_ENGINE_RULES_BULK_ACTION } from '../../../../../common/constants'; +import { useInvalidateFetchRuleManagementFiltersQuery } from './use_fetch_rule_management_filters_query'; export const BULK_ACTION_MUTATION_KEY = ['POST', DETECTION_ENGINE_RULES_BULK_ACTION]; @@ -27,7 +27,7 @@ export const useBulkActionMutation = ( ) => { const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); const invalidateFetchRuleByIdQuery = useInvalidateFetchRuleByIdQuery(); - const invalidateFetchTagsQuery = useInvalidateFetchTagsQuery(); + const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery(); const invalidateFetchPrebuiltRulesStatusQuery = useInvalidateFetchPrebuiltRulesStatusQuery(); const updateRulesCache = useUpdateRulesCache(); @@ -66,12 +66,12 @@ export const useBulkActionMutation = ( case BulkActionType.delete: invalidateFindRulesQuery(); invalidateFetchRuleByIdQuery(); - invalidateFetchTagsQuery(); + invalidateFetchRuleManagementFilters(); invalidateFetchPrebuiltRulesStatusQuery(); break; case BulkActionType.duplicate: invalidateFindRulesQuery(); - invalidateFetchPrebuiltRulesStatusQuery(); + invalidateFetchRuleManagementFilters(); break; case BulkActionType.edit: if (updatedRules) { @@ -82,7 +82,7 @@ export const useBulkActionMutation = ( invalidateFindRulesQuery(); } invalidateFetchRuleByIdQuery(); - invalidateFetchTagsQuery(); + invalidateFetchRuleManagementFilters(); break; } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_prebuilt_rules_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_prebuilt_rules_mutation.ts index a88f011ae8ea4c..41bce8f0cc1546 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_prebuilt_rules_mutation.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_prebuilt_rules_mutation.ts @@ -6,12 +6,12 @@ */ import type { UseMutationOptions } from '@tanstack/react-query'; import { useMutation } from '@tanstack/react-query'; +import { PREBUILT_RULES_URL } from '../../../../../common/detection_engine/prebuilt_rules/api/urls'; import type { CreatePrepackagedRulesResponse } from '../api'; import { createPrepackagedRules } from '../api'; import { useInvalidateFetchPrebuiltRulesStatusQuery } from './use_fetch_prebuilt_rules_status_query'; import { useInvalidateFindRulesQuery } from './use_find_rules_query'; -import { useInvalidateFetchTagsQuery } from './use_fetch_tags_query'; -import { PREBUILT_RULES_URL } from '../../../../../common/detection_engine/prebuilt_rules/api/urls'; +import { useInvalidateFetchRuleManagementFiltersQuery } from './use_fetch_rule_management_filters_query'; export const CREATE_PREBUILT_RULES_MUTATION_KEY = ['PUT', PREBUILT_RULES_URL]; @@ -20,7 +20,7 @@ export const useCreatePrebuiltRulesMutation = ( ) => { const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); const invalidatePrePackagedRulesStatus = useInvalidateFetchPrebuiltRulesStatusQuery(); - const invalidateFetchTagsQuery = useInvalidateFetchTagsQuery(); + const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery(); return useMutation(() => createPrepackagedRules(), { ...options, @@ -30,7 +30,7 @@ export const useCreatePrebuiltRulesMutation = ( // the number of rules might change after the installation invalidatePrePackagedRulesStatus(); invalidateFindRulesQuery(); - invalidateFetchTagsQuery(); + invalidateFetchRuleManagementFilters(); if (options?.onSettled) { options.onSettled(...args); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_rule_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_rule_mutation.ts index a2901e1ed88bc7..6d17505cdac294 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_rule_mutation.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_create_rule_mutation.ts @@ -13,8 +13,7 @@ import type { } from '../../../../../common/detection_engine/rule_schema'; import { transformOutput } from '../../../../detections/containers/detection_engine/rules/transforms'; import { createRule } from '../api'; -import { useInvalidateFetchPrebuiltRulesStatusQuery } from './use_fetch_prebuilt_rules_status_query'; -import { useInvalidateFetchTagsQuery } from './use_fetch_tags_query'; +import { useInvalidateFetchRuleManagementFiltersQuery } from './use_fetch_rule_management_filters_query'; import { useInvalidateFindRulesQuery } from './use_find_rules_query'; export const CREATE_RULE_MUTATION_KEY = ['POST', DETECTION_ENGINE_RULES_URL]; @@ -23,8 +22,7 @@ export const useCreateRuleMutation = ( options?: UseMutationOptions ) => { const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); - const invalidateFetchTagsQuery = useInvalidateFetchTagsQuery(); - const invalidateFetchPrePackagedRulesStatusQuery = useInvalidateFetchPrebuiltRulesStatusQuery(); + const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery(); return useMutation( (rule: RuleCreateProps) => createRule({ rule: transformOutput(rule) }), @@ -32,9 +30,8 @@ export const useCreateRuleMutation = ( ...options, mutationKey: CREATE_RULE_MUTATION_KEY, onSettled: (...args) => { - invalidateFetchPrePackagedRulesStatusQuery(); invalidateFindRulesQuery(); - invalidateFetchTagsQuery(); + invalidateFetchRuleManagementFilters(); if (options?.onSettled) { options.onSettled(...args); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_management_filters_query.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_management_filters_query.ts new file mode 100644 index 00000000000000..32b2a206970a34 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_rule_management_filters_query.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { useCallback } from 'react'; +import type { UseQueryOptions } from '@tanstack/react-query'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import type { RuleManagementFiltersResponse } from '../../../../../common/detection_engine/rule_management/api/rules/filters/response_schema'; +import { RULE_MANAGEMENT_FILTERS_URL } from '../../../../../common/detection_engine/rule_management/api/urls'; +import { fetchRuleManagementFilters } from '../api'; +import { DEFAULT_QUERY_OPTIONS } from './constants'; + +export const RULE_MANAGEMENT_FILTERS_QUERY_KEY = ['GET', RULE_MANAGEMENT_FILTERS_URL]; + +export const useFetchRuleManagementFiltersQuery = ( + options?: UseQueryOptions +) => { + return useQuery( + RULE_MANAGEMENT_FILTERS_QUERY_KEY, + async ({ signal }) => { + const response = await fetchRuleManagementFilters({ signal }); + return response; + }, + { + ...DEFAULT_QUERY_OPTIONS, + ...options, + } + ); +}; + +/** + * We should use this hook to invalidate the rule management filters cache. For + * example, rule mutations that affect rule set size, like creation or deletion, + * should lead to cache invalidation. + * + * @returns A rules cache invalidation callback + */ +export const useInvalidateFetchRuleManagementFiltersQuery = () => { + const queryClient = useQueryClient(); + + return useCallback(() => { + queryClient.invalidateQueries(RULE_MANAGEMENT_FILTERS_QUERY_KEY, { + refetchType: 'active', + }); + }, [queryClient]); +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_tags_query.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_tags_query.ts deleted file mode 100644 index c09ae5d6cb56d3..00000000000000 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_fetch_tags_query.ts +++ /dev/null @@ -1,43 +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 { UseQueryOptions } from '@tanstack/react-query'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { useCallback } from 'react'; -import { DETECTION_ENGINE_TAGS_URL } from '../../../../../common/constants'; -import type { FetchTagsResponse } from '../api'; -import { fetchTags } from '../api'; -import { DEFAULT_QUERY_OPTIONS } from './constants'; - -const TAGS_QUERY_KEY = ['GET', DETECTION_ENGINE_TAGS_URL]; - -/** - * Hook for using the list of Tags from the Detection Engine API - * - */ -export const useFetchTagsQuery = (options?: UseQueryOptions) => { - return useQuery( - TAGS_QUERY_KEY, - async ({ signal }) => { - return fetchTags({ signal }); - }, - { - ...DEFAULT_QUERY_OPTIONS, - ...options, - } - ); -}; - -export const useInvalidateFetchTagsQuery = () => { - const queryClient = useQueryClient(); - - return useCallback(() => { - queryClient.invalidateQueries(TAGS_QUERY_KEY, { - refetchType: 'active', - }); - }, [queryClient]); -}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts index 13247852521db5..21d0c78f49b41b 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts @@ -11,11 +11,11 @@ import type { RuleUpdateProps, } from '../../../../../common/detection_engine/rule_schema'; import { transformOutput } from '../../../../detections/containers/detection_engine/rules/transforms'; +import { DETECTION_ENGINE_RULES_URL } from '../../../../../common/constants'; import { updateRule } from '../api'; import { useInvalidateFindRulesQuery } from './use_find_rules_query'; -import { useInvalidateFetchTagsQuery } from './use_fetch_tags_query'; import { useInvalidateFetchRuleByIdQuery } from './use_fetch_rule_by_id_query'; -import { DETECTION_ENGINE_RULES_URL } from '../../../../../common/constants'; +import { useInvalidateFetchRuleManagementFiltersQuery } from './use_fetch_rule_management_filters_query'; export const UPDATE_RULE_MUTATION_KEY = ['PUT', DETECTION_ENGINE_RULES_URL]; @@ -23,7 +23,7 @@ export const useUpdateRuleMutation = ( options?: UseMutationOptions ) => { const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); - const invalidateFetchTagsQuery = useInvalidateFetchTagsQuery(); + const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery(); const invalidateFetchRuleByIdQuery = useInvalidateFetchRuleByIdQuery(); return useMutation( @@ -34,7 +34,7 @@ export const useUpdateRuleMutation = ( onSettled: (...args) => { invalidateFindRulesQuery(); invalidateFetchRuleByIdQuery(); - invalidateFetchTagsQuery(); + invalidateFetchRuleManagementFilters(); if (options?.onSettled) { options.onSettled(...args); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/translations.ts index 36735f1ff11e19..56ebc3e133775f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/translations.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/translations.ts @@ -14,6 +14,13 @@ export const RULE_AND_TIMELINE_FETCH_FAILURE = i18n.translate( } ); +export const RULE_MANAGEMENT_FILTERS_FETCH_FAILURE = i18n.translate( + 'xpack.securitySolution.containers.detectionEngine.ruleManagementFiltersFetchFailure', + { + defaultMessage: 'Failed to fetch rule filters', + } +); + export const RULE_ADD_FAILURE = i18n.translate( 'xpack.securitySolution.containers.detectionEngine.addRuleFailDescription', { @@ -48,10 +55,3 @@ export const TIMELINE_PREPACKAGED_SUCCESS = i18n.translate( defaultMessage: 'Installed pre-packaged timeline templates from elastic', } ); - -export const TAG_FETCH_FAILURE = i18n.translate( - 'xpack.securitySolution.containers.detectionEngine.tagFetchFailDescription', - { - defaultMessage: 'Failed to fetch Tags', - } -); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_tags.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_management_filters.ts similarity index 61% rename from x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_tags.ts rename to x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_management_filters.ts index ab3671f262f8a5..a16f433b993a18 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_tags.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_management_filters.ts @@ -4,21 +4,16 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useFetchTagsQuery } from '../api/hooks/use_fetch_tags_query'; +import { useFetchRuleManagementFiltersQuery } from '../api/hooks/use_fetch_rule_management_filters_query'; import * as i18n from './translations'; -/** - * Hook for using the list of Tags from the Detection Engine API - * - */ -export const useTags = () => { +export const useRuleManagementFilters = () => { const { addError } = useAppToasts(); - return useFetchTagsQuery({ + return useFetchRuleManagementFiltersQuery({ onError: (err) => { - addError(err, { title: i18n.TAG_FETCH_FAILURE }); + addError(err, { title: i18n.RULE_MANAGEMENT_FILTERS_FETCH_FAILURE }); }, }); }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_with_fallback.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_with_fallback.ts index e9004d80a5f0ae..4ab65ae0fd8c7b 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_with_fallback.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_rule_with_fallback.ts @@ -77,7 +77,7 @@ const buildLastAlertQuery = (ruleId: string) => ({ * In that case, try to fetch the latest alert generated by the rule and retrieve the rule data from the alert (fallback). */ export const useRuleWithFallback = (ruleId: string): UseRuleWithFallback => { - const { isLoading: ruleLoading, data: ruleData, error, refetch } = useRule(ruleId, false); + const { isFetching: ruleLoading, data: ruleData, error, refetch } = useRule(ruleId, false); const { addError } = useAppToasts(); const isExistingRule = !isNotFoundError(error); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/tags_form.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/tags_form.tsx index 4288342c03d103..3e09b5dd3bed75 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/tags_form.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/forms/tags_form.tsx @@ -9,6 +9,7 @@ import { EuiCallOut, EuiFormRow } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useMemo } from 'react'; +import { useRuleManagementFilters } from '../../../../../rule_management/logic/use_rule_management_filters'; import type { BulkActionEditPayload } from '../../../../../../../common/detection_engine/rule_management/api/rules/bulk_actions/request_schema'; import { BulkActionEditType } from '../../../../../../../common/detection_engine/rule_management/api/rules/bulk_actions/request_schema'; import * as i18n from '../../../../../../detections/pages/detection_engine/rules/translations'; @@ -25,7 +26,6 @@ import { } from '../../../../../../shared_imports'; import { BulkEditFormWrapper } from './bulk_edit_form_wrapper'; -import { useTags } from '../../../../../rule_management/logic/use_tags'; type TagsEditActions = | BulkActionEditType.add_tags @@ -78,13 +78,16 @@ interface TagsFormProps { } const TagsFormComponent = ({ editAction, rulesCount, onClose, onConfirm }: TagsFormProps) => { - const { data: tags = [] } = useTags(); + const { data: ruleManagementFilters } = useRuleManagementFilters(); const { form } = useForm({ defaultValue: initialFormData, schema, }); const [{ overwrite }] = useFormData({ form, watch: ['overwrite'] }); - const sortedTags = useMemo(() => caseInsensitiveSort(tags), [tags]); + const sortedTags = useMemo( + () => caseInsensitiveSort(ruleManagementFilters?.aggregated_fields.tags ?? []), + [ruleManagementFilters] + ); const { tagsLabel, tagsHelpText, formTitle } = getFormConfig(editAction); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_filters/rules_table_filters.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_filters/rules_table_filters.tsx index 0636048384714d..2fa5a3806874a3 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_filters/rules_table_filters.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_filters/rules_table_filters.tsx @@ -9,13 +9,12 @@ import { EuiFilterButton, EuiFilterGroup, EuiFlexGroup, EuiFlexItem } from '@ela import { isEqual } from 'lodash/fp'; import React, { useCallback } from 'react'; import styled from 'styled-components'; +import { useRuleManagementFilters } from '../../../../rule_management/logic/use_rule_management_filters'; import { RULES_TABLE_ACTIONS } from '../../../../../common/lib/apm/user_actions'; import { useStartTransaction } from '../../../../../common/lib/apm/use_start_transaction'; -import { usePrePackagedRulesStatus } from '../../../../rule_management/logic/use_pre_packaged_rules_status'; import * as i18n from '../../../../../detections/pages/detection_engine/rules/translations'; import { useRulesTableContext } from '../rules_table/rules_table_context'; import { TagsFilterPopover } from './tags_filter_popover'; -import { useTags } from '../../../../rule_management/logic/use_tags'; import { RuleSearchField } from './rule_search_field'; const FilterWrapper = styled(EuiFlexGroup)` @@ -32,10 +31,10 @@ const RulesTableFiltersComponent = () => { state: { filterOptions }, actions: { setFilterOptions }, } = useRulesTableContext(); - const { data: allTags = [] } = useTags(); - const { data: prePackagedRulesStatus } = usePrePackagedRulesStatus(); - const rulesCustomInstalled = prePackagedRulesStatus?.rules_custom_installed; - const rulesInstalled = prePackagedRulesStatus?.rules_installed; + const { data: ruleManagementFields } = useRuleManagementFilters(); + const allTags = ruleManagementFields?.aggregated_fields.tags ?? []; + const rulesCustomCount = ruleManagementFields?.rules_summary.custom_count; + const rulesPrebuiltInstalledCount = ruleManagementFields?.rules_summary.prebuilt_installed_count; const { showCustomRules, showElasticRules, tags: selectedTags } = filterOptions; @@ -90,7 +89,7 @@ const RulesTableFiltersComponent = () => { withNext > {i18n.ELASTIC_RULES} - {rulesInstalled != null ? ` (${rulesInstalled})` : ''} + {rulesPrebuiltInstalledCount != null ? ` (${rulesPrebuiltInstalledCount ?? ''})` : ''} { data-test-subj="showCustomRulesFilterButton" > {i18n.CUSTOM_RULES} - {rulesCustomInstalled != null ? ` (${rulesCustomInstalled})` : ''} + {rulesCustomCount != null ? ` (${rulesCustomCount})` : ''} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx index 7156126b39c295..95fc837a8e8f50 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_tables.tsx @@ -18,7 +18,6 @@ import { useBoolState } from '../../../../common/hooks/use_bool_state'; import { useValueChanged } from '../../../../common/hooks/use_value_changed'; import { PrePackagedRulesPrompt } from '../../../../detections/components/rules/pre_packaged_rules/load_empty_prompt'; import type { Rule, RulesSortingFields } from '../../../rule_management/logic'; -import { usePrePackagedRulesStatus } from '../../../rule_management/logic/use_pre_packaged_rules_status'; import * as i18n from '../../../../detections/pages/detection_engine/rules/translations'; import type { EuiBasicTableOnChange } from '../../../../detections/pages/detection_engine/rules/types'; import { BulkActionDryRunConfirmation } from './bulk_actions/bulk_action_dry_run_confirmation'; @@ -39,6 +38,7 @@ import { useBulkDuplicateExceptionsConfirmation } from './bulk_actions/use_bulk_ import { BulkActionDuplicateExceptionsConfirmation } from './bulk_actions/bulk_duplicate_exceptions_confirmation'; import { useStartMlJobs } from '../../../rule_management/logic/use_start_ml_jobs'; import { RULES_TABLE_PAGE_SIZE_OPTIONS } from './constants'; +import { useRuleManagementFilters } from '../../../rule_management/logic/use_rule_management_filters'; const INITIAL_SORT_FIELD = 'enabled'; @@ -65,8 +65,7 @@ export const RulesTables = React.memo(({ selectedTab }) => { const tableRef = useRef(null); const rulesTableContext = useRulesTableContext(); - const { data: prePackagedRulesStatus, isLoading: isPrepackagedStatusLoading } = - usePrePackagedRulesStatus(); + const { data: ruleManagementFilters } = useRuleManagementFilters(); const { state: { @@ -214,11 +213,10 @@ export const RulesTables = React.memo(({ selectedTab }) => { }, [rules, isAllSelected, setIsAllSelected, setSelectedRuleIds]); const isTableEmpty = - !isPrepackagedStatusLoading && - prePackagedRulesStatus?.rules_custom_installed === 0 && - prePackagedRulesStatus.rules_installed === 0; + ruleManagementFilters?.rules_summary.custom_count === 0 && + ruleManagementFilters?.rules_summary.prebuilt_installed_count === 0; - const shouldShowRulesTable = !isPrepackagedStatusLoading && !isLoading && !isTableEmpty; + const shouldShowRulesTable = !isLoading && !isTableEmpty; const tableProps = selectedTab === AllRulesTabs.rules 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 a76c064103cbeb..f02075809a46d6 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 @@ -32,7 +32,6 @@ import { useListsConfig } from '../../../../detections/containers/detection_engi import { redirectToDetections } from '../../../../detections/pages/detection_engine/rules/helpers'; import { useInvalidateFindRulesQuery } from '../../../rule_management/api/hooks/use_find_rules_query'; -import { useInvalidateFetchPrebuiltRulesStatusQuery } from '../../../rule_management/api/hooks/use_fetch_prebuilt_rules_status_query'; import { importRules } from '../../../rule_management/logic'; import { usePrePackagedRulesInstallationStatus } from '../../../rule_management/logic/use_pre_packaged_rules_installation_status'; import { usePrePackagedTimelinesInstallationStatus } from '../../../rule_management/logic/use_pre_packaged_timelines_installation_status'; @@ -42,17 +41,18 @@ import { RulesTableContextProvider } from '../../components/rules_table/rules_ta 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 = () => { const [isImportModalVisible, showImportModal, hideImportModal] = useBoolState(); const [isValueListFlyoutVisible, showValueListFlyout, hideValueListFlyout] = useBoolState(); const { navigateToApp } = useKibana().services.application; const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); - const invalidateFetchPrebuiltRulesStatusQuery = useInvalidateFetchPrebuiltRulesStatusQuery(); + const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery(); const invalidateRules = useCallback(() => { invalidateFindRulesQuery(); - invalidateFetchPrebuiltRulesStatusQuery(); - }, [invalidateFindRulesQuery, invalidateFetchPrebuiltRulesStatusQuery]); + invalidateFetchRuleManagementFilters(); + }, [invalidateFindRulesQuery, invalidateFetchRuleManagementFilters]); const [ { diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx index 82c02351a8cf4d..c5ecfe797bc36f 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx @@ -425,7 +425,7 @@ export const AddExceptionFlyoutWrapper: React.FC const isLoading = (isLoadingAlertData && isSignalIndexLoading) || enrichedAlert == null || - memoRuleIndices == null; + (memoRuleIndices == null && memoDataViewId == null); return ( { }; const wrapper = shallow(); - expect(wrapper.dive().find('EuiRange')).toHaveLength(1); + expect(wrapper.dive().find('EuiRangeClass')).toHaveLength(1); }); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/anomaly_threshold_slider/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/anomaly_threshold_slider/index.tsx index 6997777fdc34cd..3398b8bec2cf5c 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/anomaly_threshold_slider/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/anomaly_threshold_slider/index.tsx @@ -7,6 +7,7 @@ import React, { useCallback } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiRange, EuiFormRow } from '@elastic/eui'; +import type { EuiRangeProps } from '@elastic/eui'; import type { FieldHook } from '../../../../shared_imports'; @@ -14,17 +15,15 @@ interface AnomalyThresholdSliderProps { describedByIds: string[]; field: FieldHook; } -type Event = React.ChangeEvent; -type EventArg = Event | React.MouseEvent; export const AnomalyThresholdSlider = ({ describedByIds = [], field, }: AnomalyThresholdSliderProps) => { const threshold = field.value as number; - const onThresholdChange = useCallback( - (event: EventArg) => { - const thresholdValue = Number((event as Event).target.value); + const onThresholdChange: EuiRangeProps['onChange'] = useCallback( + (event) => { + const thresholdValue = Number(event.currentTarget.value); field.setValue(thresholdValue); }, [field] @@ -46,6 +45,8 @@ export const AnomalyThresholdSlider = ({ showRange showTicks tickInterval={25} + min={0} + max={100} /> diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx index 177fd2e97e6cd5..f022560f9f50cb 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/risk_score_mapping/index.tsx @@ -19,6 +19,7 @@ import { EuiSpacer, EuiRange, } from '@elastic/eui'; +import type { EuiRangeProps } from '@elastic/eui'; import type { DataViewBase, DataViewFieldBase } from '@kbn/es-query'; import type { FieldHook } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; @@ -67,8 +68,8 @@ export const RiskScoreField = ({ const fieldTypeFilter = useMemo(() => ['number'], []); const selectedField = useMemo(() => getFieldTypeByMapping(mapping, indices), [mapping, indices]); - const handleDefaultRiskScoreChange = useCallback( - (e: React.ChangeEvent | React.MouseEvent): void => { + const handleDefaultRiskScoreChange: EuiRangeProps['onChange'] = useCallback( + (e) => { const range = (e.target as HTMLInputElement).value; setValue({ value: Number(range.trim()), diff --git a/x-pack/plugins/security_solution/public/resolver/view/graph_controls.tsx b/x-pack/plugins/security_solution/public/resolver/view/graph_controls.tsx index 099f1b556e6017..fb16aaa5bdfbcb 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/graph_controls.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/graph_controls.tsx @@ -144,8 +144,8 @@ export const GraphControls = React.memo( const closePopover = useCallback(() => setPopover(null), []); - const handleZoomAmountChange = useCallback( - (event: React.ChangeEvent | React.MouseEvent) => { + const handleZoomAmountChange: EuiRangeProps['onChange'] = useCallback( + (event) => { const valueAsNumber = parseFloat( (event as React.ChangeEvent).target.value ); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts index 7b6c85d486638e..82391087283045 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_responses.ts @@ -24,6 +24,7 @@ import { DETECTION_ENGINE_RULES_BULK_CREATE, DETECTION_ENGINE_RULES_URL_FIND, } from '../../../../../common/constants'; +import { RULE_MANAGEMENT_FILTERS_URL } from '../../../../../common/detection_engine/rule_management/api/urls'; import { PREBUILT_RULES_STATUS_URL, @@ -33,6 +34,7 @@ import { getPerformBulkActionSchemaMock, getPerformBulkActionEditSchemaMock, } from '../../../../../common/detection_engine/rule_management/mocks'; + import { getCreateRulesSchemaMock } from '../../../../../common/detection_engine/rule_schema/mocks'; import type { QuerySignalsSchemaDecoded } from '../../../../../common/detection_engine/schemas/request/query_signals_index_schema'; import type { SetSignalsStatusSchemaDecoded } from '../../../../../common/detection_engine/schemas/request/set_signal_status_schema'; @@ -189,6 +191,12 @@ export const getPrepackagedRulesStatusRequest = () => path: PREBUILT_RULES_STATUS_URL, }); +export const getRuleManagementFiltersRequest = () => + requestMock.create({ + method: 'get', + path: RULE_MANAGEMENT_FILTERS_URL, + }); + export interface FindHit { page: number; perPage: number; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts index 90a37a7dbe7da5..53c4e54484e185 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/register_routes.ts @@ -20,6 +20,7 @@ import { deleteRuleRoute } from './rules/delete_rule/route'; import { exportRulesRoute } from './rules/export_rules/route'; import { findRulesRoute } from './rules/find_rules/route'; import { importRulesRoute } from './rules/import_rules/route'; +import { getRuleManagementFilters } from './rules/filters/route'; import { patchRuleRoute } from './rules/patch_rule/route'; import { readRuleRoute } from './rules/read_rule/route'; import { updateRuleRoute } from './rules/update_rule/route'; @@ -56,4 +57,7 @@ export const registerRuleManagementRoutes = ( // Rule tags readTagsRoute(router); + + // Rules filters + getRuleManagementFilters(router); }; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.test.ts new file mode 100644 index 00000000000000..969c8c1480df6b --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.test.ts @@ -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 { getRuleManagementFilters } from './route'; + +import { + getEmptyFindResult, + getFindResultWithSingleHit, + getRuleManagementFiltersRequest, +} from '../../../../routes/__mocks__/request_responses'; +import { requestContextMock, serverMock } from '../../../../routes/__mocks__'; + +describe('Rule management filters route', () => { + let server: ReturnType; + let { clients, context } = requestContextMock.createTools(); + + beforeEach(() => { + jest.clearAllMocks(); + server = serverMock.create(); + ({ clients, context } = requestContextMock.createTools()); + + clients.rulesClient.find.mockResolvedValue(getEmptyFindResult()); + + getRuleManagementFilters(server.router); + }); + + describe('status codes', () => { + test('returns 200', async () => { + const response = await server.inject( + getRuleManagementFiltersRequest(), + requestContextMock.convertContext(context) + ); + expect(response.status).toEqual(200); + }); + + test('catch error when finding rules throws error', async () => { + clients.rulesClient.find.mockImplementation(async () => { + throw new Error('Test error'); + }); + const response = await server.inject( + getRuleManagementFiltersRequest(), + requestContextMock.convertContext(context) + ); + expect(response.status).toEqual(500); + expect(response.body).toEqual({ + message: 'Test error', + status_code: 500, + }); + }); + }); + + describe('responses', () => { + test('1 rule installed, 1 custom rule and 3 tags', async () => { + clients.rulesClient.find.mockResolvedValue(getFindResultWithSingleHit()); + clients.rulesClient.aggregate.mockResolvedValue({ + alertExecutionStatus: {}, + ruleLastRunOutcome: {}, + ruleTags: ['a', 'b', 'c'], + }); + const request = getRuleManagementFiltersRequest(); + const response = await server.inject(request, requestContextMock.convertContext(context)); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + rules_summary: { + custom_count: 1, + prebuilt_installed_count: 1, + }, + aggregated_fields: { + tags: ['a', 'b', 'c'], + }, + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts new file mode 100644 index 00000000000000..d7d974aa8d9ef9 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/filters/route.ts @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { transformError } from '@kbn/securitysolution-es-utils'; +import { validate } from '@kbn/securitysolution-io-ts-utils'; +import type { RulesClient } from '@kbn/alerting-plugin/server'; +import { RuleManagementFiltersResponse } from '../../../../../../../common/detection_engine/rule_management/api/rules/filters/response_schema'; +import { RULE_MANAGEMENT_FILTERS_URL } from '../../../../../../../common/detection_engine/rule_management/api/urls'; +import { buildSiemResponse } from '../../../../routes/utils'; +import type { SecuritySolutionPluginRouter } from '../../../../../../types'; +import { findRules } from '../../../logic/search/find_rules'; +import { readTags } from '../../tags/read_tags/read_tags'; + +interface RulesCount { + prebuilt: number; + custom: number; +} + +const DEFAULT_FIND_RULES_COUNT_PARAMS = { + perPage: 0, + page: 1, + sortField: undefined, + sortOrder: undefined, + fields: undefined, +}; + +async function fetchRulesCount(rulesClient: RulesClient): Promise { + const [prebuiltRules, customRules] = await Promise.all([ + findRules({ + ...DEFAULT_FIND_RULES_COUNT_PARAMS, + rulesClient, + filter: 'alert.attributes.params.immutable: true', + }), + findRules({ + ...DEFAULT_FIND_RULES_COUNT_PARAMS, + rulesClient, + filter: 'alert.attributes.params.immutable: false', + }), + ]); + + return { + prebuilt: prebuiltRules.total, + custom: customRules.total, + }; +} + +export const getRuleManagementFilters = (router: SecuritySolutionPluginRouter) => { + router.get( + { + path: RULE_MANAGEMENT_FILTERS_URL, + validate: false, + options: { + tags: ['access:securitySolution'], + }, + }, + async (context, _, response) => { + const siemResponse = buildSiemResponse(response); + const ctx = await context.resolve(['alerting']); + const rulesClient = ctx.alerting.getRulesClient(); + + try { + const [{ prebuilt: prebuiltRulesCount, custom: customRulesCount }, tags] = + await Promise.all([fetchRulesCount(rulesClient), readTags({ rulesClient })]); + const responseBody: RuleManagementFiltersResponse = { + rules_summary: { + custom_count: customRulesCount, + prebuilt_installed_count: prebuiltRulesCount, + }, + aggregated_fields: { + tags, + }, + }; + const [validatedBody, validationError] = validate( + responseBody, + RuleManagementFiltersResponse + ); + + if (validationError != null) { + return siemResponse.error({ statusCode: 500, body: validationError }); + } else { + return response.ok({ body: validatedBody ?? {} }); + } + } catch (err) { + const error = transformError(err); + return siemResponse.error({ + body: error.message, + statusCode: error.statusCode, + }); + } + } + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.test.ts index ba9b00c01e3cff..1750cecdf16734 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.test.ts @@ -6,12 +6,7 @@ */ import { rulesClientMock } from '@kbn/alerting-plugin/server/mocks'; -import { - getRuleMock, - getFindResultWithMultiHits, -} from '../../../../routes/__mocks__/request_responses'; -import { getQueryRuleParams } from '../../../../rule_schema/mocks'; -import { readTags, convertTagsToSet, convertToTags, isTags } from './read_tags'; +import { readTags } from './read_tags'; describe('read_tags', () => { afterEach(() => { @@ -19,182 +14,16 @@ describe('read_tags', () => { }); describe('readTags', () => { - test('it should return the intersection of tags to where none are repeating', async () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = ['tag 1', 'tag 2', 'tag 3']; - - const result2 = getRuleMock(getQueryRuleParams()); - result2.id = '5baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result2.params.ruleId = 'rule-2'; - result2.tags = ['tag 1', 'tag 2', 'tag 3', 'tag 4']; - - const rulesClient = rulesClientMock.create(); - rulesClient.find.mockResolvedValue(getFindResultWithMultiHits({ data: [result1, result2] })); - - const tags = await readTags({ rulesClient }); - expect(tags).toEqual(['tag 1', 'tag 2', 'tag 3', 'tag 4']); - }); - - test('it should return the intersection of tags to where some are repeating values', async () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3']; - - const result2 = getRuleMock(getQueryRuleParams()); - result2.id = '5baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result2.params.ruleId = 'rule-2'; - result2.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3', 'tag 4']; - + test('it should return tags from the aggregation', async () => { const rulesClient = rulesClientMock.create(); - rulesClient.find.mockResolvedValue(getFindResultWithMultiHits({ data: [result1, result2] })); + rulesClient.aggregate.mockResolvedValue({ + alertExecutionStatus: {}, + ruleLastRunOutcome: {}, + ruleTags: ['tag 1', 'tag 2', 'tag 3', 'tag 4'], + }); const tags = await readTags({ rulesClient }); expect(tags).toEqual(['tag 1', 'tag 2', 'tag 3', 'tag 4']); }); - - test('it should work with no tags defined between two results', async () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = []; - - const result2 = getRuleMock(getQueryRuleParams()); - result2.id = '5baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result2.params.ruleId = 'rule-2'; - result2.tags = []; - - const rulesClient = rulesClientMock.create(); - rulesClient.find.mockResolvedValue(getFindResultWithMultiHits({ data: [result1, result2] })); - - const tags = await readTags({ rulesClient }); - expect(tags).toEqual([]); - }); - - test('it should work with a single tag which has repeating values in it', async () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = ['tag 1', 'tag 1', 'tag 1', 'tag 2']; - - const rulesClient = rulesClientMock.create(); - rulesClient.find.mockResolvedValue(getFindResultWithMultiHits({ data: [result1] })); - - const tags = await readTags({ rulesClient }); - expect(tags).toEqual(['tag 1', 'tag 2']); - }); - - test('it should work with a single tag which has empty tags', async () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = []; - - const rulesClient = rulesClientMock.create(); - rulesClient.find.mockResolvedValue(getFindResultWithMultiHits({ data: [result1] })); - - const tags = await readTags({ rulesClient }); - expect(tags).toEqual([]); - }); - }); - - describe('convertTagsToSet', () => { - test('it should convert the intersection of two tag systems without duplicates', () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3']; - - const result2 = getRuleMock(getQueryRuleParams()); - result2.id = '5baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result2.params.ruleId = 'rule-2'; - result2.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3', 'tag 4']; - - const findResult = getFindResultWithMultiHits({ data: [result1, result2] }); - const set = convertTagsToSet(findResult.data); - expect(Array.from(set)).toEqual(['tag 1', 'tag 2', 'tag 3', 'tag 4']); - }); - - test('it should with with an empty array', () => { - const set = convertTagsToSet([]); - expect(Array.from(set)).toEqual([]); - }); - }); - - describe('convertToTags', () => { - test('it should convert the two tag systems together with duplicates', () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3']; - - const result2 = getRuleMock(getQueryRuleParams()); - result2.id = '5baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result2.params.ruleId = 'rule-2'; - result2.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3', 'tag 4']; - - const findResult = getFindResultWithMultiHits({ data: [result1, result2] }); - const tags = convertToTags(findResult.data); - expect(tags).toEqual([ - 'tag 1', - 'tag 2', - 'tag 2', - 'tag 3', - 'tag 1', - 'tag 2', - 'tag 2', - 'tag 3', - 'tag 4', - ]); - }); - - test('it should filter out anything that is not a tag', () => { - const result1 = getRuleMock(getQueryRuleParams()); - result1.id = '4baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result1.params.ruleId = 'rule-1'; - result1.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3']; - - const result2 = getRuleMock(getQueryRuleParams()); - result2.id = '99979e67-19a7-455f-b452-8eded6135716'; - result2.params.ruleId = 'rule-2'; - // @ts-expect-error - delete result2.tags; - - const result3 = getRuleMock(getQueryRuleParams()); - result3.id = '5baa53f8-96da-44ee-ad58-41bccb7f9f3d'; - result3.params.ruleId = 'rule-2'; - result3.tags = ['tag 1', 'tag 2', 'tag 2', 'tag 3', 'tag 4']; - - const findResult = getFindResultWithMultiHits({ data: [result1, result2, result3] }); - const tags = convertToTags(findResult.data); - expect(tags).toEqual([ - 'tag 1', - 'tag 2', - 'tag 2', - 'tag 3', - 'tag 1', - 'tag 2', - 'tag 2', - 'tag 3', - 'tag 4', - ]); - }); - - test('it should with with an empty array', () => { - const tags = convertToTags([]); - expect(tags).toEqual([]); - }); - }); - - describe('isTags', () => { - test('it should return true if the object has a tags on it', () => { - expect(isTags({ tags: [] })).toBe(true); - }); - - test('it should return false if the object does not have a tags on it', () => { - expect(isTags({})).toBe(false); - }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.ts index 8819d95f366d89..1453bb47962468 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/tags/read_tags/read_tags.ts @@ -5,65 +5,25 @@ * 2.0. */ -import { has } from 'lodash/fp'; import type { RulesClient } from '@kbn/alerting-plugin/server'; -import { findRules } from '../../../logic/search/find_rules'; +import { enrichFilterWithRuleTypeMapping } from '../../../logic/search/enrich_filter_with_rule_type_mappings'; -export interface TagType { - id: string; - tags: string[]; -} +// This is a contrived max limit on the number of tags. In fact it can exceed this number and will be truncated to the hardcoded number. +const EXPECTED_MAX_TAGS = 65536; -export const isTags = (obj: object): obj is TagType => { - return has('tags', obj); -}; - -export const convertToTags = (tagObjects: object[]): string[] => { - const tags = tagObjects.reduce((acc, tagObj) => { - if (isTags(tagObj)) { - return [...acc, ...tagObj.tags]; - } else { - return acc; - } - }, []); - return tags; -}; - -export const convertTagsToSet = (tagObjects: object[]): Set => { - return new Set(convertToTags(tagObjects)); -}; - -// Note: This is doing an in-memory aggregation of the tags by calling each of the alerting -// records in batches of this const setting and uses the fields to try to get the least -// amount of data per record back. If saved objects at some point supports aggregations -// then this should be replaced with a an aggregation call. -// Ref: https://www.elastic.co/guide/en/kibana/master/saved-objects-api.html export const readTags = async ({ rulesClient, }: { rulesClient: RulesClient; perPage?: number; }): Promise => { - // Get just one record so we can get the total count - const firstTags = await findRules({ - rulesClient, - fields: ['tags'], - perPage: 1, - page: 1, - sortField: 'createdAt', - sortOrder: 'desc', - filter: undefined, + const res = await rulesClient.aggregate({ + options: { + fields: ['tags'], + filter: enrichFilterWithRuleTypeMapping(undefined), + maxTags: EXPECTED_MAX_TAGS, + }, }); - // Get all the rules to aggregate over all the tags of the rules - const rules = await findRules({ - rulesClient, - fields: ['tags'], - perPage: firstTags.total, - sortField: 'createdAt', - sortOrder: 'desc', - page: 1, - filter: undefined, - }); - const tagSet = convertTagsToSet(rules.data); - return Array.from(tagSet); + + return res.ruleTags ?? []; }; diff --git a/x-pack/plugins/session_view/public/components/tty_player/styles.ts b/x-pack/plugins/session_view/public/components/tty_player/styles.ts index 1e38182f947652..4a4fadc7417e1e 100644 --- a/x-pack/plugins/session_view/public/components/tty_player/styles.ts +++ b/x-pack/plugins/session_view/public/components/tty_player/styles.ts @@ -26,12 +26,6 @@ export const useStyles = (tty?: Teletype, show?: boolean) => { height: '100%', overflow: 'hidden', zIndex: 10, - '.euiRangeLevel--warning': { - backgroundColor: transparentize(colors.warning, 0.8), - }, - '.euiRangeLevel--danger': { - backgroundColor: transparentize(colors.danger, 0.8), - }, '.euiRangeTick,.euiRangeLevel': { transition: 'left 500ms', }, diff --git a/x-pack/plugins/session_view/public/components/tty_player_controls/index.tsx b/x-pack/plugins/session_view/public/components/tty_player_controls/index.tsx index ebde48b27aad47..af10b030c51494 100644 --- a/x-pack/plugins/session_view/public/components/tty_player_controls/index.tsx +++ b/x-pack/plugins/session_view/public/components/tty_player_controls/index.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useCallback, ChangeEvent, MouseEvent } from 'react'; +import React, { useCallback } from 'react'; import { EuiButtonEmpty, EuiPanel, @@ -13,6 +13,7 @@ import { EuiButtonIcon, EuiToolTip, EuiButtonIconProps, + EuiRangeProps, } from '@elastic/eui'; import { findIndex } from 'lodash'; import { ProcessStartMarker, ProcessEvent } from '../../../common/types/process_tree'; @@ -62,9 +63,9 @@ export const TTYPlayerControls = ({ css: styles.controlButton, }; - const onLineChange = useCallback( - (event: ChangeEvent | MouseEvent) => { - const line = parseInt((event?.target as HTMLInputElement).value || '0', 10); + const onLineChange: EuiRangeProps['onChange'] = useCallback( + (event) => { + const line = parseInt(event.currentTarget.value || '0', 10); onSeekLine(line); }, [onSeekLine] diff --git a/x-pack/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/index.tsx b/x-pack/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/index.tsx index e84ed7fcf34a9c..0b2223156d6344 100644 --- a/x-pack/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/index.tsx +++ b/x-pack/plugins/session_view/public/components/tty_player_controls/tty_player_controls_markers/index.tsx @@ -5,8 +5,8 @@ * 2.0. */ -import React, { ChangeEvent, MouseEvent, useMemo } from 'react'; -import { EuiRange, EuiToolTip } from '@elastic/eui'; +import React, { useMemo } from 'react'; +import { EuiRange, EuiRangeProps, EuiToolTip } from '@elastic/eui'; import type { ProcessStartMarker } from '../../../../common/types/process_tree'; import { useStyles } from './styles'; import { PlayHead } from './play_head'; @@ -15,7 +15,7 @@ type Props = { processStartMarkers: ProcessStartMarker[]; linesLength: number; currentLine: number; - onChange: (e: ChangeEvent | MouseEvent) => void; + onChange: EuiRangeProps['onChange']; onSeekLine(line: number): void; }; diff --git a/x-pack/plugins/synthetics/e2e/journeys/index.ts b/x-pack/plugins/synthetics/e2e/journeys/index.ts index a5c002cfd6880a..28ea52cca8e650 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/index.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/index.ts @@ -5,17 +5,5 @@ * 2.0. */ -export * from './data_view_permissions'; -export * from './read_only_user'; export * from './synthetics'; -export * from './alerts'; -export * from './uptime.journey'; -export * from './step_duration.journey'; -export * from './monitor_details.journey'; -export * from './monitor_name.journey'; -export * from './monitor_management.journey'; -export * from './monitor_management_enablement.journey'; -export * from './monitor_details'; -export * from './locations'; -export * from './private_locations'; -export * from './detail_flyout'; +export * from './uptime'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts index d37d682295e4c1..ae78aaa3925f7f 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/add_monitor.journey.ts @@ -7,7 +7,7 @@ import uuid from 'uuid'; import { journey, step, expect, Page } from '@elastic/synthetics'; import { FormMonitorType } from '../../../common/runtime_types'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; const customLocation = process.env.SYNTHETICS_TEST_LOCATION; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts index 0895ff0b6d9ff5..755c3a340574fd 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/alerting_default.journey.ts @@ -7,7 +7,7 @@ import { journey, step, expect, before, after } from '@elastic/synthetics'; import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { cleanSettings } from './services/settings'; journey('AlertingDefaults', async ({ page, params }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/detail_flyout.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts similarity index 95% rename from x-pack/plugins/synthetics/e2e/journeys/detail_flyout.ts rename to x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts index 2f9daf13e1d036..9018e9e8b5869e 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/detail_flyout.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/detail_flyout.ts @@ -6,7 +6,7 @@ */ import { before, expect, journey, step } from '@elastic/synthetics'; -import { syntheticsAppPageProvider } from '../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey('Test Monitor Detail Flyout', async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts index bffc68911b2f68..59cd3f00b962aa 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/getting_started.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before, Page } from '@elastic/synthetics'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; import { cleanTestMonitors } from './services/add_monitor'; journey(`Getting Started Page`, async ({ page, params }: { page: Page; params: any }) => { diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts index f2687a0ba8639c..67db65a74e77d8 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/global_parameters.journey.ts @@ -7,7 +7,7 @@ import { journey, step, before, after, expect } from '@elastic/synthetics'; import { cleanTestParams } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey(`GlobalParameters`, async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts index 7d2c3c960eef1e..091ae31bb32934 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/index.ts @@ -16,3 +16,4 @@ export * from './overview_search.journey'; export * from './private_locations.journey'; export * from './alerting_default.journey'; export * from './global_parameters.journey'; +export * from './detail_flyout'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts index 972fce27c56b8b..1cd8dc63bc0698 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/management_list.journey.ts @@ -11,7 +11,7 @@ import { cleanTestMonitors, enableMonitorManagedViaApi, } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey(`MonitorManagementList`, async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts index ab22de07846fc8..f09bfff64ba21d 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/monitor_selector.journey.ts @@ -11,7 +11,7 @@ import { cleanTestMonitors, enableMonitorManagedViaApi, } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey(`MonitorSelector`, async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts index ca04d3d3e074dc..0f2456d7349d81 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_scrolling.journey.ts @@ -11,7 +11,7 @@ import { cleanTestMonitors, enableMonitorManagedViaApi, } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey('Overview Scrolling', async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts index 1170ff26aadbd7..ac436fcb6e1e05 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/synthetics/overview_search.journey.ts @@ -11,7 +11,7 @@ import { cleanTestMonitors, enableMonitorManagedViaApi, } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey('Overview Search', async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); 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 85d1aae2f84210..617c8fa3a67d9c 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 @@ -11,7 +11,7 @@ import { cleanTestMonitors, enableMonitorManagedViaApi, } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey('OverviewSorting', async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); 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 b4480b30b4d78f..5ff6ddc6361548 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 @@ -14,7 +14,7 @@ import { cleanTestMonitors, getPrivateLocations, } from './services/add_monitor'; -import { syntheticsAppPageProvider } from '../../page_objects/synthetics_app'; +import { syntheticsAppPageProvider } from '../../page_objects/synthetics/synthetics_app'; journey(`PrivateLocationsSettings`, async ({ page, params }) => { const syntheticsApp = syntheticsAppPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/alerts/default_email_settings.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts similarity index 97% rename from x-pack/plugins/synthetics/e2e/journeys/alerts/default_email_settings.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts index ce19d8442d0565..6afcd03a4315f1 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/alerts/default_email_settings.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/default_email_settings.ts @@ -19,7 +19,7 @@ import { byTestId, waitForLoadingToFinish, } from '@kbn/observability-plugin/e2e/utils'; -import { settingsPageProvider } from '../../page_objects/settings'; +import { settingsPageProvider } from '../../../page_objects/uptime/settings'; journey('DefaultEmailSettings', async ({ page, params }) => { const settings = settingsPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/alerts/index.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/journeys/alerts/index.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/index.ts diff --git a/x-pack/plugins/synthetics/e2e/journeys/alerts/status_alert_flyouts_in_alerting_app.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts similarity index 97% rename from x-pack/plugins/synthetics/e2e/journeys/alerts/status_alert_flyouts_in_alerting_app.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts index 6e62d51359e9ca..1c9c06d562144e 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/alerts/status_alert_flyouts_in_alerting_app.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/status_alert_flyouts_in_alerting_app.ts @@ -7,7 +7,7 @@ import { journey, step, expect, before } from '@elastic/synthetics'; import { assertText, byTestId, waitForLoadingToFinish } from '@kbn/observability-plugin/e2e/utils'; -import { loginPageProvider } from '../../page_objects/login'; +import { loginPageProvider } from '../../../page_objects/login'; journey('StatusFlyoutInAlertingApp', async ({ page, params }) => { const login = loginPageProvider({ page }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts similarity index 95% rename from x-pack/plugins/synthetics/e2e/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts index 7a05e15eca524d..593ef4d51463ef 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/alerts/tls_alert_flyouts_in_alerting_app.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/alerts/tls_alert_flyouts_in_alerting_app.ts @@ -7,7 +7,7 @@ import { journey, step, before } from '@elastic/synthetics'; import { assertText, byTestId, waitForLoadingToFinish } from '@kbn/observability-plugin/e2e/utils'; -import { loginPageProvider } from '../../page_objects/login'; +import { loginPageProvider } from '../../../page_objects/login'; journey('TlsFlyoutInAlertingApp', async ({ page, params }) => { const login = loginPageProvider({ page }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/data_view_permissions.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts similarity index 96% rename from x-pack/plugins/synthetics/e2e/journeys/data_view_permissions.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts index 648337218979c7..5a78b2f61c45dd 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/data_view_permissions.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/data_view_permissions.ts @@ -12,7 +12,7 @@ import { waitForLoadingToFinish, } from '@kbn/observability-plugin/e2e/utils'; import { callKibana } from '@kbn/apm-plugin/server/test_helpers/create_apm_users/helpers/call_kibana'; -import { loginPageProvider } from '../page_objects/login'; +import { loginPageProvider } from '../../page_objects/login'; journey('DataViewPermissions', async ({ page, params }) => { const login = loginPageProvider({ page }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime/index.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/index.ts new file mode 100644 index 00000000000000..af59317232acf4 --- /dev/null +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/index.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. + */ + +export * from './data_view_permissions'; +export * from './read_only_user'; +export * from './alerts'; +export * from './uptime.journey'; +export * from './step_duration.journey'; +export * from './monitor_details.journey'; +export * from './monitor_name.journey'; +export * from './monitor_management.journey'; +export * from './monitor_management_enablement.journey'; +export * from './monitor_details'; +export * from './locations'; +export * from './private_locations'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/locations/index.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/journeys/locations/index.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/locations/index.ts diff --git a/x-pack/plugins/synthetics/e2e/journeys/locations/locations.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts similarity index 94% rename from x-pack/plugins/synthetics/e2e/journeys/locations/locations.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts index 5f555dd6e5070d..761e08e1b92435 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/locations/locations.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/locations/locations.ts @@ -6,8 +6,8 @@ */ import { journey, step, before, Page } from '@elastic/synthetics'; -import { makeChecksWithStatus } from '../../helpers/make_checks'; -import { monitorDetailsPageProvider } from '../../page_objects/monitor_details'; +import { makeChecksWithStatus } from '../../../helpers/make_checks'; +import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; journey('Observer location', async ({ page, params }: { page: Page; params: any }) => { const monitorDetails = monitorDetailsPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_details.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts similarity index 95% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_details.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts index 644c1bbdc78916..39de11dcd1e348 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_details.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details.journey.ts @@ -13,7 +13,7 @@ */ import uuid from 'uuid'; import { journey, step, expect, after, Page } from '@elastic/synthetics'; -import { monitorManagementPageProvider } from '../page_objects/monitor_management'; +import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; journey('MonitorDetails', async ({ page, params }: { page: Page; params: any }) => { const uptime = monitorManagementPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/index.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_details/index.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/index.ts diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/monitor_alerts.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts similarity index 97% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_details/monitor_alerts.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts index 5993e0839c839a..92d3411c97f704 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/monitor_alerts.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_alerts.journey.ts @@ -8,7 +8,7 @@ import { journey, step, expect, before, Page } from '@elastic/synthetics'; import { noop } from 'lodash'; import { byTestId, delay } from '@kbn/observability-plugin/e2e/utils'; -import { monitorDetailsPageProvider } from '../../page_objects/monitor_details'; +import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; const dateRangeStart = '2019-09-10T12:40:08.078Z'; const dateRangeEnd = '2019-09-11T19:40:08.078Z'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/monitor_details.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts similarity index 95% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_details/monitor_details.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts index 23ea8db3ecc485..8402253cf9be88 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/monitor_details.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/monitor_details.journey.ts @@ -7,7 +7,7 @@ import { journey, step, before, Page } from '@elastic/synthetics'; import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { monitorDetailsPageProvider } from '../../page_objects/monitor_details'; +import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; const dateRangeStart = '2019-09-10T12:40:08.078Z'; const dateRangeEnd = '2019-09-11T19:40:08.078Z'; diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/ping_redirects.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts similarity index 93% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_details/ping_redirects.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts index 8917ee5418a036..b18d9183274d87 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_details/ping_redirects.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_details/ping_redirects.journey.ts @@ -7,8 +7,8 @@ import { journey, step, expect, before, Page } from '@elastic/synthetics'; import { byTestId, delay } from '@kbn/observability-plugin/e2e/utils'; -import { makeChecksWithStatus } from '../../helpers/make_checks'; -import { monitorDetailsPageProvider } from '../../page_objects/monitor_details'; +import { makeChecksWithStatus } from '../../../helpers/make_checks'; +import { monitorDetailsPageProvider } from '../../../page_objects/uptime/monitor_details'; journey('MonitorPingRedirects', async ({ page, params }: { page: Page; params: any }) => { const monitorDetails = monitorDetailsPageProvider({ page, kibanaUrl: params.kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_management.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts similarity index 98% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_management.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts index 7c263a9a64a7d9..8074b25aa9e152 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_management.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management.journey.ts @@ -8,8 +8,8 @@ import uuid from 'uuid'; import { journey, step, expect, after, Page } from '@elastic/synthetics'; import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { monitorManagementPageProvider } from '../page_objects/monitor_management'; -import { DataStream } from '../../common/runtime_types/monitor_management'; +import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; +import { DataStream } from '../../../common/runtime_types/monitor_management'; const customLocation = process.env.SYNTHETICS_TEST_LOCATION; diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_management_enablement.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts similarity index 94% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_management_enablement.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts index 2d15ba620f370d..780b04d2458ea5 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_management_enablement.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_management_enablement.journey.ts @@ -5,7 +5,7 @@ * 2.0. */ import { journey, step, expect, after, Page } from '@elastic/synthetics'; -import { monitorManagementPageProvider } from '../page_objects/monitor_management'; +import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; journey( 'Monitor Management-enablement-superuser', diff --git a/x-pack/plugins/synthetics/e2e/journeys/monitor_name.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts similarity index 95% rename from x-pack/plugins/synthetics/e2e/journeys/monitor_name.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts index 896ef219f204cc..ed96a5eab232b3 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/monitor_name.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/monitor_name.journey.ts @@ -7,7 +7,7 @@ import uuid from 'uuid'; import { journey, step, expect, Page } from '@elastic/synthetics'; import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { monitorManagementPageProvider } from '../page_objects/monitor_management'; +import { monitorManagementPageProvider } from '../../page_objects/uptime/monitor_management'; journey(`MonitorName`, async ({ page, params }: { page: Page; params: any }) => { const name = `Test monitor ${uuid.v4()}`; diff --git a/x-pack/plugins/synthetics/e2e/journeys/private_locations/add_monitor_private_location.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts similarity index 96% rename from x-pack/plugins/synthetics/e2e/journeys/private_locations/add_monitor_private_location.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts index 63fa0a78adfbd3..3fdcf8692318dc 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/private_locations/add_monitor_private_location.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/add_monitor_private_location.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; import { assertText, byTestId, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; -import { monitorManagementPageProvider } from '../../page_objects/monitor_management'; +import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; journey('AddPrivateLocationMonitor', async ({ page, params: { kibanaUrl } }) => { const uptime = monitorManagementPageProvider({ page, kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/private_locations/index.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/journeys/private_locations/index.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/index.ts diff --git a/x-pack/plugins/synthetics/e2e/journeys/private_locations/manage_locations.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts similarity index 96% rename from x-pack/plugins/synthetics/e2e/journeys/private_locations/manage_locations.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts index 6d318d2adfc902..a28a29be15f814 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/private_locations/manage_locations.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/private_locations/manage_locations.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect, before } from '@elastic/synthetics'; import { byTestId, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; -import { monitorManagementPageProvider } from '../../page_objects/monitor_management'; +import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; journey('ManagePrivateLocation', async ({ page, params: { kibanaUrl } }) => { const uptime = monitorManagementPageProvider({ page, kibanaUrl }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/read_only_user/index.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/index.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/journeys/read_only_user/index.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/index.ts diff --git a/x-pack/plugins/synthetics/e2e/journeys/read_only_user/monitor_management.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts similarity index 90% rename from x-pack/plugins/synthetics/e2e/journeys/read_only_user/monitor_management.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts index 96746ba56a96cd..59019178f399bd 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/read_only_user/monitor_management.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/read_only_user/monitor_management.ts @@ -7,7 +7,7 @@ import { expect, journey, Page, step } from '@elastic/synthetics'; import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { monitorManagementPageProvider } from '../../page_objects/monitor_management'; +import { monitorManagementPageProvider } from '../../../page_objects/uptime/monitor_management'; journey( 'Monitor Management read only user', diff --git a/x-pack/plugins/synthetics/e2e/journeys/step_duration.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts similarity index 96% rename from x-pack/plugins/synthetics/e2e/journeys/step_duration.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts index 8883ca6e47a302..103aabdd394ac9 100644 --- a/x-pack/plugins/synthetics/e2e/journeys/step_duration.journey.ts +++ b/x-pack/plugins/synthetics/e2e/journeys/uptime/step_duration.journey.ts @@ -6,7 +6,7 @@ */ import { journey, step, expect } from '@elastic/synthetics'; -import { loginPageProvider } from '../page_objects/login'; +import { loginPageProvider } from '../../page_objects/login'; journey('StepsDuration', async ({ page, params }) => { const login = loginPageProvider({ page }); diff --git a/x-pack/plugins/synthetics/e2e/journeys/uptime.journey.ts b/x-pack/plugins/synthetics/e2e/journeys/uptime/uptime.journey.ts similarity index 100% rename from x-pack/plugins/synthetics/e2e/journeys/uptime.journey.ts rename to x-pack/plugins/synthetics/e2e/journeys/uptime/uptime.journey.ts diff --git a/x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx b/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx similarity index 98% rename from x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx rename to x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx index ed1feb153dffdd..5f4f96ad470eca 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/synthetics_app.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/synthetics/synthetics_app.tsx @@ -5,9 +5,9 @@ * 2.0. */ import { expect, Page } from '@elastic/synthetics'; -import { FormMonitorType } from '../../common/runtime_types/monitor_management'; -import { loginPageProvider } from './login'; -import { utilsPageProvider } from './utils'; +import { FormMonitorType } from '../../../common/runtime_types/monitor_management'; +import { loginPageProvider } from '../login'; +import { utilsPageProvider } from '../utils'; const SIXTY_SEC_TIMEOUT = { timeout: 60 * 1000, diff --git a/x-pack/plugins/synthetics/e2e/page_objects/monitor_details.tsx b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_details.tsx similarity index 100% rename from x-pack/plugins/synthetics/e2e/page_objects/monitor_details.tsx rename to x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_details.tsx diff --git a/x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx similarity index 98% rename from x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx rename to x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx index 540168e9917b74..4d891501433445 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/monitor_management.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/uptime/monitor_management.tsx @@ -6,9 +6,9 @@ */ import { expect, Page } from '@elastic/synthetics'; import { getQuerystring, TIMEOUT_60_SEC } from '@kbn/observability-plugin/e2e/utils'; -import { DataStream } from '../../common/runtime_types/monitor_management'; -import { loginPageProvider } from './login'; -import { utilsPageProvider } from './utils'; +import { DataStream } from '../../../common/runtime_types/monitor_management'; +import { loginPageProvider } from '../login'; +import { utilsPageProvider } from '../utils'; export function monitorManagementPageProvider({ page, diff --git a/x-pack/plugins/synthetics/e2e/page_objects/settings.tsx b/x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx similarity index 93% rename from x-pack/plugins/synthetics/e2e/page_objects/settings.tsx rename to x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx index df10f0eb71041c..16e1e59f85a5b3 100644 --- a/x-pack/plugins/synthetics/e2e/page_objects/settings.tsx +++ b/x-pack/plugins/synthetics/e2e/page_objects/uptime/settings.tsx @@ -7,8 +7,8 @@ import { expect, Page } from '@elastic/synthetics'; import { byTestId } from '@kbn/observability-plugin/e2e/utils'; -import { loginPageProvider } from './login'; -import { utilsPageProvider } from './utils'; +import { loginPageProvider } from '../login'; +import { utilsPageProvider } from '../utils'; export function settingsPageProvider({ page }: { page: Page; kibanaUrl: string }) { return { diff --git a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_locations.tsx b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_locations.tsx index c1ea2e8c537aff..dc9792bab30c05 100644 --- a/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_locations.tsx +++ b/x-pack/plugins/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_locations.tsx @@ -82,7 +82,7 @@ function getLocationStatusColor( overviewStatus: OverviewStatusState | null ) { const { - eui: { euiColorVis9, euiColorVis0, euiSideNavDisabledTextcolor }, + eui: { euiColorVis9, euiColorVis0, euiColorDisabled }, } = euiTheme; const locById = `${monitorId}-${locationLabel}`; @@ -93,5 +93,5 @@ function getLocationStatusColor( return euiColorVis0; } - return euiSideNavDisabledTextcolor; + return euiColorDisabled; } diff --git a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap b/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap index 9cd19cb2404def..58e01666035e83 100644 --- a/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap +++ b/x-pack/plugins/synthetics/public/legacy_uptime/components/common/charts/__snapshots__/donut_chart.test.tsx.snap @@ -534,7 +534,7 @@ exports[`DonutChart component passes correct props without errors for valid prop "strokeWidth": 2, }, "point": Object { - "fill": "rgba(255, 255, 255, 1)", + "fill": "#FFF", "radius": 3, "strokeWidth": 2, "visible": false, @@ -542,10 +542,10 @@ exports[`DonutChart component passes correct props without errors for valid prop }, "axes": Object { "axisLine": Object { - "stroke": "rgba(238, 240, 243, 1)", + "stroke": "#eaedf3", }, "axisTitle": Object { - "fill": "rgba(52, 55, 65, 1)", + "fill": "#343741", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", "fontSize": 12, @@ -561,7 +561,7 @@ exports[`DonutChart component passes correct props without errors for valid prop 0, ], "opacity": 1, - "stroke": "rgba(238, 240, 243, 1)", + "stroke": "#eaedf3", "strokeWidth": 1, "visible": true, }, @@ -571,13 +571,13 @@ exports[`DonutChart component passes correct props without errors for valid prop 4, ], "opacity": 1, - "stroke": "rgba(238, 240, 243, 1)", + "stroke": "#eaedf3", "strokeWidth": 1, "visible": true, }, }, "tickLabel": Object { - "fill": "rgba(105, 112, 125, 1)", + "fill": "#646a77", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", "fontSize": 10, @@ -587,13 +587,13 @@ exports[`DonutChart component passes correct props without errors for valid prop }, }, "tickLine": Object { - "stroke": "rgba(238, 240, 243, 1)", + "stroke": "#eaedf3", "strokeWidth": 1, "visible": false, }, }, "background": Object { - "color": "rgba(255, 255, 255, 1)", + "color": "#FFF", }, "barSeriesStyle": Object { "displayValue": Object { @@ -632,14 +632,14 @@ exports[`DonutChart component passes correct props without errors for valid prop }, "crosshair": Object { "band": Object { - "fill": "rgba(245, 247, 250, 1)", + "fill": "#F1F4FA", }, "crossLine": Object { "dash": Array [ 4, 4, ], - "stroke": "rgba(105, 112, 125, 1)", + "stroke": "#69707D", "strokeWidth": 1, }, "line": Object { @@ -647,44 +647,44 @@ exports[`DonutChart component passes correct props without errors for valid prop 4, 4, ], - "stroke": "rgba(105, 112, 125, 1)", + "stroke": "#69707D", "strokeWidth": 1, }, }, "goal": Object { "majorCenterLabel": Object { - "fill": "rgba(52, 55, 65, 1)", + "fill": "#343741", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", }, "majorLabel": Object { - "fill": "rgba(52, 55, 65, 1)", + "fill": "#343741", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", }, "minorCenterLabel": Object { - "fill": "rgba(105, 112, 125, 1)", + "fill": "#646a77", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", }, "minorLabel": Object { - "fill": "rgba(105, 112, 125, 1)", + "fill": "#646a77", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", }, "progressLine": Object { - "stroke": "rgba(52, 55, 65, 1)", + "stroke": "#343741", }, "targetLine": Object { - "stroke": "rgba(52, 55, 65, 1)", + "stroke": "#343741", }, "tickLabel": Object { - "fill": "rgba(105, 112, 125, 1)", + "fill": "#646a77", "fontFamily": "'Inter', 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'", }, "tickLine": Object { - "stroke": "rgba(152, 162, 179, 1)", + "stroke": "#98A2B3", }, }, "lineSeriesStyle": Object { @@ -692,7 +692,7 @@ exports[`DonutChart component passes correct props without errors for valid prop "strokeWidth": 2, }, "point": Object { - "fill": "rgba(255, 255, 255, 1)", + "fill": "#FFF", "radius": 3, "strokeWidth": 2, }, @@ -709,12 +709,12 @@ exports[`DonutChart component passes correct props without errors for valid prop "linkLabel": Object { "fontSize": 11, "maxCount": 5, - "textColor": "rgba(52, 55, 65, 1)", + "textColor": "#343741", }, "maxFontSize": 16, "minFontSize": 8, "outerSizeRatio": 1, - "sectorLineStroke": "rgba(255, 255, 255, 1)", + "sectorLineStroke": "#FFF", "sectorLineWidth": 1.5, }, "scales": Object { diff --git a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts index 2ae92fa4928bf9..f50ab8d0c35c14 100644 --- a/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/synthetics/server/synthetics_service/synthetics_service.ts @@ -294,7 +294,6 @@ export class SyntheticsService { async pushConfigs() { const service = this; const subject = new Subject(); - const output = await this.getOutput(); subject.subscribe(async (monitorConfigs) => { try { @@ -305,6 +304,8 @@ export class SyntheticsService { return null; } + const output = await this.getOutput(); + if (!output) { sendErrorTelemetryEvents(service.logger, service.server.telemetry, { reason: 'API key is not valid.', diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 96e5c2ebfe0a84..f9c4359d9285f2 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -27772,7 +27772,6 @@ "xpack.securitySolution.containers.detectionEngine.createPrePackagedRuleSuccesDescription": "Installation effectuée des règles prépackagées à partir d'Elastic", "xpack.securitySolution.containers.detectionEngine.createPrePackagedTimelineSuccesDescription": "Installation effectuée des modèles de chronologies prépackagées à partir d'Elastic", "xpack.securitySolution.containers.detectionEngine.rulesAndTimelines": "Impossible de récupérer les règles et les chronologies", - "xpack.securitySolution.containers.detectionEngine.tagFetchFailDescription": "Impossible de récupérer les balises", "xpack.securitySolution.contextMenuItemByRouter.viewDetails": "Afficher les détails", "xpack.securitySolution.createPackagePolicy.stepConfigure.cloudDropdownOption": "Charges de travail cloud (serveurs Linux ou environnements Kubernetes)", "xpack.securitySolution.createPackagePolicy.stepConfigure.cloudEventFiltersAllEvents": "Tous les événements", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 4280e72f3c6e0b..2925afe9e3a1fd 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -27745,7 +27745,6 @@ "xpack.securitySolution.containers.detectionEngine.createPrePackagedRuleSuccesDescription": "Elastic から事前にパッケージ化されているルールをインストールしました", "xpack.securitySolution.containers.detectionEngine.createPrePackagedTimelineSuccesDescription": "Elasticから事前にパッケージ化されているタイムラインテンプレートをインストールしました", "xpack.securitySolution.containers.detectionEngine.rulesAndTimelines": "ルールとタイムラインを取得できませんでした", - "xpack.securitySolution.containers.detectionEngine.tagFetchFailDescription": "タグを取得できませんでした", "xpack.securitySolution.contextMenuItemByRouter.viewDetails": "詳細を表示", "xpack.securitySolution.createPackagePolicy.stepConfigure.cloudDropdownOption": "クラウドワークロード(LinuxサーバーまたはKubernetes環境)", "xpack.securitySolution.createPackagePolicy.stepConfigure.cloudEventFiltersAllEvents": "すべてのイベント", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index e7cf8542e470a6..aac0c566a67325 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -27778,7 +27778,6 @@ "xpack.securitySolution.containers.detectionEngine.createPrePackagedRuleSuccesDescription": "已安装 Elastic 的预打包规则", "xpack.securitySolution.containers.detectionEngine.createPrePackagedTimelineSuccesDescription": "安装 Elastic 预先打包的时间线模板", "xpack.securitySolution.containers.detectionEngine.rulesAndTimelines": "无法提取规则和时间线", - "xpack.securitySolution.containers.detectionEngine.tagFetchFailDescription": "无法提取标签", "xpack.securitySolution.contextMenuItemByRouter.viewDetails": "查看详情", "xpack.securitySolution.createPackagePolicy.stepConfigure.cloudDropdownOption": "云工作负载(Linux 服务器或 Kubernetes 环境)", "xpack.securitySolution.createPackagePolicy.stepConfigure.cloudEventFiltersAllEvents": "所有事件", diff --git a/x-pack/test/accessibility/apps/observability.ts b/x-pack/test/accessibility/apps/observability.ts index ee3e3a61a0ba63..ead89c913d1e1d 100644 --- a/x-pack/test/accessibility/apps/observability.ts +++ b/x-pack/test/accessibility/apps/observability.ts @@ -6,8 +6,6 @@ */ // a11y tests for spaces, space selection and space creation and feature controls - -import { describe } from 'mocha'; import { FtrProviderContext } from '../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/aggregate.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/aggregate.ts index ff24b25d89fa2c..602bf75a7ef2b3 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/aggregate.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/aggregate.ts @@ -137,6 +137,35 @@ export default function createAggregateTests({ getService }: FtrProviderContext) }); }); + describe('tags limit', () => { + it('should be 50 be default', async () => { + const numOfAlerts = 3; + const numOfTagsPerAlert = 30; + + await Promise.all( + [...Array(numOfAlerts)].map(async (_, alertIndex) => { + const okAlertId = await createTestAlert( + { + rule_type_id: 'test.noop', + schedule: { interval: '1s' }, + tags: [...Array(numOfTagsPerAlert)].map( + (__, i) => `tag-${i + numOfTagsPerAlert * alertIndex}` + ), + }, + 'ok' + ); + objectRemover.add(Spaces.space1.id, okAlertId, 'rule', 'alerting'); + }) + ); + + const response = await supertest.get( + `${getUrlPrefix(Spaces.space1.id)}/internal/alerting/rules/_aggregate` + ); + + expect(response.body.rule_tags.length).to.eql(50); + }); + }); + describe('legacy', () => { it('should aggregate alert status totals', async () => { const NumOkAlerts = 4; diff --git a/x-pack/test/api_integration/apis/search/search.ts b/x-pack/test/api_integration/apis/search/search.ts index e7dfbb52ec701e..f4f3c2e4140032 100644 --- a/x-pack/test/api_integration/apis/search/search.ts +++ b/x-pack/test/api_integration/apis/search/search.ts @@ -6,7 +6,6 @@ */ import expect from '@kbn/expect'; -import type { Context } from 'mocha'; import { parse as parseCookie } from 'tough-cookie'; import { FtrProviderContext } from '../../ftr_provider_context'; import { verifyErrorResponse } from '../../../../../test/api_integration/apis/search/verify_error'; @@ -30,7 +29,7 @@ export default function ({ getService }: FtrProviderContext) { }, }); - async function markRequiresShardDelayAgg(testContext: Context) { + async function markRequiresShardDelayAgg(testContext: Mocha.Context) { const body = await es.info(); if (!body.version.number.includes('SNAPSHOT')) { log.debug('Skipping because this build does not have the required shard_delay agg'); diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/get_rule_management_filters.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/get_rule_management_filters.ts new file mode 100644 index 00000000000000..9d95505e3db658 --- /dev/null +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/get_rule_management_filters.ts @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { DETECTION_ENGINE_RULES_URL } from '@kbn/security-solution-plugin/common/constants'; +import { RULE_MANAGEMENT_FILTERS_URL } from '@kbn/security-solution-plugin/common/detection_engine/rule_management/api/urls'; +import { PREBUILT_RULES_URL } from '@kbn/security-solution-plugin/common/detection_engine/prebuilt_rules'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; +import { deleteAllAlerts, getSimpleRule } from '../../utils'; +import { createPrebuiltRuleAssetSavedObjects } from '../../utils/create_prebuilt_rule_saved_objects'; +import { deleteAllPrebuiltRules } from '../../utils/delete_all_prebuilt_rules'; + +// eslint-disable-next-line import/no-default-export +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + const es = getService('es'); + const log = getService('log'); + + describe('get_rule_management_filters', () => { + beforeEach(async () => { + await deleteAllAlerts(supertest, log); + }); + + it('should return the correct result when there are no rules', async () => { + const { body } = await supertest + .get(RULE_MANAGEMENT_FILTERS_URL) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + expect(body).to.eql({ + rules_summary: { + custom_count: 0, + prebuilt_installed_count: 0, + }, + aggregated_fields: { + tags: [], + }, + }); + }); + + describe('when there is a custom rule', () => { + beforeEach(async () => { + const rule = getSimpleRule(); + rule.tags = ['tag-a']; + + await supertest + .post(DETECTION_ENGINE_RULES_URL) + .set('kbn-xsrf', 'true') + .send(rule) + .expect(200); + }); + + it('should return the correct number of custom rules', async () => { + const { body } = await supertest + .get(RULE_MANAGEMENT_FILTERS_URL) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + expect(body.rules_summary.custom_count).to.eql(1); + expect(body.rules_summary.prebuilt_installed_count).to.eql(0); + }); + + it('should return correct tags', async () => { + const { body } = await supertest + .get(RULE_MANAGEMENT_FILTERS_URL) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + expect(body.aggregated_fields.tags).to.eql(['tag-a']); + }); + }); + + describe('when there are installed prebuilt rules', () => { + beforeEach(async () => { + await createPrebuiltRuleAssetSavedObjects(es); + await supertest.put(PREBUILT_RULES_URL).set('kbn-xsrf', 'true').send().expect(200); + }); + + afterEach(async () => { + await deleteAllPrebuiltRules(es); + }); + + it('should return the correct number of installed prepacked rules after pre-packaged rules have been installed', async () => { + const { body } = await supertest + .get(RULE_MANAGEMENT_FILTERS_URL) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + expect(body.rules_summary.prebuilt_installed_count).to.eql(3); + expect(body.rules_summary.custom_count).to.eql(0); + }); + + it('should return installed prebuilt rules tags', async () => { + const { body } = await supertest + .get(RULE_MANAGEMENT_FILTERS_URL) + .set('kbn-xsrf', 'true') + .send() + .expect(200); + + expect(body.aggregated_fields.tags).to.eql(['test-tag-1', 'test-tag-2', 'test-tag-3']); + }); + }); + }); +}; diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/index.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/index.ts index 690498a2875307..24e0d5389a0181 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/index.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group1/index.ts @@ -31,5 +31,6 @@ export default ({ loadTestFile }: FtrProviderContext): void => { loadTestFile(require.resolve('./find_rules')); loadTestFile(require.resolve('./find_rule_exception_references')); loadTestFile(require.resolve('./get_prepackaged_rules_status')); + loadTestFile(require.resolve('./get_rule_management_filters')); }); }; diff --git a/x-pack/test/detection_engine_api_integration/utils/create_prebuilt_rule_saved_objects.ts b/x-pack/test/detection_engine_api_integration/utils/create_prebuilt_rule_saved_objects.ts index 15778e41a3be65..c97f97d3a62a34 100644 --- a/x-pack/test/detection_engine_api_integration/utils/create_prebuilt_rule_saved_objects.ts +++ b/x-pack/test/detection_engine_api_integration/utils/create_prebuilt_rule_saved_objects.ts @@ -21,6 +21,7 @@ export const SAMPLE_PREBUILT_RULES = [ 'security-rule': { ...getPrebuiltRuleWithExceptionsMock(), rule_id: ELASTIC_SECURITY_RULE_ID, + tags: ['test-tag-1'], enabled: true, }, type: 'security-rule', @@ -33,6 +34,7 @@ export const SAMPLE_PREBUILT_RULES = [ 'security-rule': { ...getPrebuiltRuleMock(), rule_id: '000047bb-b27a-47ec-8b62-ef1a5d2c9e19', + tags: ['test-tag-2'], }, type: 'security-rule', references: [], @@ -44,6 +46,7 @@ export const SAMPLE_PREBUILT_RULES = [ 'security-rule': { ...getPrebuiltRuleMock(), rule_id: '00140285-b827-4aee-aa09-8113f58a08f3', + tags: ['test-tag-3'], }, type: 'security-rule', references: [], diff --git a/x-pack/test/fleet_api_integration/helpers.ts b/x-pack/test/fleet_api_integration/helpers.ts index c21a9e01b33099..c0f1543ee6e857 100644 --- a/x-pack/test/fleet_api_integration/helpers.ts +++ b/x-pack/test/fleet_api_integration/helpers.ts @@ -5,11 +5,10 @@ * 2.0. */ -import { Context } from 'mocha'; import { ToolingLog } from '@kbn/tooling-log'; import { FtrProviderContext } from '../api_integration/ftr_provider_context'; -export function warnAndSkipTest(mochaContext: Context, log: ToolingLog) { +export function warnAndSkipTest(mochaContext: Mocha.Context, log: ToolingLog) { log.warning( 'disabling tests because DockerServers service is not enabled, set FLEET_PACKAGE_REGISTRY_PORT to run them' ); diff --git a/x-pack/test/functional/apps/aiops/test_data.ts b/x-pack/test/functional/apps/aiops/test_data.ts index 4a07dcc8a7433b..f544225f14c971 100644 --- a/x-pack/test/functional/apps/aiops/test_data.ts +++ b/x-pack/test/functional/apps/aiops/test_data.ts @@ -55,7 +55,7 @@ export const artificialLogDataViewTestData: TestData = { totalDocCountFormatted: '8,400', analysisGroupsTable: [ { group: 'user: Peter', docCount: '1981' }, - { group: 'response_code: 500url: login.php', docCount: '792' }, + { group: 'response_code: 500url: home.phpurl: login.php', docCount: '792' }, ], analysisTable: [ { diff --git a/x-pack/test/functional/apps/canvas/datasource.ts b/x-pack/test/functional/apps/canvas/datasource.ts new file mode 100644 index 00000000000000..c1cf907bc53424 --- /dev/null +++ b/x-pack/test/functional/apps/canvas/datasource.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function canvasExpressionTest({ getService, getPageObjects }: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const PageObjects = getPageObjects(['canvas', 'common']); + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const monacoEditor = getService('monacoEditor'); + + describe('datasource', function () { + // there is an issue with FF not properly clicking on workpad elements + this.tags('skipFirefox'); + + before(async () => { + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await esArchiver.loadIfNeeded( + 'test/functional/fixtures/es_archiver/kibana_sample_data_flights' + ); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/legacy.json'); + await kibanaServer.importExport.load( + 'test/functional/fixtures/kbn_archiver/kibana_sample_data_flights_index_pattern.json' + ); + + await kibanaServer.uiSettings.update({ + defaultIndex: 'kibana_sample_data_flights', + }); + + // create new test workpad + await PageObjects.common.navigateToApp('canvas'); + await PageObjects.canvas.createNewWorkpad(); + }); + + after(async () => { + await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await esArchiver.unload('test/functional/fixtures/es_archiver/kibana_sample_data_flights'); + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/legacy.json'); + await kibanaServer.importExport.unload( + 'test/functional/fixtures/kbn_archiver/kibana_sample_data_flights_index_pattern.json' + ); + }); + + describe('esdocs', function () { + it('sidebar shows to esdocs datasource settings', async () => { + await PageObjects.canvas.createNewDatatableElement(); + + // find the first workpad element (a markdown element) and click it to select it + await testSubjects.click('canvasWorkpadPage > canvasWorkpadPageElementContent', 20000); + + // open Data tab + await PageObjects.canvas.openDatasourceTab(); + + // change datasource to esdocs + await PageObjects.canvas.changeDatasourceTo('esdocs'); + + // click data view select + await testSubjects.click('canvasDataViewSelect'); + + // check that data view options list is displayed + expect(await testSubjects.exists('canvasDataViewSelect-optionsList')); + + // check that the logstash-* data view without name attribute is available + expect(await testSubjects.exists('canvasDataViewSelect__logstash-*')); + }); + + it('updates expression to use esdocs', async () => { + await testSubjects.click('canvasDataViewSelect__logstash-*'); + + await PageObjects.canvas.saveDatasourceChanges(); + + await PageObjects.canvas.openExpressionEditor(); + await monacoEditor.waitCodeEditorReady('canvasExpressionInput'); + expect(await monacoEditor.getCodeEditorValue()).contain('esdocs index="logstash-*"'); + }); + }); + }); +} diff --git a/x-pack/test/functional/apps/canvas/index.ts b/x-pack/test/functional/apps/canvas/index.ts index 7f3487314d4d81..7b4192fbd3924d 100644 --- a/x-pack/test/functional/apps/canvas/index.ts +++ b/x-pack/test/functional/apps/canvas/index.ts @@ -43,6 +43,7 @@ export default ({ loadTestFile, getService }: FtrProviderContext) => { loadTestFile(require.resolve('./expression')); loadTestFile(require.resolve('./filters')); loadTestFile(require.resolve('./custom_elements')); + loadTestFile(require.resolve('./datasource')); loadTestFile(require.resolve('./feature_controls/canvas_security')); loadTestFile(require.resolve('./feature_controls/canvas_spaces')); loadTestFile(require.resolve('./embeddables/lens')); 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 c72f98d594828f..21dd61e9d5249c 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 @@ -64,7 +64,7 @@ export default function ({ getService }: FtrProviderContext) { // markers { color: '#5078AA', percentage: 15 }, // grey boilerplate - { color: '#6A717D', percentage: 12 }, + { color: '#69707D', percentage: 12 }, ], scatterplotMatrixColorStatsResults: [ // outlier markers @@ -72,7 +72,7 @@ export default function ({ getService }: FtrProviderContext) { // regular markers { color: '#6496BE', percentage: 15 }, // tick/grid/axis - { color: '#6E6E82', percentage: 11 }, + { color: '#69707D', percentage: 12 }, { color: '#D2DCE6', percentage: 10 }, // anti-aliasing { color: '#F5F7FA', percentage: 35 }, diff --git a/x-pack/test/functional/page_objects/canvas_page.ts b/x-pack/test/functional/page_objects/canvas_page.ts index a51b878b6af309..5cc801be9fbeb3 100644 --- a/x-pack/test/functional/page_objects/canvas_page.ts +++ b/x-pack/test/functional/page_objects/canvas_page.ts @@ -76,12 +76,30 @@ export function CanvasPageProvider({ getService, getPageObjects }: FtrProviderCo expect(disabledAttr).to.be('true'); }, + async openAddElementMenu() { + log.debug('openAddElementsMenu'); + await testSubjects.click('add-element-button'); + }, + + async openAddChartMenu() { + log.debug('openAddChartMenu'); + await this.openAddElementMenu(); + await testSubjects.click('canvasAddElementMenu__Chart'); + }, + + async createNewDatatableElement() { + log.debug('createNewDatatableElement'); + await this.openAddChartMenu(); + await testSubjects.click('canvasAddElementMenu__table'); + }, + async openSavedElementsModal() { await testSubjects.click('add-element-button'); await testSubjects.click('saved-elements-menu-option'); await PageObjects.common.sleep(1000); // give time for modal animation to complete }, + async closeSavedElementsModal() { await testSubjects.click('saved-elements-modal-close-button'); }, @@ -157,5 +175,21 @@ export function CanvasPageProvider({ getService, getPageObjects }: FtrProviderCo await testSubjects.click('canvasWorkpadEditMenuButton'); await testSubjects.click('canvasEditMenuDeleteButton'); }, + + async openDatasourceTab() { + log.debug('CanvasPage.openDataTab'); + await testSubjects.click('canvasSidebarDataTab'); + }, + + async changeDatasourceTo(datasourceName: string) { + log.debug('CanvasPage.changeDatasourceTo'); + await testSubjects.click('canvasChangeDatasourceButton'); + await testSubjects.click(`canvasDatasourceCard__${datasourceName}`); + }, + + async saveDatasourceChanges() { + log.debug('CanvasPage.saveDatasourceChanges'); + await testSubjects.click('canvasSaveDatasourceButton'); + }, }; } diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 402b915247fc38..f825153c69d201 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -5,7 +5,7 @@ "emitDeclarationOnly": true, "declaration": true, "declarationMap": true, - "types": ["node"], + "types": ["node", "@kbn/ambient-ftr-types"], // there is still a decent amount of JS in this plugin and we are taking // advantage of the fact that TS doesn't know the types of that code and // gives us `any`. Once that code is converted to .ts we can remove this diff --git a/yarn.lock b/yarn.lock index 1f0aa7001063cc..d7a0ce8f499433 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1527,10 +1527,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@70.4.0": - version "70.4.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-70.4.0.tgz#0ce7520ac96e137f05861224a6cd0a029c4dc0bc" - integrity sha512-w/pMxC0drBtzy3RQzHBLLbKRgy4EUTSetej0eg7m87copRZOwWXqlrIt52uuUj9txenxmpSonnnvSB+1a7fCfg== +"@elastic/eui@71.0.0": + version "71.0.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-71.0.0.tgz#0d77ca3e513ebd59fee0be49abd7acf4b04206aa" + integrity sha512-5iHvGSJCJjin/VPHBT0RdHVKUCClH5PqXnygsr6LCkyQzj+frKiK0w28dK5EBReDp5+SRoF+VYSVse4Ia2DkLQ== dependencies: "@types/chroma-js" "^2.0.0" "@types/lodash" "^4.14.160" @@ -2709,6 +2709,10 @@ version "0.0.0" uid "" +"@kbn/ambient-ftr-types@link:bazel-bin/packages/kbn-ambient-ftr-types": + version "0.0.0" + uid "" + "@kbn/ambient-storybook-types@link:bazel-bin/packages/kbn-ambient-storybook-types": version "0.0.0" uid "" @@ -7014,7 +7018,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7", "@types/json-schema@^7.0.0", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -7194,11 +7198,6 @@ dependencies: "@types/node" "*" -"@types/mocha@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - "@types/mock-fs@^4.13.1": version "4.13.1" resolved "https://registry.yarnpkg.com/@types/mock-fs/-/mock-fs-4.13.1.tgz#9201554ceb23671badbfa8ac3f1fa9e0706305be" @@ -17963,7 +17962,7 @@ js-yaml@3.14.1, js-yaml@^3.13.1, js-yaml@^3.14.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@4.1.0, js-yaml@^4.1.0: +js-yaml@4.1.0, js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -19912,6 +19911,19 @@ monaco-editor@*, monaco-editor@^0.24.0: resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.24.0.tgz#990b55096bcc95d08d8d28e55264c6eb17707269" integrity sha512-o1f0Lz6ABFNTtnEqqqvlY9qzNx24rQZx1RgYNQ8SkWkE+Ka63keHH/RqxQ4QhN4fs/UYOnvAtEUZsPrzccH++A== +monaco-yaml@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/monaco-yaml/-/monaco-yaml-3.2.1.tgz#45ce9f7f8140dc26249ac99eb0a9e5a9ab9beb87" + integrity sha512-2geAd5I7H1SMgwTHBuyPAPK9WTAzxbl9XwDl5h6NY6n9j4qnlLLQKK1i0P9cAmUiV2uaiViz69RLNWqVU5BVsg== + dependencies: + "@types/json-schema" "^7.0.0" + js-yaml "^4.0.0" + path-browserify "^1.0.0" + prettier "2.0.5" + vscode-languageserver-textdocument "^1.0.0" + vscode-languageserver-types "^3.0.0" + yaml-language-server-parser "^0.1.0" + monitor-event-loop-delay@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/monitor-event-loop-delay/-/monitor-event-loop-delay-1.0.0.tgz#b5ab78165a3bb93f2b275c50d01430c7f155d1f7" @@ -21218,7 +21230,7 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== -path-browserify@^1.0.1: +path-browserify@^1.0.0, path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== @@ -21953,6 +21965,11 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" +prettier@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== + "prettier@>=2.2.1 <=2.3.0": version "2.2.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" @@ -27545,6 +27562,16 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vscode-languageserver-textdocument@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz#16df468d5c2606103c90554ae05f9f3d335b771b" + integrity sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg== + +vscode-languageserver-types@^3.0.0: + version "3.17.2" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" + integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== + vt-pbf@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac" @@ -28319,6 +28346,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-language-server-parser@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/yaml-language-server-parser/-/yaml-language-server-parser-0.1.3.tgz#f0e9082068291c7c330eefa1f3c9f1b4c3c54183" + integrity sha512-xD2I+6M/vqQvcy4ded8JpXUaDHXmZMdhIO3OpuiFxstutwnW4whrfDzNcrsfXVdgMWqOUpdv3747Q081PFN1+g== + yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"