diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 77efc367450b5..8da0cbc8216cf 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2676,6 +2676,52 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "actions", + "id": "def-server.ActionType.getKibanaPrivileges", + "type": "Function", + "tags": [], + "label": "getKibanaPrivileges", + "description": [ + "\nAdditional Kibana privileges to be checked by the actions framework.\nUse it if you want to perform extra authorization checks based on a Kibana feature.\nFor example, you can define the privileges a users needs to have to execute\na Case or OsQuery system action.\n\nThe list of the privileges follows the Kibana privileges format usually generated with `security.authz.actions.*.get(...)`.\n\nIt only works with system actions and only when executing an action.\nFor all other scenarios they will be ignored" + ], + "signature": [ + "((args?: { params?: Params | undefined; } | undefined) => string[]) | undefined" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.ActionType.getKibanaPrivileges.$1", + "type": "Object", + "tags": [], + "label": "args", + "description": [], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.ActionType.getKibanaPrivileges.$1.params", + "type": "Uncategorized", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "Params | undefined" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, { "parentPluginId": "actions", "id": "def-server.ActionType.renderParameterTemplates", @@ -3228,7 +3274,7 @@ "label": "ActionsAuthorization", "description": [], "signature": [ - "{ ensureAuthorized: (operation: string, actionTypeId?: string | undefined) => Promise; }" + "{ ensureAuthorized: ({ operation, actionTypeId, additionalPrivileges, }: { operation: string; actionTypeId?: string | undefined; additionalPrivileges?: string[] | undefined; }) => Promise; }" ], "path": "x-pack/plugins/actions/server/index.ts", "deprecated": false, @@ -3267,7 +3313,7 @@ }, "<", "ActionTypeConfig", - ">>; get: ({ id }: { id: string; }) => Promise<", + ">>; get: ({ id, throwIfSystemAction, }: { id: string; throwIfSystemAction?: boolean | undefined; }) => Promise<", { "pluginId": "actions", "scope": "server", @@ -3277,7 +3323,7 @@ }, "<", "ActionTypeConfig", - ">>; getAll: () => Promise<", + ">>; getAll: ({ includeSystemActions }?: GetAllOptions) => Promise<", { "pluginId": "actions", "scope": "server", @@ -3285,7 +3331,7 @@ "section": "def-server.FindActionResult", "text": "FindActionResult" }, - "[]>; getBulk: (ids: string[]) => Promise<", + "[]>; getBulk: (ids: string[], throwIfSystemAction?: boolean) => Promise<", { "pluginId": "actions", "scope": "server", @@ -3321,7 +3367,7 @@ "section": "def-server.RunNowResult", "text": "RunNowResult" }, - ">; listTypes: (featureId?: string | undefined) => Promise<", + ">; listTypes: ({ featureId, includeSystemActionTypes, }?: ListTypesOptions) => Promise<", { "pluginId": "actions", "scope": "common", diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 2048fec8ba7e0..6333988be22ef 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 272 | 10 | 267 | 27 | +| 275 | 10 | 269 | 27 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 43f1c5991d66f..58f029c9d474e 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2023-07-20 +date: 2023-07-24 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 7c81d94bec9a1..3be55cd1d487b 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index e4381d9cf14e4..8c2e3125e7885 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index a9e0d44d03be5..86ca9300c8707 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 70c7918017723..d9d501df2425e 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index b95fb8060c194..451f7d6d33f80 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2023-07-20 +date: 2023-07-24 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 f4a262d90f70b..aa0358f7e4210 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2023-07-20 +date: 2023-07-24 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 8861ec6416901..9ecc55af7492f 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2023-07-20 +date: 2023-07-24 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 f65136d52c4cf..3fc3ec064c5b4 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2023-07-20 +date: 2023-07-24 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 0c637a287e8a9..97418f8b31b1e 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2023-07-20 +date: 2023-07-24 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 d30a00ae27b64..2f981770cdf03 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2023-07-20 +date: 2023-07-24 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 05c4db0220071..517cde284ab29 100644 --- a/api_docs/cloud_chat.mdx +++ b/api_docs/cloud_chat.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChat title: "cloudChat" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChat plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChat'] --- import cloudChatObj from './cloud_chat.devdocs.json'; diff --git a/api_docs/cloud_chat_provider.mdx b/api_docs/cloud_chat_provider.mdx index 32fc5aeffcb4f..409ab5be424a3 100644 --- a/api_docs/cloud_chat_provider.mdx +++ b/api_docs/cloud_chat_provider.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudChatProvider title: "cloudChatProvider" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudChatProvider plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudChatProvider'] --- import cloudChatProviderObj from './cloud_chat_provider.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index b8481afe75876..aa8af27faaadb 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index ef7240b7ebab2..09947d662e000 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index 0835bf263ffd2..99e80c5a18eeb 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2023-07-20 +date: 2023-07-24 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 e02df17f4797d..91914937b6696 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2023-07-20 +date: 2023-07-24 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 c7e84450d194e..dafec87bb8334 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 7d0477849e4c3..431ca10b83250 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index bccec634a4f4b..bb63d34537ff5 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index e760e0ec452fe..5bd5eba882521 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2023-07-20 +date: 2023-07-24 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 8c774bf13f54d..3d96815cf9ddd 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2023-07-20 +date: 2023-07-24 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 b1423ae688dc6..50764401c8008 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index ce191aa1123f9..343f0f187b932 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 6cb7028cdec01..8d44a06320c39 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2023-07-20 +date: 2023-07-24 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 3059eb4875ec3..1996434aace9f 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2023-07-20 +date: 2023-07-24 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 2842eb4a16a62..ac761b8e8f615 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2023-07-20 +date: 2023-07-24 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 72c3aba8853cd..837fd82c62468 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2023-07-20 +date: 2023-07-24 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 8fcd6ca096a5e..cff2990395d2a 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index c9fe8fb21f8cb..141aea0d162ec 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2023-07-20 +date: 2023-07-24 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 adfbbe0b931e2..8e7803cc99057 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2023-07-20 +date: 2023-07-24 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 7b775c10b6a39..38ea388d075da 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index f192aa1f735d8..9f9232df19008 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 8271eb633113a..33bfd8a2f4176 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index a9f88dc247093..738dbceb6f3a4 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 23266058834e4..152ac0c9a0f1d 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -144,7 +144,7 @@ "section": "def-public.SavedSearch", "text": "SavedSearch" }, - " | undefined>; onCreateDefaultAdHocDataView: (dataViewSpec: ", + " | undefined>; createAndAppendAdHocDataView: (dataViewSpec: ", { "pluginId": "dataViews", "scope": "common", @@ -152,7 +152,15 @@ "section": "def-common.DataViewSpec", "text": "DataViewSpec" }, - ") => Promise; onDataViewCreated: (dataView: ", + ") => Promise<", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ">; onDataViewCreated: (dataView: ", { "pluginId": "dataViews", "scope": "common", diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index cd4cfc1d0e892..64c8cd748110d 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2023-07-20 +date: 2023-07-24 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 98015a77d4a98..d60a57e9722c9 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 1301dc7a2a4f8..8447526758185 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index a2590f312ee65..5acc88dc59aab 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index daddf3374bcd0..0412623c4a93f 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2023-07-20 +date: 2023-07-24 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 02c8beb1d5bed..2f558fc52d0bf 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2023-07-20 +date: 2023-07-24 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 a6e2107a2781c..16ec85e0318cb 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2023-07-20 +date: 2023-07-24 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 390a0c369b003..980a387be95df 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2023-07-20 +date: 2023-07-24 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 b0fc696f93af6..73bbec743d57e 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2023-07-20 +date: 2023-07-24 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 b85c77b1353d3..c022d40d9ea43 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 2f4c7d34342dc..4a3add6e01000 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index bc1b7f1e40f2a..cc43ea1a61146 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2023-07-20 +date: 2023-07-24 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 1452efc3ccf08..2d54c99194d86 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2023-07-20 +date: 2023-07-24 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 b8e9f061560c5..589ffe8c7b85c 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2023-07-20 +date: 2023-07-24 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 cba670a39d608..a4bd3c4933ce9 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2023-07-20 +date: 2023-07-24 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 74137afc17dbc..913858ae57e1b 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2023-07-20 +date: 2023-07-24 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 2f5807bbf2c6d..a8e1f1f327aac 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2023-07-20 +date: 2023-07-24 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 0a36d450166c1..675f05388a1a5 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2023-07-20 +date: 2023-07-24 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 a09aa038494b1..a65a9a8503d3e 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2023-07-20 +date: 2023-07-24 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 bc467a95f7d2a..fef8a16f3bb93 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2023-07-20 +date: 2023-07-24 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 fffb646bef74c..af09e4054950f 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2023-07-20 +date: 2023-07-24 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 5cde16ec19504..ed365ad68952e 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2023-07-20 +date: 2023-07-24 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 bc7710f626a78..26b51db8c893c 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2023-07-20 +date: 2023-07-24 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 d57ebbe54297e..4f482e4f89f20 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2023-07-20 +date: 2023-07-24 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 a2e25acedca71..9f4a52775fc68 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2023-07-20 +date: 2023-07-24 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 144afa2bc84a6..19a68028b0461 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2023-07-20 +date: 2023-07-24 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 2982db4680850..40783989b462f 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2023-07-20 +date: 2023-07-24 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 b2d86dc6c1cfd..a32cb8088f74b 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 2b7991e019f54..7dd92a6ceac8f 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2023-07-20 +date: 2023-07-24 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 da0648ba1fa24..faec2f609c3f8 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2023-07-20 +date: 2023-07-24 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 523c25656cf83..7e418461e80ff 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2023-07-20 +date: 2023-07-24 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 75d231af5de5f..7949d49a5f9af 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2023-07-20 +date: 2023-07-24 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 f91d599ddf681..d606445acda19 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2023-07-20 +date: 2023-07-24 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 7e0c1514553bb..768929ebc71cb 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 6a72cd9913613..7a77f5003154f 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 7de7975665f13..177500b95c220 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2023-07-20 +date: 2023-07-24 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 23d7c394f8e13..99ef501f27afc 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2023-07-20 +date: 2023-07-24 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 ae79ca13aa95f..f6287d32f3f0f 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2023-07-20 +date: 2023-07-24 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 6bde33e4e402b..3d8cb6f02a71a 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2023-07-20 +date: 2023-07-24 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 2f2f2deb10262..df917b1b0cfcf 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2023-07-20 +date: 2023-07-24 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 2046e0566882c..222a07588f4db 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2023-07-20 +date: 2023-07-24 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 fc6cd3d8f66bc..8a3333614b6ef 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2023-07-20 +date: 2023-07-24 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 ead30fd831d92..422445121250a 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index f3076136c0277..52cf43b1ae491 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index ab14195c15091..3a1ba2203bf26 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 7a94b38c05096..d4b1105b4d77d 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index f122edd4401a1..f16c472439e3e 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2023-07-20 +date: 2023-07-24 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 29b926dce16a7..d5cec25b58f15 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2023-07-20 +date: 2023-07-24 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 c8380f8763366..8bc637e69fffc 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 680f42bc3641c..a41b2d2177c2d 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2023-07-20 +date: 2023-07-24 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 7332e477405d1..6e7d932ca330f 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2023-07-20 +date: 2023-07-24 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 e6e0a50d5c447..70793ab646e94 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2023-07-20 +date: 2023-07-24 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 bced0c20cdc36..5e10bfcf1a73c 100644 --- a/api_docs/kbn_analytics_shippers_gainsight.mdx +++ b/api_docs/kbn_analytics_shippers_gainsight.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-gainsight title: "@kbn/analytics-shippers-gainsight" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-gainsight plugin -date: 2023-07-20 +date: 2023-07-24 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 8fdfe8423fc2b..c09ab2c0e8c8e 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2023-07-20 +date: 2023-07-24 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 bcfbdff46b083..77f8b1edd7b2a 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 5fa8c3fe95794..973c9fe6f3ab4 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index b4d21c063c0f8..061092d33c8bd 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 3ff842f115ea7..bc26c5b37c8a9 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2023-07-20 +date: 2023-07-24 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 eaa150a7b6758..cbf19ca053352 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 86316c32c20bc..b50f54ae3a990 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 0a1523bc6a68f..7272389786dcf 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index a39778a801567..d81652f3fa39e 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2023-07-20 +date: 2023-07-24 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 16500199cd6e4..4d255f01a5490 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2023-07-20 +date: 2023-07-24 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 568f200a41b05..74604cc561d35 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2023-07-20 +date: 2023-07-24 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 9ba656d7c845e..4ba1c89c5e8b2 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2023-07-20 +date: 2023-07-24 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 c095e5ba84924..7d0578f06ebd6 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 6aec3930e682f..335a47543144d 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mocks.mdx b/api_docs/kbn_code_editor_mocks.mdx index ba52e349a47a0..bfc480bcfca3d 100644 --- a/api_docs/kbn_code_editor_mocks.mdx +++ b/api_docs/kbn_code_editor_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mocks title: "@kbn/code-editor-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mocks'] --- import kbnCodeEditorMocksObj from './kbn_code_editor_mocks.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 234bd71ee1b42..47482c822d82b 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.devdocs.json b/api_docs/kbn_config.devdocs.json index dde86c581edb7..20f8007793e7e 100644 --- a/api_docs/kbn_config.devdocs.json +++ b/api_docs/kbn_config.devdocs.json @@ -39,7 +39,9 @@ "\nInformation about Kibana package (version, build number etc.)." ], "signature": [ - "{ readonly version: string; readonly branch: string; readonly buildNum: number; readonly buildSha: string; readonly buildDate: Date; readonly dist: boolean; }" + "{ readonly version: string; readonly branch: string; readonly buildNum: number; readonly buildSha: string; readonly buildDate: Date; readonly buildFlavor: ", + "BuildFlavor", + "; readonly dist: boolean; }" ], "path": "packages/kbn-config/src/env.ts", "deprecated": false, @@ -970,6 +972,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/config", + "id": "def-common.PackageInfo.buildFlavor", + "type": "CompoundType", + "tags": [], + "label": "buildFlavor", + "description": [], + "signature": [ + "\"serverless\" | \"traditional\"" + ], + "path": "packages/kbn-config/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/config", "id": "def-common.PackageInfo.dist", diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index bd4b8713d576a..5d99cd7f045ad 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 74 | 0 | 45 | 9 | +| 75 | 0 | 46 | 10 | ## Common diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 7131e8691b8f8..526ec1cea404e 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 26c94ae469b3b..5133eaf9a6845 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2023-07-20 +date: 2023-07-24 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 0ab96f8899261..616332a5d8b12 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 9014be64c0f5b..e87d120aaae42 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index d11aa0d498e1d..a8c5af21240b9 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 3ea9d022a7453..16896670faca3 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index f7efb664a5c71..44895f72e439d 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index f824ca61a6b07..4e74790ed5d97 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 126fe56d7b5e1..e1947a0c58e4c 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 596035b721295..9e32e28afd06b 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 bfe4ec54bbea5..31b7d3b48edca 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2023-07-20 +date: 2023-07-24 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 15e5d0931a50f..8c9136dd4cdf4 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 6f6716f58b3a6..c77371d96aec9 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 548ca2da02ded..673134a58cc46 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 8d38aca61da13..d4bf4adf8a1ed 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 1d73eaa19753a..47c9867e3d1a6 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 19465741f3e33..39027dc51ffe6 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2023-07-20 +date: 2023-07-24 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 d11d8208da661..a8288c3940bea 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 713fe5dff5baf..bd3cb06e6f273 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 f7ae5b17a9cb9..d6b9f25679e90 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 87709d92a712c..5196048f57d0d 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 b71852d927893..f012cd09f90b8 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2023-07-20 +date: 2023-07-24 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 76cc99e93718e..a7b682fc33f76 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 1787197510cd5..ed2e10213dbf9 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 b89badc493d30..7153e74b8529b 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 2b6c9b13aac4f..d22463238fdef 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2023-07-20 +date: 2023-07-24 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 882b8e92b3318..518e3324f6fd5 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2023-07-20 +date: 2023-07-24 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 563dfe4bee36a..56cd648966b69 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 2065ec0eb3048..5c96c0879691b 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 e35cda709960b..928c2bb1bf7d3 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 afa64a1ddd80c..e9685a409f341 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 472a13dc0c5bb..8afc006a6250c 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 2ba6d0ba90bbf..d4cb231964b60 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index b67b76f3191cc..762fc9a0f61a0 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index f14d285e098a4..d247bb210c013 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index b8a1ffd050563..4eb20cd2cfe5b 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index fee70301ae0d8..bd7ff24467bb7 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index d5a8ce9aef735..7209cc81f330e 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index b113611afc66e..7ba6e00825e4f 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 b1a3bdc97ce54..442459234ce07 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 f13a377929e89..1fcf675347e7f 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 0ec3c736eee2b..9195f243e79f7 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2023-07-20 +date: 2023-07-24 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 a65f389081966..66cb11863cbd2 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2023-07-20 +date: 2023-07-24 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 c42c7379cbb65..15e2e5600c5e7 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 8b8a244e0dc3c..aaf847ed15a78 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 cd7a9104fd788..793de003dce57 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 13591d7daa79c..8b4dd42a51173 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 a368c66633478..8f47c3a508fe5 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2023-07-20 +date: 2023-07-24 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 772f255b544b1..f371af9591a8a 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 f305b8f77c78c..386120ac648c8 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 14ad08f3aa793..971339e709e7d 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 ba8e059c34f3c..2dcdfbaa057d8 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2023-07-20 +date: 2023-07-24 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 c5d96f1783120..1f18ac4128e48 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 9b707ad7ecfe5..232bf10090358 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 199dcc71891d5..11568e4d2b4c2 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 9ca28326d595b..79adadc2266e4 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 5fda49a71cb71..acaa681b1d3b2 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 702d9551abcab..6a2f27fdc60f0 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 592bc49c00498..872f57fe08502 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1c00a2a6e9bbf..4da7de75fc7db 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2023-07-20 +date: 2023-07-24 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 c35f5af9a2100..2fdfc79cd21d0 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2023-07-20 +date: 2023-07-24 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 15d9aca5bf8ca..1a6a207e5967d 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 a5510bd8325b4..7d9b9843d63c7 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 ccd3632f7aa4f..4af935717eb12 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 cb7bcaa668573..934659604f454 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 87d5e4d765893..843c9d557d115 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 6f66c586c708d..9a3153e749023 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 09d90df34c740..ea5ded39f3fec 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 728eab7ae47b9..08d9c0f2e074b 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2023-07-20 +date: 2023-07-24 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 875c84daba792..9cab3ca810063 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 43c76c0e14350..e4710571602e7 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2023-07-20 +date: 2023-07-24 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 8c1593a191f6b..21ec4edea150e 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2023-07-20 +date: 2023-07-24 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 725ca85fe4b85..2d3e3e2016f42 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 592f7fb9e9c95..3ab3971776658 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1c726d9563e99..433c7d3916244 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 7dd50428e765c..712d2b3121c53 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 69384898b78cc..925af45a6f16d 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 98b7e520b9dbd..862ba1be9c131 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 ab13cd1748cbe..f3f7ec6bca191 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 8d265006f9064..df3a075fcfc29 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 10f1f515bcbd5..8454ad662a246 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 f3d8b3a79d9af..b0e32bef612b0 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2023-07-20 +date: 2023-07-24 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 4f39a6c4fccf2..c902864ed3395 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 348ef4bb92d7a..d37b3d3269051 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 20c318e61fc40..6538b19bd7d5e 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 e8af0917a10a3..2f000f37789ec 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 56a8758ad8a04..aba5da86076de 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1f28fea27d68f..a9aa2d9986386 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 2a3a86ee94380..ff13480f58fe5 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 f411b9a940785..ec0aa477669cc 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2023-07-20 +date: 2023-07-24 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 d1436528bf313..54507fa0b41b3 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 cf9195987a01b..291714ce0306b 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1bba43be88af7..8000a0cb185ad 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 6ecc26d055b34..a251a63d4f391 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2023-07-20 +date: 2023-07-24 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 b0a67b385fee9..99ad310c9e6ed 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 3ae8a26cb1a9e..ec7cb6718a3e6 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 bb4baf16d2e0c..a76c9ca5d77f1 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 40aa2c80d9d50..168abc581731d 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 9e97aee081320..8541b76234a3b 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2023-07-20 +date: 2023-07-24 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 1f166ba3b38d3..329058dec4023 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 0a6a8a7d430e3..c4680b05b834a 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 4f30f710d3959..0db445536b426 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 22db43b55590d..432d7af78412e 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2023-07-20 +date: 2023-07-24 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 745ea13c7202b..9221269456bf4 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 bfb107695162f..24583c8b89996 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 0fe5a53c17be4..24dd1efbd6c6c 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 ce8724e7a3b8f..bc6ef00f60318 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 1ab4c912979e1..bcf5435a192ca 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 cdbe0a4b4b1c5..fc014bc71e721 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 9d191f3f59a42..1ba83503bded4 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 4b605310cbd38..daded76064478 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 b0242e4148e23..25594e6959d67 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 68fb3d367061f..b1d285d342cdf 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1e82247f21bf4..092b98e447d42 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2023-07-20 +date: 2023-07-24 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 51bee1ffee1e4..1cc4b7be42a27 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 370a0d7f5b37a..4afcbeec9148c 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2023-07-20 +date: 2023-07-24 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 6eaedb4a69b8e..770a6ab32a9f1 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1564c814cb453..8310b6c022388 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 a805ae573155d..c13a33dbe17ba 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 00cbf185ffc6f..b4920fe30722e 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 8f5ee842abf2e..a115ae3a3be60 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 17bef96f6e837..75c7829fdb177 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 d39dfc009b42e..1200b03ff4d39 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index d23d5a4b2dcb8..1de7325f058fc 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 f7c8573c9b694..311236e406346 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 2bd629c3c5530..7aa35326b57ec 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 79b28f2bf8992..2ac196984e3a9 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 b4ff1053664bb..0ff1289a9d9df 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 d7937d6fa72aa..5a76e19599642 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 34f2d90170ac1..ff1452db113e5 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2023-07-20 +date: 2023-07-24 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 689f07b3a9db4..59b6972f2d810 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 e6dedd2ee7e9e..674311fd10a83 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 54ca407ab103a..42dd85d76ef4b 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 cd91a6c8aab50..c9086e3b1aee9 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index c775fe97a8d4e..5075efffecaa0 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 6273df187e8eb..d034b7c1aa33d 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 8911adcf95f0b..b06f1f14185e1 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index f957b61828576..7d3af63ef1cf3 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 355edf1e29c07..08c3e35a01118 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2023-07-20 +date: 2023-07-24 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 237d538d2ce6e..741b39cfe85c3 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 c80a61c528872..22e45ccd1b0be 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2023-07-20 +date: 2023-07-24 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 2613155bcc245..6c3e9ab7ab6ca 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 4288c0ffd77f6..375c05d882708 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 9444e1124a67b..1844b13afe917 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2023-07-20 +date: 2023-07-24 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 ee571ceecb91f..ff1117dba0b42 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 abcbfddf6f596..60da99c5cc2a1 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2023-07-20 +date: 2023-07-24 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 4b44ed4b7fe77..6a3ef6718a504 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2023-07-20 +date: 2023-07-24 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 21c8a955efc5d..505e6abe4b8f9 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 b95d010d290b0..e4f09b7084856 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 1fc1c1b56f557..d148bee54a358 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 1a4741f73b9cf..3e112d9c541fb 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 1287ea986de1d..e077409424ce6 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2023-07-20 +date: 2023-07-24 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 cd52f7ecfcf24..2b7d56fcb5a82 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 7097674f04f71..a1cbebbbc8164 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 fd600b2c0a471..573c115c955d7 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2023-07-20 +date: 2023-07-24 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 29a0c7ab39160..deb2a55c01a7d 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2023-07-20 +date: 2023-07-24 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 dd5255e30efaf..27a0ae49f655a 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 067a7c5cec6a3..862f6ce589484 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 9581b7f3d8767..7a6cfcd02c2b8 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2023-07-20 +date: 2023-07-24 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 5b60676eb0be9..ee9a12e4c6e7b 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 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 5d7436130218d..6bbdebdad51dd 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index e7127a60cbe85..89c34a0d12e61 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 175d79ec9b2f3..ea4d32e7dd654 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index d6718649f5289..0c0648aed5f88 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 2d4afe8a833a1..50f290712bb47 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2023-07-20 +date: 2023-07-24 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 25e8140375912..4320150150645 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index f8f0e7cc4a4a6..554ad6d3f78d3 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 573a7934b5ba1..6ebdefe566fa5 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index bd87dd8e5ac30..89c1af63db870 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 804c4b8768e1b..a3ed9f7a36846 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 39bf326843f73..1aa7f37ac7bd7 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 307b10e706bcd..89356fd2b5f6a 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 4703d778b3119..c4cab9223d386 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index ca5dc7a224ecc..c14a1aa913226 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 1f7375d850a05..580392c198db3 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 614db193b8ace..ec67b9b7b084f 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 0bc14f4f6673c..bf8f2c8785645 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index e4879a1b037fd..f9b9cdc53c6a2 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 58858e3c579e8..36d515a238410 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 6fc76897de2e3..f6dac5b99ce0f 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2023-07-20 +date: 2023-07-24 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 f77d9bd224784..ecdc362a9c24c 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2023-07-20 +date: 2023-07-24 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 dd0f1d4b22d53..cb5184c1773cb 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2023-07-20 +date: 2023-07-24 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 8b0cf007f675f..a8fc0c2cca792 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index c17b301887dad..8407e0f1d5e73 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -182,6 +182,373 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue", + "type": "Function", + "tags": [], + "label": "formatFieldValue", + "description": [ + "\nFormats the value of a specific field using the appropriate field formatter if available\nor the default string field formatter otherwise.\n" + ], + "signature": [ + "(value: unknown, hit: ", + "SearchHit", + ", fieldFormats: ", + { + "pluginId": "fieldFormats", + "scope": "public", + "docId": "kibFieldFormatsPluginApi", + "section": "def-public.FieldFormatsStart", + "text": "FieldFormatsStart" + }, + ", dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | undefined, field: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + " | undefined, contentType: ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FieldFormatsContentType", + "text": "FieldFormatsContentType" + }, + " | undefined, options: ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.TextContextTypeOptions", + "text": "TextContextTypeOptions" + }, + " | ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.HtmlContextTypeOptions", + "text": "HtmlContextTypeOptions" + }, + " | undefined) => string" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$1", + "type": "Unknown", + "tags": [], + "label": "value", + "description": [ + "The value to format" + ], + "signature": [ + "unknown" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$2", + "type": "Object", + "tags": [], + "label": "hit", + "description": [ + "The actual search hit (required to get highlight information from)" + ], + "signature": [ + "SearchHit", + "" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$3", + "type": "CompoundType", + "tags": [], + "label": "fieldFormats", + "description": [ + "Field formatters" + ], + "signature": [ + { + "pluginId": "fieldFormats", + "scope": "public", + "docId": "kibFieldFormatsPluginApi", + "section": "def-public.FieldFormatsStart", + "text": "FieldFormatsStart" + } + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$4", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [ + "The data view if available" + ], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + " | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$5", + "type": "Object", + "tags": [], + "label": "field", + "description": [ + "The field that value was from if available" + ], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + " | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$6", + "type": "CompoundType", + "tags": [], + "label": "contentType", + "description": [ + "Type of a converter" + ], + "signature": [ + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FieldFormatsContentType", + "text": "FieldFormatsContentType" + }, + " | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatFieldValue.$7", + "type": "CompoundType", + "tags": [], + "label": "options", + "description": [ + "Options for the converter" + ], + "signature": [ + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.TextContextTypeOptions", + "text": "TextContextTypeOptions" + }, + " | ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.HtmlContextTypeOptions", + "text": "HtmlContextTypeOptions" + }, + " | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/format_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [ + "An sanitized HTML string, that is safe to be applied via dangerouslySetInnerHTML" + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatHit", + "type": "Function", + "tags": [], + "label": "formatHit", + "description": [ + "\nReturns a formatted document in form of key/value pairs of the fields name and a formatted value.\nThe value returned in each pair is an HTML string which is safe to be applied to the DOM, since\nit's formatted using field formatters." + ], + "signature": [ + "(hit: ", + "DataTableRecord", + ", dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ", shouldShowFieldHandler: ", + "ShouldShowFieldInTableHandler", + ", maxEntries: number, fieldFormats: ", + { + "pluginId": "fieldFormats", + "scope": "public", + "docId": "kibFieldFormatsPluginApi", + "section": "def-public.FieldFormatsStart", + "text": "FieldFormatsStart" + }, + ") => FormattedHit" + ], + "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatHit.$1", + "type": "Object", + "tags": [], + "label": "hit", + "description": [ + "The hit to format" + ], + "signature": [ + "DataTableRecord" + ], + "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatHit.$2", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [ + "The corresponding data view" + ], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatHit.$3", + "type": "Function", + "tags": [], + "label": "shouldShowFieldHandler", + "description": [ + "A function to check a field." + ], + "signature": [ + "ShouldShowFieldInTableHandler" + ], + "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatHit.$4", + "type": "number", + "tags": [], + "label": "maxEntries", + "description": [], + "signature": [ + "number" + ], + "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.formatHit.$5", + "type": "CompoundType", + "tags": [], + "label": "fieldFormats", + "description": [], + "signature": [ + { + "pluginId": "fieldFormats", + "scope": "public", + "docId": "kibFieldFormatsPluginApi", + "section": "def-public.FieldFormatsStart", + "text": "FieldFormatsStart" + } + ], + "path": "packages/kbn-discover-utils/src/utils/format_hit.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.getDocId", @@ -219,10 +586,297 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getIgnoredReason", + "type": "Function", + "tags": [], + "label": "getIgnoredReason", + "description": [ + "\nReturns the reason why a specific field was ignored in the response.\nWill return undefined if the field had no ignored values in it.\nThis implementation will make some assumptions based on specific types\nof ignored values can only happen with specific field types in Elasticsearch.\n" + ], + "signature": [ + "(field: string | ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + }, + ", ignoredFields: string[] | undefined) => ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.IgnoredReason", + "text": "IgnoredReason" + }, + " | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/get_ignored_reason.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getIgnoredReason.$1", + "type": "CompoundType", + "tags": [], + "label": "field", + "description": [ + "Either the data view field or the string name of it." + ], + "signature": [ + "string | ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewField", + "text": "DataViewField" + } + ], + "path": "packages/kbn-discover-utils/src/utils/get_ignored_reason.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getIgnoredReason.$2", + "type": "Array", + "tags": [], + "label": "ignoredFields", + "description": [ + "The hit._ignored value of the hit to validate." + ], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-discover-utils/src/utils/get_ignored_reason.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getShouldShowFieldHandler", + "type": "Function", + "tags": [], + "label": "getShouldShowFieldHandler", + "description": [ + "\nReturns a function for checking whether we should display a field in the Documents column of the data table\nIf showMultiFields is set to false, it filters out multifields that have a parent, to prevent entries for multifields\nlike this: field, field.keyword, field.whatever" + ], + "signature": [ + "(fields: string[], dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ", showMultiFields: boolean) => ", + "ShouldShowFieldInTableHandler" + ], + "path": "packages/kbn-discover-utils/src/utils/get_should_show_field_handler.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getShouldShowFieldHandler.$1", + "type": "Array", + "tags": [], + "label": "fields", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-discover-utils/src/utils/get_should_show_field_handler.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getShouldShowFieldHandler.$2", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "packages/kbn-discover-utils/src/utils/get_should_show_field_handler.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getShouldShowFieldHandler.$3", + "type": "boolean", + "tags": [], + "label": "showMultiFields", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-discover-utils/src/utils/get_should_show_field_handler.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.isNestedFieldParent", + "type": "Function", + "tags": [], + "label": "isNestedFieldParent", + "description": [ + "\nThis function checks if the given field in a given data view is a nested field's parent.\nDiscover doesn't flatten arrays of objects, so for documents with an `object` or `nested` field that\ncontains an array, Discover will only detect the top level root field. We want to detect when those\nroot fields are `nested` so that we can display the proper icon and label. However, those root\n`nested` fields are not a part of the data view. Their children are though, and contain nested path\ninfo. So to detect nested fields we look through the data view for nested children\nwhose path begins with the current field. There are edge cases where\nthis could incorrectly identify a plain `object` field as `nested`. Say we had the following document\nwhere `foo` is a plain object field and `bar` is a nested field.\n{\n \"foo\": [\n {\n \"bar\": [\n {\n \"baz\": \"qux\"\n }\n ]\n },\n {\n \"bar\": [\n {\n \"baz\": \"qux\"\n }\n ]\n }\n]\n}\nThe following code will search for `foo`, find it at the beginning of the path to the nested child field\n`foo.bar.baz` and incorrectly mark `foo` as nested. Any time we're searching for the name of a plain object\nfield that happens to match a segment of a nested path, we'll get a false positive.\nWe're aware of this issue and we'll have to live with\nit in the short term. The long term fix will be to add info about the `nested` and `object` root fields\nto the data view, but that has its own complications which you can read more about in the following\nissue: https://github.com/elastic/kibana/issues/54957" + ], + "signature": [ + "(fieldName: string, dataView: ", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + }, + ") => boolean" + ], + "path": "packages/kbn-discover-utils/src/utils/nested_fields.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.isNestedFieldParent.$1", + "type": "string", + "tags": [], + "label": "fieldName", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-discover-utils/src/utils/nested_fields.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.isNestedFieldParent.$2", + "type": "Object", + "tags": [], + "label": "dataView", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataView", + "text": "DataView" + } + ], + "path": "packages/kbn-discover-utils/src/utils/nested_fields.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.usePager", + "type": "Function", + "tags": [], + "label": "usePager", + "description": [], + "signature": [ + "({ initialPageSize, totalItems, }: { totalItems: number; initialPageSize: number; }) => { curPageIndex: number; pageSize: number; changePageIndex: (pageIndex: number) => void; changePageSize: (newPageSize: number) => void; totalPages: number; startIndex: number; hasNextPage: boolean; }" + ], + "path": "packages/kbn-discover-utils/src/hooks/use_pager.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.usePager.$1", + "type": "Object", + "tags": [], + "label": "{\n initialPageSize,\n totalItems,\n}", + "description": [], + "path": "packages/kbn-discover-utils/src/hooks/use_pager.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.usePager.$1.totalItems", + "type": "number", + "tags": [], + "label": "totalItems", + "description": [], + "path": "packages/kbn-discover-utils/src/hooks/use_pager.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.usePager.$1.initialPageSize", + "type": "number", + "tags": [], + "label": "initialPageSize", + "description": [], + "path": "packages/kbn-discover-utils/src/hooks/use_pager.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], - "enums": [], + "enums": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.IgnoredReason", + "type": "Enum", + "tags": [], + "label": "IgnoredReason", + "description": [], + "path": "packages/kbn-discover-utils/src/utils/get_ignored_reason.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "misc": [], "objects": [] } diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index c7861312017f3..83823d5d9f080 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 9 | 0 | 1 | 2 | +| 38 | 0 | 13 | 3 | ## Common ### Functions +### Enums + + diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index 5a252ff685400..84bd831e90e9c 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -840,7 +840,7 @@ "label": "fleet", "description": [], "signature": [ - "{ readonly beatsAgentComparison: string; readonly guide: string; readonly fleetServer: string; readonly fleetServerAddFleetServer: string; readonly settings: string; readonly settingsFleetServerHostSettings: string; readonly settingsFleetServerProxySettings: string; readonly troubleshooting: string; readonly elasticAgent: string; readonly datastreams: string; readonly datastreamsILM: string; readonly datastreamsNamingScheme: string; readonly datastreamsManualRollover: string; readonly installElasticAgent: string; readonly installElasticAgentStandalone: string; readonly packageSignatures: string; readonly upgradeElasticAgent: string; readonly learnMoreBlog: string; readonly apiKeysLearnMore: string; readonly onPremRegistry: string; readonly secureLogstash: string; readonly agentPolicy: string; readonly api: string; readonly uninstallAgent: string; }" + "{ readonly beatsAgentComparison: string; readonly guide: string; readonly fleetServer: string; readonly fleetServerAddFleetServer: string; readonly settings: string; readonly settingsFleetServerHostSettings: string; readonly settingsFleetServerProxySettings: string; readonly troubleshooting: string; readonly elasticAgent: string; readonly datastreams: string; readonly datastreamsILM: string; readonly datastreamsNamingScheme: string; readonly datastreamsManualRollover: string; readonly datastreamsTSDS: string; readonly datastreamsTSDSMetrics: string; readonly installElasticAgent: string; readonly installElasticAgentStandalone: string; readonly packageSignatures: string; readonly upgradeElasticAgent: string; readonly learnMoreBlog: string; readonly apiKeysLearnMore: string; readonly onPremRegistry: string; readonly secureLogstash: string; readonly agentPolicy: string; readonly api: string; readonly uninstallAgent: string; }" ], "path": "packages/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 5de676c6bddbb..9f1453f69bebd 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2023-07-20 +date: 2023-07-24 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 bdbe42041fff5..223a3579adb6e 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 65329f892f990..5206e9a808476 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 29c995e3de97b..017d7b1671565 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2023-07-20 +date: 2023-07-24 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 bca918865d85d..84e11f57bd1b1 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index ea6348d2cf5b4..1b491c90aa120 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index add70b9f71594..af6e5719aaeab 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index fc5b52ccfaed8..63441d01696c4 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2023-07-20 +date: 2023-07-24 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 bb1bc533fc3bb..06d8e6ddf1fea 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2023-07-20 +date: 2023-07-24 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 9174d6dd49205..d5792a8fe7775 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 6f821a7f1c051..c1e74accd142d 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 330a6d7dee05e..c01a05e931338 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2023-07-20 +date: 2023-07-24 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 2f42e4b386a45..58b08a1ee77d5 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 6c2bb5ed1a051..c38c4b07a180c 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 13ee31f8389eb..95dd3b25b665a 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 26766ae8e4254..bbb8e3238ba26 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index a6b33c52b0cfa..41816ad613c5f 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2023-07-20 +date: 2023-07-24 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 d2ce521c14aef..ed07b62d900b7 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2023-07-20 +date: 2023-07-24 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 6be0aeb218f81..d2da3fadf63db 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2023-07-20 +date: 2023-07-24 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 06cbb1fc124b7..b2856531b8a76 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index cdb66bbb6c517..25113039bbddc 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 7a6a8b1800542..35b5cebc9704e 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_generate_csv_types.mdx b/api_docs/kbn_generate_csv_types.mdx index b5f689975ad54..8b029a35fcd8a 100644 --- a/api_docs/kbn_generate_csv_types.mdx +++ b/api_docs/kbn_generate_csv_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv-types title: "@kbn/generate-csv-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv-types plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv-types'] --- import kbnGenerateCsvTypesObj from './kbn_generate_csv_types.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 012c336e62d86..1e45fe0ae1396 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index b790012eea2d6..d841fbc69f8d3 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2023-07-20 +date: 2023-07-24 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 5e1a9fb15ffeb..34c8ceaa80f3b 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 5124c896b1e69..f4cb554224891 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2023-07-20 +date: 2023-07-24 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 e0d8900ce4f54..016b164e2c213 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2023-07-20 +date: 2023-07-24 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 7bf81eca5795f..6756521827465 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2023-07-20 +date: 2023-07-24 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 4795094a05ede..a599ed90b39e9 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2023-07-20 +date: 2023-07-24 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 fa681990c1045..55be3a7bf153a 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2023-07-20 +date: 2023-07-24 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 2e31ef4faab16..43343eaf6b115 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 0c91a815127da..f22d939806a0f 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index da192ffad72bb..d058a7b6a344f 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2023-07-20 +date: 2023-07-24 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 df372701d65a1..8651662103eb7 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 3dcdc08f73fcc..d60ea406e5d5e 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2023-07-20 +date: 2023-07-24 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 6ae86e53ed60b..92926ac1e64e9 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 036a40284978a..279cccf564d0f 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 87b3c1da9b705..450781e6d2de8 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2023-07-20 +date: 2023-07-24 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 7459cca49a1ce..1ff7d20dd502a 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2023-07-20 +date: 2023-07-24 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 9b86f32381901..6917138f57f3a 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2023-07-20 +date: 2023-07-24 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 0357bf09a9db3..32d115174b674 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 6e510e46694c5..94cb51eecdb66 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index e80b81c8102ca..46216aabfbb56 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 186bbd3ca26bb..09fd0a34a3a85 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index fed44ad3003c9..f0fb457ebb2e6 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index a1e5e3e266932..9dc9b1bb25d1f 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index ccfc346caeb43..bcee95273cb62 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index a801e179e3dab..bd01fb905bf42 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 8ea8eff764089..c3661be93c9b2 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 1770e9b8fcb05..4054fe202edcd 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index aa00ec903801c..355004bcb5a43 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index f1b9577913a01..4c5d861ba11a6 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 360643f3528e2..04594325e222d 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index e3ee66bbc1c69..edc4a9229f23d 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 08f9c959a25d0..d27b2b6664381 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 49ad6f1a30dec..b6331b01f9419 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 33006f65499cf..f9aaa94a127c5 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 1b6278f3b7c9d..37a6fa67fc0af 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 49676caaeac45..74f61d0ec2e0c 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index b336eee4139c9..ec3c945fb65be 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index ac552f502ca91..4827e881a1895 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index f62831f6b9850..1afd33f0bff85 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 6c51a532c929f..e2e308b7b32fb 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index 9b5bdbf420ea0..f8d876f9822f7 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 31c454a4c7dd6..dc978619a0c2a 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 9bd2112ca2d5a..f65f1ed13ca94 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 1c29df62bf1ae..9c2c745ab3a6b 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 1b1fb2676f07b..e01f819d5118f 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 27030ea6e0413..a708787c6a9f3 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 1121e5aeb0851..6b012306a44ce 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 82efa2b671933..484a424f656e3 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2023-07-20 +date: 2023-07-24 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 7f5ca5670495a..42ad7b809a2fb 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2023-07-20 +date: 2023-07-24 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 0075025611604..29214c854803b 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 3f861d2589378..1b960fd5b429c 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2023-07-20 +date: 2023-07-24 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 ada306c19ebb6..555978b1219aa 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2023-07-20 +date: 2023-07-24 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 ec142892d231a..239aacbb159bf 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index d651abcf28c21..0699f01f31ff9 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 8793c40942a77..d0e9f49d3b663 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 5d3ccb537c7c5..ceebf1de2d458 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 3a08a6cad8690..50e44778b9286 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index 832b5e3b0b5ac..172f31ad45843 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index a24ac6a4858ec..c40105eed3c2f 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 23611e7966ed4..87d9210cc652d 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 8c433d5bcf970..8bd74b0d95282 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index a22af9baad2a0..d51cf807f3d5e 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 2936772c039d8..aaa346f1947d8 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 1654b994ab6f3..ecaa3aa381d5e 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index cf1fe0cb21093..4a43ce7834efb 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index d768d1e64fc46..3134f87f4277a 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index d69520c161f93..71a56ad44186b 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 062768773e583..8628b9249bc34 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index a6e2e803596a2..c1afc18c019ca 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 439b0ac0b598c..fa517d8e70218 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 3345084fcb005..845f99b4dfe37 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 7e3b5e08a4b2b..9eaf7fa671103 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index f6d2e03ae4f45..5206d20c74999 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 a580683b07c9e..062cd1b77120e 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2023-07-20 +date: 2023-07-24 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 ca63091c179d1..108d73572c086 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2023-07-20 +date: 2023-07-24 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 bd5944c3ea418..2f91a2397144a 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2023-07-20 +date: 2023-07-24 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 3fbe6d87fd38a..fa4c1af425971 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 060ae1673f679..5648433675c5e 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2023-07-20 +date: 2023-07-24 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 26ee24a660cdd..8ad5da9a30f14 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2023-07-20 +date: 2023-07-24 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 ef393463a4b6c..e84823d3b4f9f 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2023-07-20 +date: 2023-07-24 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 a641eb5d53919..d41f3a1646b59 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 98c67ffdbf7a6..322e16ad9aa22 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2023-07-20 +date: 2023-07-24 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 113a082fe1c2a..d14aa96f3afd9 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2023-07-20 +date: 2023-07-24 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 7885f55b00c96..3b2525a9ad369 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2023-07-20 +date: 2023-07-24 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 4f5bcb4538797..0e74307b287b1 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2023-07-20 +date: 2023-07-24 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 5b14ce9d2b426..711232cfe5fb9 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 394d3c801fcc7..8ef7302f94240 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index d31440fc1bcae..1e96537369f4f 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 9c9db45d85f72..d597eab6040d8 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2023-07-20 +date: 2023-07-24 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 950a2f4ededd8..bc74060ed5772 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2023-07-20 +date: 2023-07-24 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 d583354bc998f..788080974bd51 100644 --- a/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx +++ b/api_docs/kbn_shared_ux_avatar_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-user-profile-components title: "@kbn/shared-ux-avatar-user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-user-profile-components plugin -date: 2023-07-20 +date: 2023-07-24 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 0574400808471..cc08902fb5188 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2023-07-20 +date: 2023-07-24 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 10266a886d5f4..368c6bc4c4e17 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen-mocks title: "@kbn/shared-ux-button-exit-full-screen-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 8d83e340d8d49..18c5537e517cb 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2023-07-20 +date: 2023-07-24 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 94f86cbae8648..be055d3421f94 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2023-07-20 +date: 2023-07-24 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 966c628eb462f..e37546fd380ac 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 305993133a9ec..d67e37722eefa 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index c3f2b76a55b36..1085838afc408 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2023-07-20 +date: 2023-07-24 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 b1f73a0eb87d7..6a588b79f9757 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2023-07-20 +date: 2023-07-24 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 c54ea7f744bdb..147dc8c0f2a59 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 ee65539c64fb6..fe87156b5c668 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 030a5895a10d9..844b5f816f9d1 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 4cf6c667ea9e3..dec2bf4ad963e 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 07c25b27a6103..8898a25ac0bcf 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 4b8f241595b4c..98f0aa3db8f4d 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2023-07-20 +date: 2023-07-24 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 ba258be235f08..9f27424fe732c 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2023-07-20 +date: 2023-07-24 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 f8590020711df..d030876c628bf 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 e40316faab031..aa55ccbb1748d 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2023-07-20 +date: 2023-07-24 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 12957a4dbe293..32c47e205cad3 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 505bdd8307c80..4000cf70ef354 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2023-07-20 +date: 2023-07-24 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 f1bac6bf0b2c0..02b900ed46c8f 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 23cbf173a87f8..23bb27798320a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2023-07-20 +date: 2023-07-24 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 b53af7f46ada7..63b8babc853b5 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 8a4f6de7d9c75..b2662c15b8971 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2023-07-20 +date: 2023-07-24 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 849a8049bdf5a..1dc02e10800b9 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 9f11e0fb1ae5f..42e61d8181d68 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2023-07-20 +date: 2023-07-24 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 9f5fe27eb8de4..8c56651fbebb1 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2023-07-20 +date: 2023-07-24 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 114a13e246bea..7f7bd24ba0c25 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 25b011783a5af..de515f8c7f8ad 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 20b524ebf8efc..5fb82f50bdb08 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2023-07-20 +date: 2023-07-24 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 034a931dde741..4f9980a966eaa 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2023-07-20 +date: 2023-07-24 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 e96138aa21704..c475f49c8e299 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 bfffab99df0f7..aefc79053ce57 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2023-07-20 +date: 2023-07-24 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 12e50edd44ee1..51ca5027e580f 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2023-07-20 +date: 2023-07-24 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 d788dfc688323..3704d558f29ba 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2023-07-20 +date: 2023-07-24 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 515a026ae8a01..29c200e6c7b10 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2023-07-20 +date: 2023-07-24 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 2ea5cf1c398a3..2d20766bc69c0 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2023-07-20 +date: 2023-07-24 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 9b2e103cc1410..b7b0adca99294 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index ee5f7bd3b76d3..5cd13609582bb 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 5918d19a3a6f5..4d5d4e3923720 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 95d1d21b957a6..8b477009cdb95 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2023-07-20 +date: 2023-07-24 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 ae8323b9d69d9..1d2b050251a5b 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2023-07-20 +date: 2023-07-24 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 c246f9727c0a9..204e28eee4555 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2023-07-20 +date: 2023-07-24 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 6435f362847c0..bef09fb754efb 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2023-07-20 +date: 2023-07-24 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 6df3f13e8c21a..60315edc317c3 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2023-07-20 +date: 2023-07-24 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 4b49f8b51fa01..b82b7d5c7b4d7 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2023-07-20 +date: 2023-07-24 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 df60d8b593860..717ee86e55c7e 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index f66536b6ea657..a7c169ff83d11 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 0243c0f802ae9..4930f203b4d31 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 967e1043b3d19..be7858f7141b0 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 1137f0032c695..a8cd1d2b12ee8 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 1dab0d161a562..05c0c903a94cf 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 90d07a41778d8..1b3e7230e7a47 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index a65198e462adf..ca7bf03727b1d 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index e4007133ab6e5..6c35510c6fcbe 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index c3a60885710f9..acc55a2c58ef2 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index d4d7cd6085d98..e4655b902d7c4 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2023-07-20 +date: 2023-07-24 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 1997b3e62c537..e5cc721c591cd 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2023-07-20 +date: 2023-07-24 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 bf0bbaf4cd927..623c696c32523 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2023-07-20 +date: 2023-07-24 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 0463e6df31ba9..d455351d12fbd 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 0b4fc006512bf..2bd8d140a4b69 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index e4e0c2bd5ee35..8d84d15c0c9e5 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2023-07-20 +date: 2023-07-24 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 02c261961169c..cb864282cc482 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index e8ead789d4a29..da6598826e036 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2023-07-20 +date: 2023-07-24 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 5f0364637a9cc..3d5f466074404 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2023-07-20 +date: 2023-07-24 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 e266b16506299..62accaa41e2d3 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2023-07-20 +date: 2023-07-24 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 922d2b0e38f32..37d08523a04f1 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2023-07-20 +date: 2023-07-24 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 acef600633d33..6e73c1caea6a2 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2023-07-20 +date: 2023-07-24 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 ad6be994b60cf..c2e3dcfdc3a0b 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2023-07-20 +date: 2023-07-24 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 bc1c7b9f52e04..63400fb38d552 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2023-07-20 +date: 2023-07-24 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 b3c9f635fa0f9..77f47a39755ba 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 91cb4d714b340..dcd379357d65f 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index 211d933a3fca5..4da020544e63c 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2023-07-20 +date: 2023-07-24 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 2804af19b928e..42a5da260f7d0 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2023-07-20 +date: 2023-07-24 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 4311244b5340d..b11c3748f9462 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2023-07-20 +date: 2023-07-24 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 3a1d848edd14c..fa19420f6451e 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2023-07-20 +date: 2023-07-24 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 cc9260102e8da..935a87328d287 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2023-07-20 +date: 2023-07-24 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 47b7de3d6766d..cbd80bf72635b 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2023-07-20 +date: 2023-07-24 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 0cda351d62ef0..589829b4862ff 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2023-07-20 +date: 2023-07-24 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 770af52cf3e49..3e382d21354d0 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2023-07-20 +date: 2023-07-24 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 1d518562f9e8f..014a586b294ce 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2023-07-20 +date: 2023-07-24 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 fb142915bd95b..6d70def76e096 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_onboarding.devdocs.json b/api_docs/observability_onboarding.devdocs.json index 59e6c6e231f69..2058dd185fc76 100644 --- a/api_docs/observability_onboarding.devdocs.json +++ b/api_docs/observability_onboarding.devdocs.json @@ -3,7 +3,124 @@ "client": { "classes": [], "functions": [], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ConfigSchema", + "type": "Interface", + "tags": [], + "label": "ConfigSchema", + "description": [], + "path": "x-pack/plugins/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ConfigSchema.ui", + "type": "Object", + "tags": [], + "label": "ui", + "description": [], + "signature": [ + "{ enabled: boolean; }" + ], + "path": "x-pack/plugins/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ConfigSchema.serverless", + "type": "Object", + "tags": [], + "label": "serverless", + "description": [], + "signature": [ + "{ enabled: boolean; }" + ], + "path": "x-pack/plugins/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ObservabilityOnboardingAppServices", + "type": "Interface", + "tags": [], + "label": "ObservabilityOnboardingAppServices", + "description": [], + "path": "x-pack/plugins/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ObservabilityOnboardingAppServices.application", + "type": "Object", + "tags": [], + "label": "application", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-application-browser", + "scope": "common", + "docId": "kibKbnCoreApplicationBrowserPluginApi", + "section": "def-common.ApplicationStart", + "text": "ApplicationStart" + } + ], + "path": "x-pack/plugins/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ObservabilityOnboardingAppServices.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/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.ObservabilityOnboardingAppServices.config", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + { + "pluginId": "observabilityOnboarding", + "scope": "public", + "docId": "kibObservabilityOnboardingPluginApi", + "section": "def-public.ConfigSchema", + "text": "ConfigSchema" + } + ], + "path": "x-pack/plugins/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [], "misc": [], "objects": [], diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 563382c237d14..7bd14321e9e98 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; @@ -21,13 +21,16 @@ Contact [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) for ques | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 7 | 0 | 7 | 0 | +| 14 | 0 | 14 | 0 | ## Client ### Start +### Interfaces + + ## Server ### Setup diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index a1abe6a72c8f1..8e0ddc97770ec 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index b4dd08de0c45c..0c0b447657dae 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2023-07-20 +date: 2023-07-24 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 bdce64a9b71ff..13e73af3a2016 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,13 +21,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 71563 | 555 | 61282 | 1460 | +| 71603 | 555 | 61304 | 1462 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 272 | 10 | 267 | 27 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 275 | 10 | 269 | 27 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 36 | 1 | 32 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 44 | 0 | 27 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 795 | 1 | 765 | 48 | @@ -133,7 +133,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | | | [@elastic/actionable-observability](https://github.com/orgs/elastic/teams/actionable-observability) | - | 516 | 45 | 508 | 19 | -| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 7 | 0 | 7 | 0 | +| | [@elastic/apm-ui](https://github.com/orgs/elastic/teams/apm-ui) | - | 14 | 0 | 14 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 277 | 1 | 276 | 11 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 24 | 0 | 24 | 7 | | painlessLab | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | @@ -238,7 +238,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 37 | 0 | 36 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 116 | 0 | 90 | 1 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 74 | 0 | 45 | 9 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 75 | 0 | 46 | 10 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 135 | 3 | 133 | 18 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 4 | 4 | @@ -422,7 +422,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 101 | 0 | 85 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 27 | 2 | 24 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 9 | 0 | 1 | 2 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 38 | 0 | 13 | 3 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 72 | 0 | 72 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 26 | 5 | diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 2d7ff21f6e512..c1582106748f0 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 1e77bebe960d7..114469c3f7a09 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2023-07-20 +date: 2023-07-24 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 84220a9b28dcb..03932a0cfa431 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2023-07-20 +date: 2023-07-24 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 44266c6dca1c8..dc999b0fd3f02 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/reporting_export_types.mdx b/api_docs/reporting_export_types.mdx index a22150684d38b..f9657b69a490c 100644 --- a/api_docs/reporting_export_types.mdx +++ b/api_docs/reporting_export_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reportingExportTypes title: "reportingExportTypes" image: https://source.unsplash.com/400x175/?github description: API docs for the reportingExportTypes plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reportingExportTypes'] --- import reportingExportTypesObj from './reporting_export_types.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 4053c8e3d8edd..00638cf519637 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 2bfdef4810544..491d7df29127f 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2023-07-20 +date: 2023-07-24 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 0ceb2ed5f643a..98716dc4eeda7 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2023-07-20 +date: 2023-07-24 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 6062652e91ccb..ce889dfd15a7e 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2023-07-20 +date: 2023-07-24 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 c82076ea87209..3a1c48f52f499 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2023-07-20 +date: 2023-07-24 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 dbea8ea138f69..f749001f888fa 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2023-07-20 +date: 2023-07-24 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 4be605a52252f..62e4df6d2d9f7 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 8db985683a5c4..8e700f8fa36b8 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index d3fcb334b8934..f5e8b8d17e3ba 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2023-07-20 +date: 2023-07-24 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 d98b56558b78e..6123c29017cf5 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2023-07-20 +date: 2023-07-24 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 21a1b74bb5fe4..1dda98e525030 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 312a695c28aa7..d6b61f6cc79a9 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 2f6e66c75d6f8..c9a7ac2fef781 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 452ce18f81f83..c39c09e736d3c 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 4c247713e490a..b4c6f48e87652 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 3ac3c8ed23187..871e51d766211 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 763875d170af3..f43b43ed995d7 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 298c1299770f8..c8934f3c83ef0 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index c275016181a80..9b5ef8b7f64a1 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2023-07-20 +date: 2023-07-24 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 e933f8ca75921..46bc7a7c9d58b 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2023-07-20 +date: 2023-07-24 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 aabb8ea5887ee..124ae47a1a120 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2023-07-20 +date: 2023-07-24 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 1a30b6282968f..d9e873ba9b8cc 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2023-07-20 +date: 2023-07-24 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 93536551ce2ab..a35981ac30f75 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2023-07-20 +date: 2023-07-24 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 f2257b6f8e17b..2e5e6b05314f3 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2023-07-20 +date: 2023-07-24 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 099ee933bde54..ddaa0de4d4785 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2023-07-20 +date: 2023-07-24 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 7eaf2ad48d571..5dc14d03266e5 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2023-07-20 +date: 2023-07-24 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 7fe459235710b..7e6d3244a3c6d 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2023-07-20 +date: 2023-07-24 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 b9a3708c4a10f..1967e48e0d35f 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2023-07-20 +date: 2023-07-24 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 f6fe38def6032..6cc30c6dceec1 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index f3670b9d4fa99..fc979b78d4ed3 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 18e49781c4370..bcb463932cc81 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2023-07-20 +date: 2023-07-24 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 e594f8fc330c3..b915dd667c37d 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2023-07-20 +date: 2023-07-24 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 67a232ae7a588..b58f892e2ec8a 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index d6a5c67e3c4f0..ccfc51a8dbf06 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 926ddadae97f7..079af58f8da48 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2023-07-20 +date: 2023-07-24 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 c58d4911795d4..17c83c55907f8 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 1b56aef96f138..ef0673dbcd20f 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index f47403e972beb..db680b850215e 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index c888832408f76..e96c63cc88fe9 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 99a95c26ec796..5de3964976395 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2023-07-20 +date: 2023-07-24 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 c5e2a37ed01f5..8885eebcea481 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2023-07-20 +date: 2023-07-24 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 ccbf0ecce63d4..e9c715cf33ee3 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2023-07-20 +date: 2023-07-24 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 550a371c76924..8fe3367060064 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2023-07-20 +date: 2023-07-24 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 a26f391d2d7eb..163fbb637a01c 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2023-07-20 +date: 2023-07-24 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 f903192a7804f..32e853193b01d 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2023-07-20 +date: 2023-07-24 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 ce19b6e4beca5..045b070a466d9 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2023-07-20 +date: 2023-07-24 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 c7c10be5c2201..63a9238b25336 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2023-07-20 +date: 2023-07-24 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 6fb866e1ecab4..1fb4112154caa 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2023-07-20 +date: 2023-07-24 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 59d9c0dd03365..5a6c6d4c0ecb4 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2023-07-20 +date: 2023-07-24 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 85ce363acea15..cefad2d823224 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2023-07-20 +date: 2023-07-24 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 46277e045d32d..fea43ea730237 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2023-07-20 +date: 2023-07-24 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 76bce6b70dd2a..6ccfd5f614314 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2023-07-20 +date: 2023-07-24 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 6690c4990f69f..82860f6c86936 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2023-07-20 +date: 2023-07-24 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.yml b/config/serverless.yml index 8167ee5a42f4f..d05efe44e12e1 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -47,6 +47,11 @@ xpack.cloud_integrations.data_migration.enabled: false data.search.sessions.enabled: false advanced_settings.enabled: false +# Disable UI of security management plugins +xpack.security.ui.userManagementEnabled: false +xpack.security.ui.roleManagementEnabled: false +xpack.security.ui.roleMappingManagementEnabled: false + # Enforce restring access to internal APIs see https://github.com/elastic/kibana/issues/151940 # server.restrictInternalApis: true # Telemetry enabled by default and not disableable via UI diff --git a/package.json b/package.json index 9c4e285ce8ab2..e5295bc888c3b 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "@dnd-kit/utilities": "^2.0.0", "@elastic/apm-rum": "^5.12.0", "@elastic/apm-rum-react": "^1.4.2", - "@elastic/charts": "59.0.0", + "@elastic/charts": "59.1.0", "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.8.0-canary.2", "@elastic/ems-client": "8.4.0", diff --git a/packages/content-management/table_list_view_table/src/table_list_view.test.tsx b/packages/content-management/table_list_view_table/src/table_list_view.test.tsx index 94c1ca5ab6753..277748b44b883 100644 --- a/packages/content-management/table_list_view_table/src/table_list_view.test.tsx +++ b/packages/content-management/table_list_view_table/src/table_list_view.test.tsx @@ -964,11 +964,11 @@ describe('TableListView', () => { Array [ Array [ "Item 1", - "Sat Jul 15 2023", + "July 15, 2023", ], Array [ "Item 2", - "Sat Jul 15 2023", + "July 15, 2023", ], ] `); @@ -1040,11 +1040,11 @@ describe('TableListView', () => { Array [ Array [ "Item 1", - "Sat Jul 15 2023", + "July 15, 2023", ], Array [ "Item 2", - "Sat Jul 15 2023", + "July 15, 2023", ], ] `); diff --git a/packages/kbn-dom-drag-drop/src/drag_drop.tsx b/packages/kbn-dom-drag-drop/src/drag_drop.tsx index 66cb11bc15ad4..ab4158ad31543 100644 --- a/packages/kbn-dom-drag-drop/src/drag_drop.tsx +++ b/packages/kbn-dom-drag-drop/src/drag_drop.tsx @@ -628,21 +628,6 @@ const DropsInner = memo(function DropsInner(props: DropsInnerProps) { const mainTargetProps = getProps(dropTypes && dropTypes[0]); - const extraDropStyles = useMemo(() => { - const extraDrops = dropTypes && dropTypes.length && dropTypes.slice(1); - if (!extraDrops || !extraDrops.length) { - return; - } - - const height = extraDrops.length * 40; - const minHeight = height - (mainTargetRef.current?.clientHeight || 40); - const clipPath = `polygon(100% 0px, 100% ${height - minHeight}px, 0 100%, 0 0)`; - return { - clipPath, - height, - }; - }, [dropTypes]); - return (
{dropTypes && dropTypes.length > 1 && ( - <> -
- - {dropTypes.slice(1).map((dropType) => { - const dropChildren = getCustomDropTarget?.(dropType); - return dropChildren ? ( - - - {dropChildren} - - - ) : null; - })} - - + + {dropTypes.slice(1).map((dropType) => { + const dropChildren = getCustomDropTarget?.(dropType); + return dropChildren ? ( + + + {dropChildren} + + + ) : null; + })} + )}
); diff --git a/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss b/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss index ffea63cf94cef..d586d86761cb5 100644 --- a/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss +++ b/packages/kbn-dom-drag-drop/src/sass/drag_drop.scss @@ -154,19 +154,12 @@ $reorderItemMargin: $euiSizeS; visibility: visible; } -.domDragDrop__diamondPath { - position: absolute; - width: 30%; - top: 0; - left: -$euiSize; - z-index: $domDragDropZLevel0; -} - .domDragDrop__extraDropWrapper { position: relative; width: 100%; height: 100%; background: $euiColorLightestShade; + border-radius: $euiSizeXS; .domDragDrop__extraDrop, .domDragDrop__extraDrop:before { diff --git a/packages/kbn-expandable-flyout/index.ts b/packages/kbn-expandable-flyout/index.ts index cc423eb275090..576525206d4e2 100644 --- a/packages/kbn-expandable-flyout/index.ts +++ b/packages/kbn-expandable-flyout/index.ts @@ -16,4 +16,4 @@ export { export type { ExpandableFlyoutApi } from './src/context'; export type { ExpandableFlyoutProps } from './src'; -export type { FlyoutPanel } from './src/types'; +export type { FlyoutPanelProps } from './src/types'; diff --git a/packages/kbn-expandable-flyout/src/actions.ts b/packages/kbn-expandable-flyout/src/actions.ts index 5709214394303..aa8e813f8a845 100644 --- a/packages/kbn-expandable-flyout/src/actions.ts +++ b/packages/kbn-expandable-flyout/src/actions.ts @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import { FlyoutPanel } from './types'; +import { FlyoutPanelProps } from './types'; export enum ActionType { openFlyout = 'open_flyout', @@ -24,22 +24,22 @@ export type Action = | { type: ActionType.openFlyout; payload: { - right?: FlyoutPanel; - left?: FlyoutPanel; - preview?: FlyoutPanel; + right?: FlyoutPanelProps; + left?: FlyoutPanelProps; + preview?: FlyoutPanelProps; }; } | { type: ActionType.openRightPanel; - payload: FlyoutPanel; + payload: FlyoutPanelProps; } | { type: ActionType.openLeftPanel; - payload: FlyoutPanel; + payload: FlyoutPanelProps; } | { type: ActionType.openPreviewPanel; - payload: FlyoutPanel; + payload: FlyoutPanelProps; } | { type: ActionType.closeRightPanel; diff --git a/packages/kbn-expandable-flyout/src/context.tsx b/packages/kbn-expandable-flyout/src/context.tsx index b7ad721a2b9fd..9738c2a4c867d 100644 --- a/packages/kbn-expandable-flyout/src/context.tsx +++ b/packages/kbn-expandable-flyout/src/context.tsx @@ -17,7 +17,7 @@ import React, { } from 'react'; import { ActionType } from './actions'; import { reducer, State } from './reducer'; -import type { FlyoutPanel } from './types'; +import type { FlyoutPanelProps } from './types'; import { initialState } from './reducer'; export interface ExpandableFlyoutContext { @@ -28,19 +28,23 @@ export interface ExpandableFlyoutContext { /** * Open the flyout with left, right and/or preview panels */ - openFlyout: (panels: { left?: FlyoutPanel; right?: FlyoutPanel; preview?: FlyoutPanel }) => void; + openFlyout: (panels: { + left?: FlyoutPanelProps; + right?: FlyoutPanelProps; + preview?: FlyoutPanelProps; + }) => void; /** * Replaces the current right panel with a new one */ - openRightPanel: (panel: FlyoutPanel) => void; + openRightPanel: (panel: FlyoutPanelProps) => void; /** * Replaces the current left panel with a new one */ - openLeftPanel: (panel: FlyoutPanel) => void; + openLeftPanel: (panel: FlyoutPanelProps) => void; /** * Add a new preview panel to the list of current preview panels */ - openPreviewPanel: (panel: FlyoutPanel) => void; + openPreviewPanel: (panel: FlyoutPanelProps) => void; /** * Closes right panel */ @@ -111,25 +115,25 @@ export const ExpandableFlyoutProvider = React.forwardRef< left, preview, }: { - right?: FlyoutPanel; - left?: FlyoutPanel; - preview?: FlyoutPanel; + right?: FlyoutPanelProps; + left?: FlyoutPanelProps; + preview?: FlyoutPanelProps; }) => dispatch({ type: ActionType.openFlyout, payload: { left, right, preview } }), [dispatch] ); const openRightPanel = useCallback( - (panel: FlyoutPanel) => dispatch({ type: ActionType.openRightPanel, payload: panel }), + (panel: FlyoutPanelProps) => dispatch({ type: ActionType.openRightPanel, payload: panel }), [] ); const openLeftPanel = useCallback( - (panel: FlyoutPanel) => dispatch({ type: ActionType.openLeftPanel, payload: panel }), + (panel: FlyoutPanelProps) => dispatch({ type: ActionType.openLeftPanel, payload: panel }), [] ); const openPreviewPanel = useCallback( - (panel: FlyoutPanel) => dispatch({ type: ActionType.openPreviewPanel, payload: panel }), + (panel: FlyoutPanelProps) => dispatch({ type: ActionType.openPreviewPanel, payload: panel }), [] ); diff --git a/packages/kbn-expandable-flyout/src/index.tsx b/packages/kbn-expandable-flyout/src/index.tsx index 1d96b72d66b32..fa9a1bf5af7c2 100644 --- a/packages/kbn-expandable-flyout/src/index.tsx +++ b/packages/kbn-expandable-flyout/src/index.tsx @@ -13,7 +13,7 @@ import { EuiFlexGroup, EuiFlyout } from '@elastic/eui'; import { useExpandableFlyoutContext } from './context'; import { PreviewSection } from './components/preview_section'; import { RightSection } from './components/right_section'; -import type { FlyoutPanel, Panel } from './types'; +import type { FlyoutPanelProps, Panel } from './types'; import { LeftSection } from './components/left_section'; export interface ExpandableFlyoutProps extends Omit { @@ -98,13 +98,13 @@ export const ExpandableFlyout: React.FC = ({ > {leftSection && left ? ( ) : null} {rightSection && right ? ( ) : null} @@ -112,7 +112,7 @@ export const ExpandableFlyout: React.FC = ({ {previewSection && preview ? ( diff --git a/packages/kbn-expandable-flyout/src/reducer.test.ts b/packages/kbn-expandable-flyout/src/reducer.test.ts index 21128ded7b58e..d5deeb6c0b03b 100644 --- a/packages/kbn-expandable-flyout/src/reducer.test.ts +++ b/packages/kbn-expandable-flyout/src/reducer.test.ts @@ -6,32 +6,32 @@ * Side Public License, v 1. */ -import { FlyoutPanel } from './types'; +import { FlyoutPanelProps } from './types'; import { initialState, reducer, State } from './reducer'; import { Action, ActionType } from './actions'; -const rightPanel1: FlyoutPanel = { +const rightPanel1: FlyoutPanelProps = { id: 'right1', path: ['path'], }; -const leftPanel1: FlyoutPanel = { +const leftPanel1: FlyoutPanelProps = { id: 'left1', params: { id: 'id' }, }; -const previewPanel1: FlyoutPanel = { +const previewPanel1: FlyoutPanelProps = { id: 'preview1', state: { id: 'state' }, }; -const rightPanel2: FlyoutPanel = { +const rightPanel2: FlyoutPanelProps = { id: 'right2', path: ['path'], }; -const leftPanel2: FlyoutPanel = { +const leftPanel2: FlyoutPanelProps = { id: 'left2', params: { id: 'id' }, }; -const previewPanel2: FlyoutPanel = { +const previewPanel2: FlyoutPanelProps = { id: 'preview2', state: { id: 'state' }, }; diff --git a/packages/kbn-expandable-flyout/src/reducer.ts b/packages/kbn-expandable-flyout/src/reducer.ts index bb0ff125f546e..5b4c0675548aa 100644 --- a/packages/kbn-expandable-flyout/src/reducer.ts +++ b/packages/kbn-expandable-flyout/src/reducer.ts @@ -6,22 +6,22 @@ * Side Public License, v 1. */ -import { FlyoutPanel } from './types'; +import { FlyoutPanelProps } from './types'; import { Action, ActionType } from './actions'; export interface State { /** * Panel to render in the left section */ - left: FlyoutPanel | undefined; + left: FlyoutPanelProps | undefined; /** * Panel to render in the right section */ - right: FlyoutPanel | undefined; + right: FlyoutPanelProps | undefined; /** * Panels to render in the preview section */ - preview: FlyoutPanel[]; + preview: FlyoutPanelProps[]; } export const initialState: State = { @@ -90,7 +90,7 @@ export function reducer(state: State, action: Action) { * Navigates to the previous preview panel by removing the last entry in the array of preview panels. */ case ActionType.previousPreviewPanel: { - const p: FlyoutPanel[] = [...state.preview]; + const p: FlyoutPanelProps[] = [...state.preview]; p.pop(); return { ...state, preview: p }; } diff --git a/packages/kbn-expandable-flyout/src/types.ts b/packages/kbn-expandable-flyout/src/types.ts index b27ac4afd6fc2..883f0b7aefc00 100644 --- a/packages/kbn-expandable-flyout/src/types.ts +++ b/packages/kbn-expandable-flyout/src/types.ts @@ -8,7 +8,7 @@ import React from 'react'; -export interface FlyoutPanel { +export interface FlyoutPanelProps { /** * Unique key to identify the panel */ @@ -35,5 +35,5 @@ export interface Panel { /** * Component to be rendered */ - component: (props: FlyoutPanel) => React.ReactElement; + component: (props: FlyoutPanelProps) => React.ReactElement; } diff --git a/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.test.tsx b/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.test.tsx index d32b0ccfadf6f..209608c260eca 100644 --- a/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.test.tsx +++ b/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.test.tsx @@ -1417,6 +1417,18 @@ describe('MetricVisComponent', function () { }); }); + it('does not override duration configuration at visualization level when set', () => { + getFormattedMetrics(394.2393, 983123.984, { + id: 'duration', + params: { formatOverride: true, outputFormat: 'asSeconds' }, + }); + expect(mockDeserialize).toHaveBeenCalledTimes(2); + expect(mockDeserialize).toHaveBeenCalledWith({ + id: 'duration', + params: { formatOverride: true, outputFormat: 'asSeconds' }, + }); + }); + it('does not tweak bytes format when passed', () => { getFormattedMetrics(394.2393, 983123.984, { id: 'bytes', diff --git a/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx b/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx index 87154cd3dba73..f0aa3c3e1dede 100644 --- a/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx +++ b/src/plugins/chart_expressions/expression_metric/public/components/metric_vis.tsx @@ -49,7 +49,7 @@ export const defaultColor = euiThemeVars.euiColorLightestShade; function enhanceFieldFormat(serializedFieldFormat: SerializedFieldFormat | undefined) { const formatId = serializedFieldFormat?.id || 'number'; - if (formatId === 'duration') { + if (formatId === 'duration' && !serializedFieldFormat?.params?.formatOverride) { return { ...serializedFieldFormat, params: { diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.test.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.test.tsx index 99b164433fe41..4da2d77825f47 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.test.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.test.tsx @@ -12,7 +12,7 @@ import { mount, ReactWrapper } from 'enzyme'; import { I18nProvider } from '@kbn/i18n-react'; import { pluginServices } from '../services/plugin_services'; -import { DashboardListing, DashboardListingProps } from './dashboard_listing'; +import { DashboardListing } from './dashboard_listing'; /** * Mock Table List view. This dashboard component is a wrapper around the shared UX table List view. We @@ -20,6 +20,7 @@ import { DashboardListing, DashboardListingProps } from './dashboard_listing'; * in our tests because it is covered in its package. */ import { TableListView } from '@kbn/content-management-table-list-view'; +import { DashboardListingProps } from './types'; // import { TableListViewKibanaProvider } from '@kbn/content-management-table-list-view'; jest.mock('@kbn/content-management-table-list-view-table', () => { const originalModule = jest.requireActual('@kbn/content-management-table-list-view-table'); diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx index 1890e9ca37e5e..94f9460c8f259 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx @@ -7,73 +7,25 @@ */ import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; -import React, { PropsWithChildren, useCallback, useMemo, useState } from 'react'; +import React, { useMemo } from 'react'; import { type TableListViewKibanaDependencies, TableListViewKibanaProvider, - type UserContentCommonSchema, } from '@kbn/content-management-table-list-view-table'; import { TableListView } from '@kbn/content-management-table-list-view'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; -import type { SavedObjectsFindOptionsReference } from '@kbn/core/public'; + import { toMountPoint, useExecutionContext } from '@kbn/kibana-react-plugin/public'; -import { - DASHBOARD_CONTENT_ID, - SAVED_OBJECT_DELETE_TIME, - SAVED_OBJECT_LOADED_TIME, -} from '../dashboard_constants'; -import { - dashboardListingTableStrings, - dashboardListingErrorStrings, -} from './_dashboard_listing_strings'; import { pluginServices } from '../services/plugin_services'; -import { confirmCreateWithUnsaved } from './confirm_overlays'; -import { DashboardItem } from '../../common/content_management'; -import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; -import { DashboardApplicationService } from '../services/application/types'; -import { DashboardListingEmptyPrompt } from './dashboard_listing_empty_prompt'; - -// because the type of `application.capabilities.advancedSettings` is so generic, the provider -// requiring the `save` key to be part of it is causing type issues - so, creating a custom type -type TableListViewApplicationService = DashboardApplicationService & { - capabilities: { advancedSettings: { save: boolean } }; -}; - -const SAVED_OBJECTS_LIMIT_SETTING = 'savedObjects:listingLimit'; -const SAVED_OBJECTS_PER_PAGE_SETTING = 'savedObjects:perPage'; - -interface DashboardSavedObjectUserContent extends UserContentCommonSchema { - attributes: { - title: string; - description?: string; - timeRestore: boolean; - }; -} -const toTableListViewSavedObject = (hit: DashboardItem): DashboardSavedObjectUserContent => { - const { title, description, timeRestore } = hit.attributes; - return { - type: 'dashboard', - id: hit.id, - updatedAt: hit.updatedAt!, - references: hit.references, - attributes: { - title, - description, - timeRestore, - }, - }; -}; - -export type DashboardListingProps = PropsWithChildren<{ - initialFilter?: string; - useSessionStorageIntegration?: boolean; - goToDashboard: (dashboardId?: string, viewMode?: ViewMode) => void; - getDashboardUrl: (dashboardId: string, usesTimeRestore: boolean) => string; -}>; +import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; +import { useDashboardListingTable } from './hooks/use_dashboard_listing_table'; +import { + DashboardListingProps, + DashboardSavedObjectUserContent, + TableListViewApplicationService, +} from './types'; export const DashboardListing = ({ children, @@ -89,123 +41,22 @@ export const DashboardListing = ({ http, chrome: { theme }, savedObjectsTagging, - dashboardSessionStorage, - settings: { uiSettings }, - notifications: { toasts }, + coreContext: { executionContext }, - dashboardCapabilities: { showWriteControls }, - dashboardContentManagement: { findDashboards, deleteDashboards }, } = pluginServices.getServices(); - const [unsavedDashboardIds, setUnsavedDashboardIds] = useState( - dashboardSessionStorage.getDashboardIdsWithUnsavedChanges() - ); - useExecutionContext(executionContext, { type: 'application', page: 'list', }); - const listingLimit = uiSettings.get(SAVED_OBJECTS_LIMIT_SETTING); - const initialPageSize = uiSettings.get(SAVED_OBJECTS_PER_PAGE_SETTING); - - const createItem = useCallback(() => { - if (useSessionStorageIntegration && dashboardSessionStorage.dashboardHasUnsavedEdits()) { - confirmCreateWithUnsaved(() => { - dashboardSessionStorage.clearState(); - goToDashboard(); - }, goToDashboard); - return; - } - goToDashboard(); - }, [dashboardSessionStorage, goToDashboard, useSessionStorageIntegration]); - - const fetchItems = useCallback( - ( - searchTerm: string, - { - references, - referencesToExclude, - }: { - references?: SavedObjectsFindOptionsReference[]; - referencesToExclude?: SavedObjectsFindOptionsReference[]; - } = {} - ) => { - const searchStartTime = window.performance.now(); - - return findDashboards - .search({ - search: searchTerm, - size: listingLimit, - hasReference: references, - hasNoReference: referencesToExclude, - }) - .then(({ total, hits }) => { - const searchEndTime = window.performance.now(); - const searchDuration = searchEndTime - searchStartTime; - reportPerformanceMetricEvent(pluginServices.getServices().analytics, { - eventName: SAVED_OBJECT_LOADED_TIME, - duration: searchDuration, - meta: { - saved_object_type: DASHBOARD_CONTENT_ID, - }, - }); - return { - total, - hits: hits.map(toTableListViewSavedObject), - }; - }); - }, - [findDashboards, listingLimit] - ); - - const deleteItems = useCallback( - async (dashboardsToDelete: Array<{ id: string }>) => { - try { - const deleteStartTime = window.performance.now(); - - await deleteDashboards( - dashboardsToDelete.map(({ id }) => { - dashboardSessionStorage.clearState(id); - return id; - }) - ); - - const deleteDuration = window.performance.now() - deleteStartTime; - reportPerformanceMetricEvent(pluginServices.getServices().analytics, { - eventName: SAVED_OBJECT_DELETE_TIME, - duration: deleteDuration, - meta: { - saved_object_type: DASHBOARD_CONTENT_ID, - total: dashboardsToDelete.length, - }, - }); - } catch (error) { - toasts.addError(error, { - title: dashboardListingErrorStrings.getErrorDeletingDashboardToast(), - }); - } - - setUnsavedDashboardIds(dashboardSessionStorage.getDashboardIdsWithUnsavedChanges()); - }, - [dashboardSessionStorage, deleteDashboards, toasts] - ); - - const editItem = useCallback( - ({ id }: { id: string | undefined }) => goToDashboard(id, ViewMode.EDIT), - [goToDashboard] - ); - const emptyPrompt = ( - - ); - - const { getEntityName, getTableListTitle, getEntityNamePlural } = dashboardListingTableStrings; + const { unsavedDashboardIds, refreshUnsavedDashboards, tableListViewTableProps } = + useDashboardListingTable({ + goToDashboard, + getDashboardUrl, + useSessionStorageIntegration, + initialFilter, + }); const savedObjectsTaggingFakePlugin = useMemo(() => { return savedObjectsTagging.hasApi // TODO: clean up this logic once https://github.com/elastic/kibana/issues/140433 is resolved @@ -231,32 +82,13 @@ export const DashboardListing = ({ FormattedRelative, }} > - - getDetailViewLink={({ id, attributes: { timeRestore } }) => - getDashboardUrl(id, timeRestore) - } - deleteItems={!showWriteControls ? undefined : deleteItems} - createItem={!showWriteControls ? undefined : createItem} - editItem={!showWriteControls ? undefined : editItem} - entityNamePlural={getEntityNamePlural()} - title={getTableListTitle()} - headingId="dashboardListingHeading" - initialPageSize={initialPageSize} - initialFilter={initialFilter} - entityName={getEntityName()} - listingLimit={listingLimit} - emptyPrompt={emptyPrompt} - findItems={fetchItems} - id="dashboard" - > + {...tableListViewTableProps}> <> {children} - setUnsavedDashboardIds(dashboardSessionStorage.getDashboardIdsWithUnsavedChanges()) - } + refreshUnsavedDashboards={refreshUnsavedDashboards} /> diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.test.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.test.tsx index 886d43a1db6d9..2551779752274 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.test.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.test.tsx @@ -34,6 +34,7 @@ const makeDefaultProps = (): DashboardListingEmptyPromptProps => ({ goToDashboard: jest.fn(), setUnsavedDashboardIds: jest.fn(), useSessionStorageIntegration: true, + disableCreateDashboardButton: false, }); function mountWith({ @@ -75,6 +76,21 @@ test('renders empty prompt with link when showWriteControls is on', async () => expect(component!.find('EuiLink').length).toBe(1); }); +test('renders disabled action button when disableCreateDashboardButton is true', async () => { + pluginServices.getServices().dashboardCapabilities.showWriteControls = true; + + let component: ReactWrapper; + await act(async () => { + ({ component } = mountWith({ props: { disableCreateDashboardButton: true } })); + }); + + component!.update(); + + expect(component!.find(`[data-test-subj="newItemButton"]`).first().prop('disabled')).toEqual( + true + ); +}); + test('renders continue button when no dashboards exist but one is in progress', async () => { pluginServices.getServices().dashboardCapabilities.showWriteControls = true; let component: ReactWrapper; diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.tsx index a518c520bcbd8..d1460c53f23e5 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_empty_prompt.tsx @@ -22,13 +22,14 @@ import { getNewDashboardTitle, dashboardUnsavedListingStrings, } from './_dashboard_listing_strings'; -import { DashboardListingProps } from './dashboard_listing'; import { pluginServices } from '../services/plugin_services'; import { confirmDiscardUnsavedChanges } from './confirm_overlays'; import { DASHBOARD_PANELS_UNSAVED_ID } from '../services/dashboard_session_storage/dashboard_session_storage_service'; +import { DashboardListingProps } from './types'; export interface DashboardListingEmptyPromptProps { createItem: () => void; + disableCreateDashboardButton?: boolean; unsavedDashboardIds: string[]; goToDashboard: DashboardListingProps['goToDashboard']; setUnsavedDashboardIds: React.Dispatch>; @@ -41,6 +42,7 @@ export const DashboardListingEmptyPrompt = ({ unsavedDashboardIds, goToDashboard, createItem, + disableCreateDashboardButton, }: DashboardListingEmptyPromptProps) => { const { application, @@ -56,7 +58,13 @@ export const DashboardListingEmptyPrompt = ({ const getEmptyAction = useCallback(() => { if (!isEditingFirstDashboard) { return ( - + {noItemsStrings.getCreateNewDashboardText()} ); @@ -94,11 +102,12 @@ export const DashboardListingEmptyPrompt = ({ ); }, [ - dashboardSessionStorage, isEditingFirstDashboard, + createItem, + disableCreateDashboardButton, + dashboardSessionStorage, setUnsavedDashboardIds, goToDashboard, - createItem, ]); if (!showWriteControls) { diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx new file mode 100644 index 0000000000000..196fd04cddf6c --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx @@ -0,0 +1,112 @@ +/* + * Copyright 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 { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; +import React, { useMemo } from 'react'; + +import { + type TableListViewKibanaDependencies, + TableListViewKibanaProvider, + TableListViewTable, +} from '@kbn/content-management-table-list-view-table'; + +import { toMountPoint, useExecutionContext } from '@kbn/kibana-react-plugin/public'; + +import { pluginServices } from '../services/plugin_services'; + +import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; +import { useDashboardListingTable } from './hooks/use_dashboard_listing_table'; +import { + DashboardListingProps, + DashboardSavedObjectUserContent, + TableListViewApplicationService, +} from './types'; + +export const DashboardListingTable = ({ + disableCreateDashboardButton, + initialFilter, + goToDashboard, + getDashboardUrl, + useSessionStorageIntegration, + urlStateEnabled, +}: DashboardListingProps) => { + const { + application, + notifications, + overlays, + http, + savedObjectsTagging, + coreContext: { executionContext }, + chrome: { theme }, + } = pluginServices.getServices(); + + useExecutionContext(executionContext, { + type: 'application', + page: 'list', + }); + + const { + unsavedDashboardIds, + refreshUnsavedDashboards, + tableListViewTableProps: { title: tableCaption, ...tableListViewTable }, + } = useDashboardListingTable({ + disableCreateDashboardButton, + goToDashboard, + getDashboardUrl, + urlStateEnabled, + useSessionStorageIntegration, + initialFilter, + }); + + const savedObjectsTaggingFakePlugin = useMemo( + () => + savedObjectsTagging.hasApi // TODO: clean up this logic once https://github.com/elastic/kibana/issues/140433 is resolved + ? ({ + ui: savedObjectsTagging, + } as TableListViewKibanaDependencies['savedObjectsTagging']) + : undefined, + [savedObjectsTagging] + ); + + const core = useMemo( + () => ({ + application: application as TableListViewApplicationService, + notifications, + overlays, + http, + theme, + }), + [application, notifications, overlays, http, theme] + ); + + return ( + + + <> + + + tableCaption={tableCaption} + {...tableListViewTable} + /> + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default DashboardListingTable; diff --git a/src/plugins/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.test.tsx b/src/plugins/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.test.tsx new file mode 100644 index 0000000000000..ceb53af4bf2eb --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.test.tsx @@ -0,0 +1,247 @@ +/* + * Copyright 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 { act, renderHook } from '@testing-library/react-hooks'; + +import { useDashboardListingTable } from './use_dashboard_listing_table'; +import { pluginServices } from '../../services/plugin_services'; +import { confirmCreateWithUnsaved } from '../confirm_overlays'; +import { DashboardSavedObjectUserContent } from '../types'; +const clearStateMock = jest.fn(); +const getDashboardUrl = jest.fn(); +const goToDashboard = jest.fn(); +const deleteDashboards = jest.fn().mockResolvedValue(true); +const getUiSettingsMock = jest.fn().mockImplementation((key) => { + if (key === 'savedObjects:listingLimit') { + return 20; + } + if (key === 'savedObjects:perPage') { + return 5; + } + return null; +}); +const getPluginServices = pluginServices.getServices(); + +jest.mock('@kbn/ebt-tools', () => ({ + reportPerformanceMetricEvent: jest.fn(), +})); + +jest.mock('../confirm_overlays', () => ({ + confirmCreateWithUnsaved: jest.fn().mockImplementation((fn) => fn()), +})); + +jest.mock('../_dashboard_listing_strings', () => ({ + dashboardListingTableStrings: { + getEntityName: jest.fn().mockReturnValue('Dashboard'), + getTableListTitle: jest.fn().mockReturnValue('Dashboard List'), + getEntityNamePlural: jest.fn().mockReturnValue('Dashboards'), + }, +})); + +describe('useDashboardListingTable', () => { + beforeEach(() => { + jest.clearAllMocks(); + + getPluginServices.dashboardSessionStorage.dashboardHasUnsavedEdits = jest + .fn() + .mockReturnValue(true); + + getPluginServices.dashboardSessionStorage.getDashboardIdsWithUnsavedChanges = jest + .fn() + .mockReturnValue([]); + + getPluginServices.dashboardSessionStorage.clearState = clearStateMock; + getPluginServices.dashboardCapabilities.showWriteControls = true; + getPluginServices.dashboardContentManagement.deleteDashboards = deleteDashboards; + getPluginServices.settings.uiSettings.get = getUiSettingsMock; + getPluginServices.notifications.toasts.addError = jest.fn(); + }); + + test('should return the correct initial hasInitialFetchReturned state', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(result.current.hasInitialFetchReturned).toBe(false); + }); + + test('should return the correct initial pageDataTestSubject state', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(result.current.pageDataTestSubject).toBeUndefined(); + }); + + test('should return the correct refreshUnsavedDashboards function', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(typeof result.current.refreshUnsavedDashboards).toBe('function'); + }); + + test('should return the correct initial unsavedDashboardIds state', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(result.current.unsavedDashboardIds).toEqual([]); + }); + + test('should return the correct tableListViewTableProps', () => { + const initialFilter = 'myFilter'; + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + initialFilter, + urlStateEnabled: false, + }) + ); + + const tableListViewTableProps = result.current.tableListViewTableProps; + + const expectedProps = { + createItem: expect.any(Function), + deleteItems: expect.any(Function), + editItem: expect.any(Function), + emptyPrompt: expect.any(Object), + entityName: 'Dashboard', + entityNamePlural: 'Dashboards', + findItems: expect.any(Function), + getDetailViewLink: expect.any(Function), + headingId: 'dashboardListingHeading', + id: expect.any(String), + initialFilter: 'myFilter', + initialPageSize: 5, + listingLimit: 20, + onFetchSuccess: expect.any(Function), + setPageDataTestSubject: expect.any(Function), + title: 'Dashboard List', + urlStateEnabled: false, + }; + + expect(tableListViewTableProps).toEqual(expectedProps); + }); + + test('should call deleteDashboards when deleteItems is called', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + act(() => { + result.current.tableListViewTableProps.deleteItems?.([ + { id: 'test-id' } as DashboardSavedObjectUserContent, + ]); + }); + + expect(deleteDashboards).toHaveBeenCalled(); + }); + + test('should call goToDashboard when editItem is called', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + act(() => { + result.current.tableListViewTableProps.editItem?.({ + id: 'test-id', + } as DashboardSavedObjectUserContent); + }); + + expect(goToDashboard).toHaveBeenCalled(); + }); + + test('should call goToDashboard when createItem is called without unsaved changes', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + act(() => { + result.current.tableListViewTableProps.createItem?.(); + }); + + expect(goToDashboard).toHaveBeenCalled(); + }); + + test('should call confirmCreateWithUnsaved and clear state when createItem is called with unsaved changes', () => { + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + useSessionStorageIntegration: true, + }) + ); + + act(() => { + result.current.tableListViewTableProps.createItem?.(); + }); + + expect(confirmCreateWithUnsaved).toHaveBeenCalled(); + expect(clearStateMock).toHaveBeenCalled(); + expect(goToDashboard).toHaveBeenCalled(); + }); + + test('createItem should be undefined when showWriteControls equals false', () => { + getPluginServices.dashboardCapabilities.showWriteControls = false; + + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(result.current.tableListViewTableProps.createItem).toBeUndefined(); + }); + + test('deleteItems should be undefined when showWriteControls equals false', () => { + getPluginServices.dashboardCapabilities.showWriteControls = false; + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(result.current.tableListViewTableProps.deleteItems).toBeUndefined(); + }); + + test('editItem should be undefined when showWriteControls equals false', () => { + getPluginServices.dashboardCapabilities.showWriteControls = false; + const { result } = renderHook(() => + useDashboardListingTable({ + getDashboardUrl, + goToDashboard, + }) + ); + + expect(result.current.tableListViewTableProps.editItem).toBeUndefined(); + }); +}); diff --git a/src/plugins/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx b/src/plugins/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx new file mode 100644 index 0000000000000..f95f2649673b0 --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx @@ -0,0 +1,273 @@ +/* + * Copyright 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, { useCallback, useState, useMemo } from 'react'; +import type { SavedObjectsFindOptionsReference } from '@kbn/core/public'; +import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; +import { TableListViewTableProps } from '@kbn/content-management-table-list-view-table'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; + +import { DashboardListingEmptyPrompt } from '../dashboard_listing_empty_prompt'; +import { pluginServices } from '../../services/plugin_services'; +import { + DASHBOARD_CONTENT_ID, + SAVED_OBJECT_DELETE_TIME, + SAVED_OBJECT_LOADED_TIME, +} from '../../dashboard_constants'; +import { DashboardItem } from '../../../common/content_management'; +import { + dashboardListingErrorStrings, + dashboardListingTableStrings, +} from '../_dashboard_listing_strings'; +import { confirmCreateWithUnsaved } from '../confirm_overlays'; +import { DashboardSavedObjectUserContent } from '../types'; + +type GetDetailViewLink = + TableListViewTableProps['getDetailViewLink']; + +const SAVED_OBJECTS_LIMIT_SETTING = 'savedObjects:listingLimit'; +const SAVED_OBJECTS_PER_PAGE_SETTING = 'savedObjects:perPage'; + +const toTableListViewSavedObject = (hit: DashboardItem): DashboardSavedObjectUserContent => { + const { title, description, timeRestore } = hit.attributes; + return { + type: 'dashboard', + id: hit.id, + updatedAt: hit.updatedAt!, + references: hit.references, + attributes: { + title, + description, + timeRestore, + }, + }; +}; + +interface UseDashboardListingTableReturnType { + hasInitialFetchReturned: boolean; + pageDataTestSubject: string | undefined; + refreshUnsavedDashboards: () => void; + tableListViewTableProps: Omit< + TableListViewTableProps, + 'tableCaption' + > & { title: string }; + unsavedDashboardIds: string[]; +} + +export const useDashboardListingTable = ({ + dashboardListingId = 'dashboard', + disableCreateDashboardButton, + getDashboardUrl, + goToDashboard, + headingId = 'dashboardListingHeading', + initialFilter, + urlStateEnabled, + useSessionStorageIntegration, +}: { + dashboardListingId?: string; + disableCreateDashboardButton?: boolean; + getDashboardUrl: (dashboardId: string, usesTimeRestore: boolean) => string; + goToDashboard: (dashboardId?: string, viewMode?: ViewMode) => void; + headingId?: string; + initialFilter?: string; + urlStateEnabled?: boolean; + useSessionStorageIntegration?: boolean; +}): UseDashboardListingTableReturnType => { + const { + dashboardSessionStorage, + dashboardCapabilities: { showWriteControls }, + dashboardContentManagement: { findDashboards, deleteDashboards }, + settings: { uiSettings }, + notifications: { toasts }, + } = pluginServices.getServices(); + + const { getEntityName, getTableListTitle, getEntityNamePlural } = dashboardListingTableStrings; + const title = getTableListTitle(); + const entityName = getEntityName(); + const entityNamePlural = getEntityNamePlural(); + const [pageDataTestSubject, setPageDataTestSubject] = useState(); + const [hasInitialFetchReturned, setHasInitialFetchReturned] = useState(false); + const [unsavedDashboardIds, setUnsavedDashboardIds] = useState( + dashboardSessionStorage.getDashboardIdsWithUnsavedChanges() + ); + + const listingLimit = uiSettings.get(SAVED_OBJECTS_LIMIT_SETTING); + const initialPageSize = uiSettings.get(SAVED_OBJECTS_PER_PAGE_SETTING); + + const createItem = useCallback(() => { + if (useSessionStorageIntegration && dashboardSessionStorage.dashboardHasUnsavedEdits()) { + confirmCreateWithUnsaved(() => { + dashboardSessionStorage.clearState(); + goToDashboard(); + }, goToDashboard); + return; + } + goToDashboard(); + }, [dashboardSessionStorage, goToDashboard, useSessionStorageIntegration]); + + const emptyPrompt = useMemo( + () => ( + + ), + [ + createItem, + disableCreateDashboardButton, + goToDashboard, + unsavedDashboardIds, + useSessionStorageIntegration, + ] + ); + + const findItems = useCallback( + ( + searchTerm: string, + { + references, + referencesToExclude, + }: { + references?: SavedObjectsFindOptionsReference[]; + referencesToExclude?: SavedObjectsFindOptionsReference[]; + } = {} + ) => { + const searchStartTime = window.performance.now(); + + return findDashboards + .search({ + search: searchTerm, + size: listingLimit, + hasReference: references, + hasNoReference: referencesToExclude, + }) + .then(({ total, hits }) => { + const searchEndTime = window.performance.now(); + const searchDuration = searchEndTime - searchStartTime; + reportPerformanceMetricEvent(pluginServices.getServices().analytics, { + eventName: SAVED_OBJECT_LOADED_TIME, + duration: searchDuration, + meta: { + saved_object_type: DASHBOARD_CONTENT_ID, + }, + }); + return { + total, + hits: hits.map(toTableListViewSavedObject), + }; + }); + }, + [findDashboards, listingLimit] + ); + + const deleteItems = useCallback( + async (dashboardsToDelete: Array<{ id: string }>) => { + try { + const deleteStartTime = window.performance.now(); + + await deleteDashboards( + dashboardsToDelete.map(({ id }) => { + dashboardSessionStorage.clearState(id); + return id; + }) + ); + + const deleteDuration = window.performance.now() - deleteStartTime; + reportPerformanceMetricEvent(pluginServices.getServices().analytics, { + eventName: SAVED_OBJECT_DELETE_TIME, + duration: deleteDuration, + meta: { + saved_object_type: DASHBOARD_CONTENT_ID, + total: dashboardsToDelete.length, + }, + }); + } catch (error) { + toasts.addError(error, { + title: dashboardListingErrorStrings.getErrorDeletingDashboardToast(), + }); + } + + setUnsavedDashboardIds(dashboardSessionStorage.getDashboardIdsWithUnsavedChanges()); + }, + [dashboardSessionStorage, deleteDashboards, toasts] + ); + + const editItem = useCallback( + ({ id }: { id: string | undefined }) => goToDashboard(id, ViewMode.EDIT), + [goToDashboard] + ); + + const onFetchSuccess = useCallback(() => { + if (!hasInitialFetchReturned) { + setHasInitialFetchReturned(true); + } + }, [hasInitialFetchReturned]); + + const getDetailViewLink: GetDetailViewLink = useCallback( + ({ id, attributes: { timeRestore } }) => getDashboardUrl(id, timeRestore), + [getDashboardUrl] + ); + + const tableListViewTableProps = useMemo( + () => ({ + createItem: !showWriteControls ? undefined : createItem, + deleteItems: !showWriteControls ? undefined : deleteItems, + editItem: !showWriteControls ? undefined : editItem, + emptyPrompt, + entityName, + entityNamePlural, + findItems, + getDetailViewLink, + headingId, + id: dashboardListingId, + initialFilter, + initialPageSize, + listingLimit, + onFetchSuccess, + setPageDataTestSubject, + title, + urlStateEnabled, + }), + [ + createItem, + dashboardListingId, + deleteItems, + editItem, + emptyPrompt, + entityName, + entityNamePlural, + findItems, + getDetailViewLink, + headingId, + initialFilter, + initialPageSize, + listingLimit, + onFetchSuccess, + showWriteControls, + title, + urlStateEnabled, + ] + ); + + const refreshUnsavedDashboards = useCallback( + () => setUnsavedDashboardIds(dashboardSessionStorage.getDashboardIdsWithUnsavedChanges()), + [dashboardSessionStorage] + ); + + return { + hasInitialFetchReturned, + pageDataTestSubject, + refreshUnsavedDashboards, + tableListViewTableProps, + unsavedDashboardIds, + }; +}; diff --git a/src/plugins/dashboard/public/dashboard_listing/index.tsx b/src/plugins/dashboard/public/dashboard_listing/index.tsx index 92febf2904bdd..c1c9012252835 100644 --- a/src/plugins/dashboard/public/dashboard_listing/index.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/index.tsx @@ -10,7 +10,7 @@ import React, { Suspense } from 'react'; import { EuiEmptyPrompt, EuiLoadingSpinner } from '@elastic/eui'; import { servicesReady } from '../plugin'; -import { DashboardListingProps } from './dashboard_listing'; +import { DashboardListingProps } from './types'; const ListingTableLoadingIndicator = () => { return } />; @@ -18,11 +18,11 @@ const ListingTableLoadingIndicator = () => { const LazyDashboardListing = React.lazy(() => (async () => { - const modulePromise = import('./dashboard_listing'); + const modulePromise = import('./dashboard_listing_table'); const [module] = await Promise.all([modulePromise, servicesReady]); return { - default: module.DashboardListing, + default: module.DashboardListingTable, }; })().then((module) => module) ); diff --git a/src/plugins/dashboard/public/dashboard_listing/types.ts b/src/plugins/dashboard/public/dashboard_listing/types.ts new file mode 100644 index 0000000000000..c92344d4e778a --- /dev/null +++ b/src/plugins/dashboard/public/dashboard_listing/types.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { PropsWithChildren } from 'react'; +import { type UserContentCommonSchema } from '@kbn/content-management-table-list-view-table'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { DashboardApplicationService } from '../services/application/types'; + +export type DashboardListingProps = PropsWithChildren<{ + disableCreateDashboardButton?: boolean; + initialFilter?: string; + useSessionStorageIntegration?: boolean; + goToDashboard: (dashboardId?: string, viewMode?: ViewMode) => void; + getDashboardUrl: (dashboardId: string, usesTimeRestore: boolean) => string; + urlStateEnabled?: boolean; +}>; + +// because the type of `application.capabilities.advancedSettings` is so generic, the provider +// requiring the `save` key to be part of it is causing type issues - so, creating a custom type +export type TableListViewApplicationService = DashboardApplicationService & { + capabilities: { advancedSettings: { save: boolean } }; +}; + +export interface DashboardSavedObjectUserContent extends UserContentCommonSchema { + attributes: { + title: string; + description?: string; + timeRestore: boolean; + }; +} diff --git a/src/plugins/field_formats/common/constants/duration_formats.ts b/src/plugins/field_formats/common/constants/duration_formats.ts new file mode 100644 index 0000000000000..ab83b71c276b1 --- /dev/null +++ b/src/plugins/field_formats/common/constants/duration_formats.ts @@ -0,0 +1,171 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +const DEFAULT_INPUT_FORMAT = { + text: i18n.translate('fieldFormats.duration.inputFormats.seconds', { + defaultMessage: 'Seconds', + }), + kind: 'seconds', +}; +const inputFormats = [ + { + text: i18n.translate('fieldFormats.duration.inputFormats.picoseconds', { + defaultMessage: 'Picoseconds', + }), + kind: 'picoseconds', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.nanoseconds', { + defaultMessage: 'Nanoseconds', + }), + kind: 'nanoseconds', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.microseconds', { + defaultMessage: 'Microseconds', + }), + kind: 'microseconds', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.milliseconds', { + defaultMessage: 'Milliseconds', + }), + kind: 'milliseconds', + }, + { ...DEFAULT_INPUT_FORMAT }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.minutes', { + defaultMessage: 'Minutes', + }), + kind: 'minutes', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.hours', { + defaultMessage: 'Hours', + }), + kind: 'hours', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.days', { + defaultMessage: 'Days', + }), + kind: 'days', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.weeks', { + defaultMessage: 'Weeks', + }), + kind: 'weeks', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.months', { + defaultMessage: 'Months', + }), + kind: 'months', + }, + { + text: i18n.translate('fieldFormats.duration.inputFormats.years', { + defaultMessage: 'Years', + }), + kind: 'years', + }, +]; +const DEFAULT_OUTPUT_FORMAT = { + text: i18n.translate('fieldFormats.duration.outputFormats.humanize.approximate', { + defaultMessage: 'Human-readable (approximate)', + }), + method: 'humanize', +}; +const outputFormats = [ + { ...DEFAULT_OUTPUT_FORMAT }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.humanize.precise', { + defaultMessage: 'Human-readable (precise)', + }), + method: 'humanizePrecise', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asMilliseconds', { + defaultMessage: 'Milliseconds', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asMilliseconds.short', { + defaultMessage: 'ms', + }), + method: 'asMilliseconds', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asSeconds', { + defaultMessage: 'Seconds', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asSeconds.short', { + defaultMessage: 's', + }), + method: 'asSeconds', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asMinutes', { + defaultMessage: 'Minutes', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asMinutes.short', { + defaultMessage: 'min', + }), + method: 'asMinutes', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asHours', { + defaultMessage: 'Hours', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asHours.short', { + defaultMessage: 'h', + }), + method: 'asHours', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asDays', { + defaultMessage: 'Days', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asDays.short', { + defaultMessage: 'd', + }), + method: 'asDays', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asWeeks', { + defaultMessage: 'Weeks', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asWeeks.short', { + defaultMessage: 'w', + }), + method: 'asWeeks', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asMonths', { + defaultMessage: 'Months', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asMonths.short', { + defaultMessage: 'mon', + }), + method: 'asMonths', + }, + { + text: i18n.translate('fieldFormats.duration.outputFormats.asYears', { + defaultMessage: 'Years', + }), + shortText: i18n.translate('fieldFormats.duration.outputFormats.asYears.short', { + defaultMessage: 'y', + }), + method: 'asYears', + }, +]; + +export const DEFAULT_DURATION_INPUT_FORMAT = DEFAULT_INPUT_FORMAT; +export const DEFAULT_DURATION_OUTPUT_FORMAT = DEFAULT_OUTPUT_FORMAT; +export const DURATION_INPUT_FORMATS = inputFormats; +export const DURATION_OUTPUT_FORMATS = outputFormats; diff --git a/src/plugins/field_formats/common/converters/duration.ts b/src/plugins/field_formats/common/converters/duration.ts index 72f893b59ef4a..1579d6058e98c 100644 --- a/src/plugins/field_formats/common/converters/duration.ts +++ b/src/plugins/field_formats/common/converters/duration.ts @@ -11,171 +11,22 @@ import moment, { unitOfTime, Duration } from 'moment'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; import { FieldFormat } from '../field_format'; import { TextContextTypeConvert, FIELD_FORMAT_IDS } from '../types'; +import { + DEFAULT_DURATION_INPUT_FORMAT, + DEFAULT_DURATION_OUTPUT_FORMAT, + DURATION_INPUT_FORMATS, + DURATION_OUTPUT_FORMATS, +} from '../constants/duration_formats'; const ratioToSeconds: Record = { picoseconds: 0.000000000001, nanoseconds: 0.000000001, microseconds: 0.000001, }; + const HUMAN_FRIENDLY = 'humanize'; const HUMAN_FRIENDLY_PRECISE = 'humanizePrecise'; const DEFAULT_OUTPUT_PRECISION = 2; -const DEFAULT_INPUT_FORMAT = { - text: i18n.translate('fieldFormats.duration.inputFormats.seconds', { - defaultMessage: 'Seconds', - }), - kind: 'seconds', -}; -const inputFormats = [ - { - text: i18n.translate('fieldFormats.duration.inputFormats.picoseconds', { - defaultMessage: 'Picoseconds', - }), - kind: 'picoseconds', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.nanoseconds', { - defaultMessage: 'Nanoseconds', - }), - kind: 'nanoseconds', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.microseconds', { - defaultMessage: 'Microseconds', - }), - kind: 'microseconds', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.milliseconds', { - defaultMessage: 'Milliseconds', - }), - kind: 'milliseconds', - }, - { ...DEFAULT_INPUT_FORMAT }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.minutes', { - defaultMessage: 'Minutes', - }), - kind: 'minutes', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.hours', { - defaultMessage: 'Hours', - }), - kind: 'hours', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.days', { - defaultMessage: 'Days', - }), - kind: 'days', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.weeks', { - defaultMessage: 'Weeks', - }), - kind: 'weeks', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.months', { - defaultMessage: 'Months', - }), - kind: 'months', - }, - { - text: i18n.translate('fieldFormats.duration.inputFormats.years', { - defaultMessage: 'Years', - }), - kind: 'years', - }, -]; -const DEFAULT_OUTPUT_FORMAT = { - text: i18n.translate('fieldFormats.duration.outputFormats.humanize.approximate', { - defaultMessage: 'Human-readable (approximate)', - }), - method: 'humanize', -}; -const outputFormats = [ - { ...DEFAULT_OUTPUT_FORMAT }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.humanize.precise', { - defaultMessage: 'Human-readable (precise)', - }), - method: 'humanizePrecise', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asMilliseconds', { - defaultMessage: 'Milliseconds', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asMilliseconds.short', { - defaultMessage: 'ms', - }), - method: 'asMilliseconds', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asSeconds', { - defaultMessage: 'Seconds', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asSeconds.short', { - defaultMessage: 's', - }), - method: 'asSeconds', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asMinutes', { - defaultMessage: 'Minutes', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asMinutes.short', { - defaultMessage: 'min', - }), - method: 'asMinutes', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asHours', { - defaultMessage: 'Hours', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asHours.short', { - defaultMessage: 'h', - }), - method: 'asHours', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asDays', { - defaultMessage: 'Days', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asDays.short', { - defaultMessage: 'd', - }), - method: 'asDays', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asWeeks', { - defaultMessage: 'Weeks', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asWeeks.short', { - defaultMessage: 'w', - }), - method: 'asWeeks', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asMonths', { - defaultMessage: 'Months', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asMonths.short', { - defaultMessage: 'mon', - }), - method: 'asMonths', - }, - { - text: i18n.translate('fieldFormats.duration.outputFormats.asYears', { - defaultMessage: 'Years', - }), - shortText: i18n.translate('fieldFormats.duration.outputFormats.asYears.short', { - defaultMessage: 'y', - }), - method: 'asYears', - }, -]; function parseInputAsDuration(val: number, inputFormat: string) { const ratio = ratioToSeconds[inputFormat] || 1; @@ -214,8 +65,8 @@ export class DurationFormat extends FieldFormat { defaultMessage: 'Duration', }); static fieldType = KBN_FIELD_TYPES.NUMBER; - static inputFormats = inputFormats; - static outputFormats = outputFormats; + static inputFormats = DURATION_INPUT_FORMATS; + static outputFormats = DURATION_OUTPUT_FORMATS; allowsNumericalAggregations = true; isHuman() { @@ -228,8 +79,8 @@ export class DurationFormat extends FieldFormat { getParamDefaults() { return { - inputFormat: DEFAULT_INPUT_FORMAT.kind, - outputFormat: DEFAULT_OUTPUT_FORMAT.method, + inputFormat: DEFAULT_DURATION_INPUT_FORMAT.kind, + outputFormat: DEFAULT_DURATION_OUTPUT_FORMAT.method, outputPrecision: DEFAULT_OUTPUT_PRECISION, includeSpaceWithSuffix: true, }; @@ -261,7 +112,7 @@ export class DurationFormat extends FieldFormat { : duration[outputFormat](); const precise = human || humanPrecise ? formatted : formatted.toFixed(outputPrecision); - const type = outputFormats.find(({ method }) => method === outputFormat); + const type = DURATION_OUTPUT_FORMATS.find(({ method }) => method === outputFormat); const unitText = useShortSuffix ? type?.shortText : type?.text.toLowerCase(); @@ -293,7 +144,7 @@ function formatDuration( ]; const getUnitText = (method: string) => { - const type = outputFormats.find(({ method: methodT }) => method === methodT); + const type = DURATION_OUTPUT_FORMATS.find(({ method: methodT }) => method === methodT); return useShortSuffix ? type?.shortText : type?.text.toLowerCase(); }; diff --git a/src/plugins/field_formats/common/index.ts b/src/plugins/field_formats/common/index.ts index 9f3a037d5f5e8..23c6f51b04823 100644 --- a/src/plugins/field_formats/common/index.ts +++ b/src/plugins/field_formats/common/index.ts @@ -37,6 +37,12 @@ export { getHighlightRequest, geoUtils } from './utils'; export { DEFAULT_CONVERTER_COLOR } from './constants/color_default'; export { FORMATS_UI_SETTINGS } from './constants/ui_settings'; +export { + DEFAULT_DURATION_INPUT_FORMAT, + DEFAULT_DURATION_OUTPUT_FORMAT, + DURATION_INPUT_FORMATS, + DURATION_OUTPUT_FORMATS, +} from './constants/duration_formats'; export { FIELD_FORMAT_IDS } from './types'; export { HTML_CONTEXT_TYPE, TEXT_CONTEXT_TYPE } from './content_types'; diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/data.json index f7015ee20251d..2acf9f6bbdd1a 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/data.json @@ -10,7 +10,6 @@ "enabled": true }, "type": "test-is-exportable", - "migrationVersion": {}, "updated_at": "2018-12-21T00:43:07.096Z", "references": [ { @@ -40,7 +39,6 @@ "enabled": false }, "type": "test-is-exportable", - "migrationVersion": {}, "updated_at": "2018-12-21T00:43:07.096Z", "references": [] } @@ -59,7 +57,6 @@ "enabled": true }, "type": "test-is-exportable", - "migrationVersion": {}, "updated_at": "2018-12-21T00:43:07.096Z", "references": [ { @@ -89,7 +86,6 @@ "enabled": false }, "type": "test-is-exportable", - "migrationVersion": {}, "updated_at": "2018-12-21T00:43:07.096Z", "references": [] } @@ -108,7 +104,6 @@ "enabled": true }, "type": "test-is-exportable", - "migrationVersion": {}, "updated_at": "2018-12-21T00:43:07.096Z", "references": [] } @@ -127,7 +122,6 @@ "enabled": true }, "type": "test-is-exportable", - "migrationVersion": {}, "updated_at": "2018-12-21T00:43:07.096Z", "references": [] } diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/mappings.json b/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/mappings.json deleted file mode 100644 index d0101f16f85d0..0000000000000 --- a/test/functional/fixtures/es_archiver/saved_objects_management/export_exclusion/mappings.json +++ /dev/null @@ -1,464 +0,0 @@ -{ - "type": "index", - "value": { - "index": ".kibana", - "settings": { - "index": { - "number_of_shards": "1", - "auto_expand_replicas": "0-1", - "number_of_replicas": "0" - } - }, - "mappings": { - "dynamic": "strict", - "properties": { - "test-export-transform": { - "properties": { - "title": { "type": "text" }, - "enabled": { "type": "boolean" } - } - }, - "test-is-exportable": { - "properties": { - "title": { "type": "text" }, - "enabled": { "type": "boolean" } - } - }, - "test-export-add": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-add-dep": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-transform-error": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-invalid-transform": { - "properties": { - "title": { "type": "text" } - } - }, - "apm-telemetry": { - "properties": { - "has_any_services": { - "type": "boolean" - }, - "services_per_agent": { - "properties": { - "go": { - "type": "long", - "null_value": 0 - }, - "java": { - "type": "long", - "null_value": 0 - }, - "js-base": { - "type": "long", - "null_value": 0 - }, - "nodejs": { - "type": "long", - "null_value": 0 - }, - "python": { - "type": "long", - "null_value": 0 - }, - "ruby": { - "type": "long", - "null_value": 0 - } - } - } - } - }, - "canvas-workpad": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" - }, - "@timestamp": { - "type": "date" - }, - "id": { - "type": "text", - "index": false - }, - "name": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword" - } - } - } - } - }, - "config": { - "dynamic": "true", - "properties": { - "accessibility:disableAnimations": { - "type": "boolean" - }, - "buildNum": { - "type": "keyword" - }, - "dateFormat:tz": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - }, - "defaultIndex": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - }, - "telemetry:optIn": { - "type": "boolean" - } - } - }, - "dashboard": { - "properties": { - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "optionsJSON": { - "type": "text" - }, - "panelsJSON": { - "type": "text" - }, - "refreshInterval": { - "properties": { - "display": { - "type": "keyword" - }, - "pause": { - "type": "boolean" - }, - "section": { - "type": "integer" - }, - "value": { - "type": "integer" - } - } - }, - "timeFrom": { - "type": "keyword" - }, - "timeRestore": { - "type": "boolean" - }, - "timeTo": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "map": { - "properties": { - "bounds": { - "dynamic": false, - "properties": {} - }, - "description": { - "type": "text" - }, - "layerListJSON": { - "type": "text" - }, - "mapStateJSON": { - "type": "text" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "graph-workspace": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "numLinks": { - "type": "integer" - }, - "numVertices": { - "type": "integer" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "wsState": { - "type": "text" - } - } - }, - "index-pattern": { - "properties": { - "fieldFormatMap": { - "type": "text" - }, - "fields": { - "type": "text" - }, - "intervalName": { - "type": "keyword" - }, - "notExpandable": { - "type": "boolean" - }, - "sourceFilters": { - "type": "text" - }, - "timeFieldName": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "type": { - "type": "keyword" - }, - "typeMeta": { - "type": "keyword" - } - } - }, - "kql-telemetry": { - "properties": { - "optInCount": { - "type": "long" - }, - "optOutCount": { - "type": "long" - } - } - }, - "migrationVersion": { - "dynamic": "true", - "properties": { - "index-pattern": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - }, - "space": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - } - } - }, - "namespace": { - "type": "keyword" - }, - "search": { - "properties": { - "columns": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "sort": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "server": { - "properties": { - "uuid": { - "type": "keyword" - } - } - }, - "space": { - "properties": { - "_reserved": { - "type": "boolean" - }, - "color": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "disabledFeatures": { - "type": "keyword" - }, - "initials": { - "type": "keyword" - }, - "name": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 2048 - } - } - } - } - }, - "spaceId": { - "type": "keyword" - }, - "telemetry": { - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "type": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - }, - "url": { - "properties": { - "accessCount": { - "type": "long" - }, - "accessDate": { - "type": "date" - }, - "createDate": { - "type": "date" - }, - "url": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 2048 - } - } - } - } - }, - "visualization": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "savedSearchId": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "visState": { - "type": "text" - } - } - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - } - } - } - } -} diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/export_transform/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/export_transform/data.json index 54feabcf54331..0c0b1b419a14a 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/export_transform/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/export_transform/data.json @@ -5,8 +5,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-transform": { "enabled": true, "title": "test_1-obj_1" @@ -25,8 +24,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-transform": { "enabled": true, "title": "test_1-obj_2" @@ -45,8 +43,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-add": { "title": "test_2-obj_1" }, @@ -64,8 +61,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-add": { "title": "test_2-obj_2" }, @@ -129,8 +125,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-invalid-transform": { "title": "test_2-obj_1" }, @@ -148,8 +143,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-transform-error": { "title": "test_2-obj_1" }, @@ -158,4 +152,5 @@ }, "type": "_doc" } -} \ No newline at end of file +} + diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/data.json index 8a6367d8f7659..f53215f555ab1 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/data.json @@ -25,3 +25,4 @@ } } } + diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/mappings.json b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/mappings.json deleted file mode 100644 index 3614080e5f584..0000000000000 --- a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_from_http_apis/mappings.json +++ /dev/null @@ -1,3886 +0,0 @@ -{ - "type": "index", - "value": { - "aliases": { - ".kibana": { - "is_hidden": true - }, - ".kibana_8.7.0": { - "is_hidden": true - } - }, - "index": ".kibana_1", - "mappings": { - "_meta": { - "migrationMappingPropertyHashes": { - "action": "38c91d092e0790ecd9ebe58e82145280", - "action_task_params": "d43ed71d8608a6406977fe093a9fbe74", - "alert": "bc1c55763564c3ebb167da6d324a0a05", - "api_key_pending_invalidation": "16f515278a295f6245149ad7c5ddedb7", - "apm-indices": "3d1b76c39bfb2cc8296b024d73854724", - "apm-server-schema": "b1d71908f324c17bf744ac72af5038fb", - "apm-service-group": "2af509c6506f29a858e5a0950577d9fa", - "apm-telemetry": "3d1b76c39bfb2cc8296b024d73854724", - "app_search_telemetry": "3d1b76c39bfb2cc8296b024d73854724", - "application_usage_daily": "43b8830d5d0df85a6823d290885fc9fd", - "application_usage_totals": "3d1b76c39bfb2cc8296b024d73854724", - "canvas-element": "7390014e1091044523666d97247392fc", - "canvas-workpad": "b0a1706d356228dbdcb4a17e6b9eb231", - "canvas-workpad-template": "ae2673f678281e2c055d764b153e9715", - "cases": "fa60347cb6869de399b5b0e6ef49538f", - "cases-comments": "2ef945f765cefb6421548c1dc227ab49", - "cases-configure": "f32095d284444601d7b39a314751832c", - "cases-connector-mappings": "17d2e9e0e170a21a471285a5d845353c", - "cases-telemetry": "3d1b76c39bfb2cc8296b024d73854724", - "cases-user-actions": "4d3f0799ea1a3c48e0015da327e46848", - "config": "c63748b75f39d0c54de12d12c1ccbc20", - "config-global": "c63748b75f39d0c54de12d12c1ccbc20", - "connector_token": "53e34e65945ca21461be85f868495da5", - "core-usage-stats": "3d1b76c39bfb2cc8296b024d73854724", - "coreMigrationVersion": "2f4316de49999235636386fe51dc06c1", - "created_at": "00da57df13e94e9d98437d13ace4bfe0", - "csp-rule-template": "8b03466c92eddc1458758ca6827eb540", - "csp_rule": "e962ddf765c0380b0fd57711e4684d4e", - "dashboard": "bc881edf161013a17165a244e0812e9f", - "endpoint:user-artifact": "4a11183eee21e6fbad864f7a30b39ad0", - "endpoint:user-artifact-manifest": "a0d7b04ad405eed54d76e279c3727862", - "enterprise_search_telemetry": "3d1b76c39bfb2cc8296b024d73854724", - "epm-packages": "77c148aa49f233d2a6554f513862bd38", - "epm-packages-assets": "44621b2f6052ef966da47b7c3a00f33b", - "event_loop_delays_daily": "5df7e292ddd5028e07c1482e130e6654", - "exception-list": "baf108c9934dda844921f692a513adae", - "exception-list-agnostic": "baf108c9934dda844921f692a513adae", - "file": "c38faa34f21af9cef4301a687de5dce0", - "file-upload-usage-collection-telemetry": "a34fbb8e3263d105044869264860c697", - "fileShare": "aa8f7ac2ddf8ab1a91bd34e347046caa", - "fleet-fleet-server-host": "434168167d1a1fd82fe92584ab9845c2", - "fleet-preconfiguration-deletion-record": "4c36f199189a367e43541f236141204c", - "fleet-proxy": "05b7a22977de25ce67a77e44dd8e6c33", - "graph-workspace": "27a94b2edcb0610c6aea54a7c56d7752", - "guided-onboarding-guide-state": "a3db59c45a3fd2730816d4f53c35c7d9", - "guided-onboarding-plugin-state": "3d1b76c39bfb2cc8296b024d73854724", - "index-pattern": "83c02d842fe2a94d14dfa13f7dcd6e87", - "infrastructure-monitoring-log-view": "c50526fc6040c5355ed027d34d05b35c", - "infrastructure-ui-source": "3d1b76c39bfb2cc8296b024d73854724", - "ingest-agent-policies": "6892b04ed54b03bceb7b99d204e9f719", - "ingest-download-sources": "5d602f6594f3b589dc9a8e3a44031522", - "ingest-outputs": "e2347e19e5c2a7448529d77abbf27f30", - "ingest-package-policies": "c9f0cc1a2ed81041e29b69f1f1f79b68", - "ingest_manager_settings": "a9f356eec1c40d030f433bbf47c2b479", - "inventory-view": "3d1b76c39bfb2cc8296b024d73854724", - "kql-telemetry": "d12a98a6f19a2d273696597547e064ee", - "legacy-url-alias": "0750774cf16475f88f2361e99cc5c8f0", - "lens": "52346cfec69ff7b47d5f0c12361a2797", - "lens-ui-telemetry": "509bfa5978586998e05f9e303c07a327", - "map": "9134b47593116d7953f6adba096fc463", - "maps-telemetry": "5ef305b18111b77789afefbd36b66171", - "metrics-explorer-view": "3d1b76c39bfb2cc8296b024d73854724", - "migrationVersion": "4a1746014a75ade3a714e1db5763276f", - "ml-job": "3bb64c31915acf93fc724af137a0891b", - "ml-module": "46ef4f0d6682636f0fff9799d6a2d7ac", - "ml-trained-model": "d2f03c1a5dd038fa58af14a56944312b", - "monitoring-telemetry": "2669d5ec15e82391cf58df4294ee9c68", - "namespace": "2f4316de49999235636386fe51dc06c1", - "namespaces": "2f4316de49999235636386fe51dc06c1", - "originId": "2f4316de49999235636386fe51dc06c1", - "osquery-manager-usage-metric": "4dc4f647d27247c002f56f22742175fe", - "osquery-pack": "37af487fae033ccd92295fd20d1952f0", - "osquery-pack-asset": "989d30eeccb25d62980739dc7790a875", - "osquery-saved-query": "6bf77cfe41a55adb3a00d58e96d72ce9", - "query": "11aaeb7f5f7fa5bb43f25e18ce26e7d9", - "references": "7997cf5a56cc02bdc9c93361bde732b0", - "sample-data-telemetry": "7d3cfeb915303c9641c59681967ffeb4", - "search": "f8d7012ea128c1f7eee2524e4ea346a6", - "search-session": "daa126fce3214044789ffe971a365145", - "search-telemetry": "3d1b76c39bfb2cc8296b024d73854724", - "security-rule": "8ae39a88fc70af3375b7050e8d8d5cc7", - "security-solution-signals-migration": "72761fd374ca11122ac8025a92b84fca", - "siem-detection-engine-rule-actions": "ec8a5cc503fc8cd151a2463190e4e425", - "siem-detection-engine-rule-execution-info": "f28f675a06fe27d22dc3be04005ac987", - "siem-ui-timeline": "0f4cc81427182c41cebd7d9c640ec253", - "siem-ui-timeline-note": "28393dfdeb4e4413393eb5f7ec8c5436", - "siem-ui-timeline-pinned-event": "293fce142548281599060e07ad2c9ddb", - "space": "c5ca8acafa0beaa4d08d014a97b6bc6b", - "spaces-usage-stats": "3d1b76c39bfb2cc8296b024d73854724", - "synthetics-monitor": "b7d62441939ad093caa011c7082a2af4", - "synthetics-param": "3d1b76c39bfb2cc8296b024d73854724", - "synthetics-privates-locations": "3d1b76c39bfb2cc8296b024d73854724", - "tag": "83d55da58f6530f7055415717ec06474", - "telemetry": "36a616f7026dfa617d6655df850fe16d", - "test-actions-export-hidden": "8b555f1f2684de2490682d4ac5dfbd2e", - "test-deprecations-plugin": "8e3906e5ac842a30d0de07848b59f6cb", - "test-export-add": "8e3906e5ac842a30d0de07848b59f6cb", - "test-export-add-dep": "8e3906e5ac842a30d0de07848b59f6cb", - "test-export-invalid-transform": "8e3906e5ac842a30d0de07848b59f6cb", - "test-export-transform": "8b555f1f2684de2490682d4ac5dfbd2e", - "test-export-transform-error": "8e3906e5ac842a30d0de07848b59f6cb", - "test-hidden-from-http-apis-importable-exportable": "8e3906e5ac842a30d0de07848b59f6cb", - "test-hidden-importable-exportable": "8e3906e5ac842a30d0de07848b59f6cb", - "test-hidden-non-importable-exportable": "8e3906e5ac842a30d0de07848b59f6cb", - "test-is-exportable": "8b555f1f2684de2490682d4ac5dfbd2e", - "test-not-hidden-from-http-apis-importable-exportable": "8e3906e5ac842a30d0de07848b59f6cb", - "test-not-visible-in-management": "8b555f1f2684de2490682d4ac5dfbd2e", - "test-visible-in-management": "8b555f1f2684de2490682d4ac5dfbd2e", - "test-with-display-name": "8b555f1f2684de2490682d4ac5dfbd2e", - "test_import_warning_1": "8e3906e5ac842a30d0de07848b59f6cb", - "test_import_warning_2": "8e3906e5ac842a30d0de07848b59f6cb", - "type": "2f4316de49999235636386fe51dc06c1", - "ui-metric": "0d409297dc5ebe1e3a1da691c6ee32e3", - "updated_at": "00da57df13e94e9d98437d13ace4bfe0", - "upgrade-assistant-ml-upgrade-operation": "ece1011519ca8fd057364605744d75ac", - "upgrade-assistant-reindex-operation": "215107c281839ea9b3ad5f6419819763", - "upgrade-assistant-telemetry": "7443e25d76c53f49aaf2daac37d4d1f8", - "uptime-dynamic-settings": "3d1b76c39bfb2cc8296b024d73854724", - "uptime-synthetics-api-key": "c3178f0fde61e18d3530ba9a70bc278a", - "url": "dde920c35ebae1bf43731d19f7b2194d", - "usage-counters": "8cc260bdceffec4ffc3ad165c97dc1b4", - "visualization": "f819cf6636b75c9e76ba733a0c6ef355", - "workplace_search_telemetry": "3d1b76c39bfb2cc8296b024d73854724" - } - }, - "dynamic": "strict", - "properties": { - "action": { - "properties": { - "actionTypeId": { - "type": "keyword" - }, - "config": { - "enabled": false, - "type": "object" - }, - "isMissingSecrets": { - "type": "boolean" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "secrets": { - "type": "binary" - } - } - }, - "action_task_params": { - "properties": { - "actionId": { - "type": "keyword" - }, - "apiKey": { - "type": "binary" - }, - "consumer": { - "type": "keyword" - }, - "executionId": { - "type": "keyword" - }, - "params": { - "enabled": false, - "type": "object" - }, - "relatedSavedObjects": { - "enabled": false, - "type": "object" - } - } - }, - "alert": { - "properties": { - "actions": { - "properties": { - "actionRef": { - "type": "keyword" - }, - "actionTypeId": { - "type": "keyword" - }, - "frequency": { - "properties": { - "notifyWhen": { - "index": false, - "type": "keyword" - }, - "summary": { - "index": false, - "type": "boolean" - }, - "throttle": { - "index": false, - "type": "keyword" - } - } - }, - "group": { - "type": "keyword" - }, - "params": { - "enabled": false, - "type": "object" - } - }, - "type": "nested" - }, - "alertTypeId": { - "type": "keyword" - }, - "apiKey": { - "type": "binary" - }, - "apiKeyOwner": { - "type": "keyword" - }, - "consumer": { - "type": "keyword" - }, - "createdAt": { - "type": "date" - }, - "createdBy": { - "type": "keyword" - }, - "enabled": { - "type": "boolean" - }, - "executionStatus": { - "properties": { - "error": { - "properties": { - "message": { - "type": "keyword" - }, - "reason": { - "type": "keyword" - } - } - }, - "lastDuration": { - "type": "long" - }, - "lastExecutionDate": { - "type": "date" - }, - "numberOfTriggeredActions": { - "type": "long" - }, - "status": { - "type": "keyword" - }, - "warning": { - "properties": { - "message": { - "type": "keyword" - }, - "reason": { - "type": "keyword" - } - } - } - } - }, - "lastRun": { - "properties": { - "alertsCount": { - "properties": { - "active": { - "type": "float" - }, - "ignored": { - "type": "float" - }, - "new": { - "type": "float" - }, - "recovered": { - "type": "float" - } - } - }, - "outcome": { - "type": "keyword" - }, - "outcomeMsg": { - "type": "text" - }, - "outcomeOrder": { - "type": "float" - }, - "warning": { - "type": "text" - } - } - }, - "legacyId": { - "type": "keyword" - }, - "mapped_params": { - "properties": { - "risk_score": { - "type": "float" - }, - "severity": { - "type": "keyword" - } - } - }, - "meta": { - "properties": { - "versionApiKeyLastmodified": { - "type": "keyword" - } - } - }, - "monitoring": { - "properties": { - "run": { - "properties": { - "calculated_metrics": { - "properties": { - "p50": { - "type": "long" - }, - "p95": { - "type": "long" - }, - "p99": { - "type": "long" - }, - "success_ratio": { - "type": "float" - } - } - }, - "history": { - "properties": { - "duration": { - "type": "long" - }, - "outcome": { - "type": "keyword" - }, - "success": { - "type": "boolean" - }, - "timestamp": { - "type": "date" - } - } - }, - "last_run": { - "properties": { - "metrics": { - "properties": { - "duration": { - "type": "long" - }, - "gap_duration_s": { - "type": "float" - }, - "total_alerts_created": { - "type": "float" - }, - "total_alerts_detected": { - "type": "float" - }, - "total_indexing_duration_ms": { - "type": "long" - }, - "total_search_duration_ms": { - "type": "long" - } - } - }, - "timestamp": { - "type": "date" - } - } - } - } - } - } - }, - "muteAll": { - "type": "boolean" - }, - "mutedInstanceIds": { - "type": "keyword" - }, - "name": { - "fields": { - "keyword": { - "normalizer": "lowercase", - "type": "keyword" - } - }, - "type": "text" - }, - "nextRun": { - "type": "date" - }, - "notifyWhen": { - "type": "keyword" - }, - "params": { - "ignore_above": 4096, - "type": "flattened" - }, - "running": { - "type": "boolean" - }, - "schedule": { - "properties": { - "interval": { - "type": "keyword" - } - } - }, - "scheduledTaskId": { - "type": "keyword" - }, - "snoozeSchedule": { - "properties": { - "duration": { - "type": "long" - }, - "id": { - "type": "keyword" - }, - "rRule": { - "properties": { - "byhour": { - "type": "long" - }, - "byminute": { - "type": "long" - }, - "bymonth": { - "type": "short" - }, - "bymonthday": { - "type": "short" - }, - "bysecond": { - "type": "long" - }, - "bysetpos": { - "type": "long" - }, - "byweekday": { - "type": "keyword" - }, - "byweekno": { - "type": "short" - }, - "byyearday": { - "type": "short" - }, - "count": { - "type": "long" - }, - "dtstart": { - "format": "strict_date_time", - "type": "date" - }, - "freq": { - "type": "keyword" - }, - "interval": { - "type": "long" - }, - "tzid": { - "type": "keyword" - }, - "until": { - "format": "strict_date_time", - "type": "date" - }, - "wkst": { - "type": "keyword" - } - }, - "type": "nested" - }, - "skipRecurrences": { - "format": "strict_date_time", - "type": "date" - } - }, - "type": "nested" - }, - "tags": { - "type": "keyword" - }, - "throttle": { - "type": "keyword" - }, - "updatedAt": { - "type": "date" - }, - "updatedBy": { - "type": "keyword" - } - } - }, - "api_key_pending_invalidation": { - "properties": { - "apiKeyId": { - "type": "keyword" - }, - "createdAt": { - "type": "date" - } - } - }, - "apm-indices": { - "dynamic": "false", - "type": "object" - }, - "apm-server-schema": { - "properties": { - "schemaJson": { - "index": false, - "type": "text" - } - } - }, - "apm-service-group": { - "properties": { - "color": { - "type": "text" - }, - "description": { - "type": "text" - }, - "groupName": { - "type": "keyword" - }, - "kuery": { - "type": "text" - } - } - }, - "apm-telemetry": { - "dynamic": "false", - "type": "object" - }, - "app_search_telemetry": { - "dynamic": "false", - "type": "object" - }, - "application_usage_daily": { - "dynamic": "false", - "properties": { - "timestamp": { - "type": "date" - } - } - }, - "application_usage_totals": { - "dynamic": "false", - "type": "object" - }, - "canvas-element": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" - }, - "@timestamp": { - "type": "date" - }, - "content": { - "type": "text" - }, - "help": { - "type": "text" - }, - "image": { - "type": "text" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "canvas-workpad": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" - }, - "@timestamp": { - "type": "date" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "canvas-workpad-template": { - "dynamic": "false", - "properties": { - "help": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "tags": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "template_key": { - "type": "keyword" - } - } - }, - "cases": { - "properties": { - "assignees": { - "properties": { - "uid": { - "type": "keyword" - } - } - }, - "closed_at": { - "type": "date" - }, - "closed_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "connector": { - "properties": { - "fields": { - "properties": { - "key": { - "type": "text" - }, - "value": { - "type": "text" - } - } - }, - "name": { - "type": "text" - }, - "type": { - "type": "keyword" - } - } - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "description": { - "type": "text" - }, - "duration": { - "type": "unsigned_long" - }, - "external_service": { - "properties": { - "connector_name": { - "type": "keyword" - }, - "external_id": { - "type": "keyword" - }, - "external_title": { - "type": "text" - }, - "external_url": { - "type": "text" - }, - "pushed_at": { - "type": "date" - }, - "pushed_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "owner": { - "type": "keyword" - }, - "settings": { - "properties": { - "syncAlerts": { - "type": "boolean" - } - } - }, - "severity": { - "type": "short" - }, - "status": { - "type": "short" - }, - "tags": { - "type": "keyword" - }, - "title": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "total_alerts": { - "type": "integer" - }, - "total_comments": { - "type": "integer" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "cases-comments": { - "properties": { - "actions": { - "properties": { - "targets": { - "properties": { - "endpointId": { - "type": "keyword" - }, - "hostname": { - "type": "keyword" - } - }, - "type": "nested" - }, - "type": { - "type": "keyword" - } - } - }, - "alertId": { - "type": "keyword" - }, - "comment": { - "type": "text" - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "externalReferenceAttachmentTypeId": { - "type": "keyword" - }, - "externalReferenceId": { - "type": "keyword" - }, - "externalReferenceMetadata": { - "dynamic": "false", - "enabled": false, - "type": "object" - }, - "externalReferenceStorage": { - "dynamic": "false", - "properties": { - "type": { - "type": "keyword" - } - } - }, - "index": { - "type": "keyword" - }, - "owner": { - "type": "keyword" - }, - "persistableStateAttachmentState": { - "dynamic": "false", - "enabled": false, - "type": "object" - }, - "persistableStateAttachmentTypeId": { - "type": "keyword" - }, - "pushed_at": { - "type": "date" - }, - "pushed_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "rule": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - } - } - }, - "type": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "cases-configure": { - "properties": { - "closure_type": { - "type": "keyword" - }, - "connector": { - "properties": { - "fields": { - "properties": { - "key": { - "type": "text" - }, - "value": { - "type": "text" - } - } - }, - "name": { - "type": "text" - }, - "type": { - "type": "keyword" - } - } - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "owner": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - } - } - }, - "cases-connector-mappings": { - "properties": { - "mappings": { - "properties": { - "action_type": { - "type": "keyword" - }, - "source": { - "type": "keyword" - }, - "target": { - "type": "keyword" - } - } - }, - "owner": { - "type": "keyword" - } - } - }, - "cases-telemetry": { - "dynamic": "false", - "type": "object" - }, - "cases-user-actions": { - "properties": { - "action": { - "type": "keyword" - }, - "created_at": { - "type": "date" - }, - "created_by": { - "properties": { - "email": { - "type": "keyword" - }, - "full_name": { - "type": "keyword" - }, - "profile_uid": { - "type": "keyword" - }, - "username": { - "type": "keyword" - } - } - }, - "owner": { - "type": "keyword" - }, - "payload": { - "dynamic": "false", - "properties": { - "connector": { - "properties": { - "type": { - "type": "keyword" - } - } - } - } - }, - "type": { - "type": "keyword" - } - } - }, - "config": { - "dynamic": "false", - "properties": { - "buildNum": { - "type": "keyword" - } - } - }, - "config-global": { - "dynamic": "false", - "properties": { - "buildNum": { - "type": "keyword" - } - } - }, - "connector_token": { - "properties": { - "connectorId": { - "type": "keyword" - }, - "createdAt": { - "type": "date" - }, - "expiresAt": { - "type": "date" - }, - "token": { - "type": "binary" - }, - "tokenType": { - "type": "keyword" - }, - "updatedAt": { - "type": "date" - } - } - }, - "core-usage-stats": { - "dynamic": "false", - "type": "object" - }, - "coreMigrationVersion": { - "type": "keyword" - }, - "created_at": { - "type": "date" - }, - "csp-rule-template": { - "dynamic": "false", - "properties": { - "metadata": { - "properties": { - "benchmark": { - "properties": { - "id": { - "type": "keyword" - } - } - }, - "name": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - } - } - } - } - }, - "csp_rule": { - "dynamic": "false", - "properties": { - "enabled": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "boolean" - }, - "metadata": { - "properties": { - "name": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - } - } - }, - "package_policy_id": { - "type": "keyword" - }, - "policy_id": { - "type": "keyword" - } - } - }, - "dashboard": { - "properties": { - "controlGroupInput": { - "properties": { - "chainingSystem": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "controlStyle": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "ignoreParentSettingsJSON": { - "index": false, - "type": "text" - }, - "panelsJSON": { - "index": false, - "type": "text" - } - } - }, - "description": { - "type": "text" - }, - "hits": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "index": false, - "type": "text" - } - } - }, - "optionsJSON": { - "index": false, - "type": "text" - }, - "panelsJSON": { - "index": false, - "type": "text" - }, - "refreshInterval": { - "properties": { - "display": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "pause": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "section": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "value": { - "doc_values": false, - "index": false, - "type": "integer" - } - } - }, - "timeFrom": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "timeRestore": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "timeTo": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "endpoint:user-artifact": { - "properties": { - "body": { - "type": "binary" - }, - "compressionAlgorithm": { - "index": false, - "type": "keyword" - }, - "created": { - "index": false, - "type": "date" - }, - "decodedSha256": { - "index": false, - "type": "keyword" - }, - "decodedSize": { - "index": false, - "type": "long" - }, - "encodedSha256": { - "type": "keyword" - }, - "encodedSize": { - "index": false, - "type": "long" - }, - "encryptionAlgorithm": { - "index": false, - "type": "keyword" - }, - "identifier": { - "type": "keyword" - } - } - }, - "endpoint:user-artifact-manifest": { - "properties": { - "artifacts": { - "properties": { - "artifactId": { - "index": false, - "type": "keyword" - }, - "policyId": { - "index": false, - "type": "keyword" - } - }, - "type": "nested" - }, - "created": { - "index": false, - "type": "date" - }, - "schemaVersion": { - "type": "keyword" - }, - "semanticVersion": { - "index": false, - "type": "keyword" - } - } - }, - "enterprise_search_telemetry": { - "dynamic": "false", - "type": "object" - }, - "epm-packages": { - "properties": { - "es_index_patterns": { - "enabled": false, - "type": "object" - }, - "experimental_data_stream_features": { - "properties": { - "data_stream": { - "type": "keyword" - }, - "features": { - "properties": { - "synthetic_source": { - "type": "boolean" - }, - "tsdb": { - "type": "boolean" - } - }, - "type": "nested" - } - }, - "type": "nested" - }, - "install_format_schema_version": { - "type": "version" - }, - "install_source": { - "type": "keyword" - }, - "install_started_at": { - "type": "date" - }, - "install_status": { - "type": "keyword" - }, - "install_version": { - "type": "keyword" - }, - "installed_es": { - "properties": { - "id": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "version": { - "type": "keyword" - } - }, - "type": "nested" - }, - "installed_kibana": { - "enabled": false, - "type": "object" - }, - "installed_kibana_space_id": { - "type": "keyword" - }, - "internal": { - "type": "boolean" - }, - "keep_policies_up_to_date": { - "index": false, - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "package_assets": { - "enabled": false, - "type": "object" - }, - "verification_key_id": { - "type": "keyword" - }, - "verification_status": { - "type": "keyword" - }, - "version": { - "type": "keyword" - } - } - }, - "epm-packages-assets": { - "properties": { - "asset_path": { - "type": "keyword" - }, - "data_base64": { - "type": "binary" - }, - "data_utf8": { - "index": false, - "type": "text" - }, - "install_source": { - "type": "keyword" - }, - "media_type": { - "type": "keyword" - }, - "package_name": { - "type": "keyword" - }, - "package_version": { - "type": "keyword" - } - } - }, - "event_loop_delays_daily": { - "dynamic": "false", - "properties": { - "lastUpdatedAt": { - "type": "date" - } - } - }, - "exception-list": { - "properties": { - "_tags": { - "type": "keyword" - }, - "comments": { - "properties": { - "comment": { - "type": "keyword" - }, - "created_at": { - "type": "keyword" - }, - "created_by": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "updated_at": { - "type": "keyword" - }, - "updated_by": { - "type": "keyword" - } - } - }, - "created_at": { - "type": "keyword" - }, - "created_by": { - "type": "keyword" - }, - "description": { - "type": "keyword" - }, - "entries": { - "properties": { - "entries": { - "properties": { - "field": { - "type": "keyword" - }, - "operator": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "value": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - } - } - }, - "field": { - "type": "keyword" - }, - "list": { - "properties": { - "id": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "operator": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "value": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - } - } - }, - "immutable": { - "type": "boolean" - }, - "item_id": { - "type": "keyword" - }, - "list_id": { - "type": "keyword" - }, - "list_type": { - "type": "keyword" - }, - "meta": { - "type": "keyword" - }, - "name": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - }, - "os_types": { - "type": "keyword" - }, - "tags": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - }, - "tie_breaker_id": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "updated_by": { - "type": "keyword" - }, - "version": { - "type": "keyword" - } - } - }, - "exception-list-agnostic": { - "properties": { - "_tags": { - "type": "keyword" - }, - "comments": { - "properties": { - "comment": { - "type": "keyword" - }, - "created_at": { - "type": "keyword" - }, - "created_by": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "updated_at": { - "type": "keyword" - }, - "updated_by": { - "type": "keyword" - } - } - }, - "created_at": { - "type": "keyword" - }, - "created_by": { - "type": "keyword" - }, - "description": { - "type": "keyword" - }, - "entries": { - "properties": { - "entries": { - "properties": { - "field": { - "type": "keyword" - }, - "operator": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "value": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - } - } - }, - "field": { - "type": "keyword" - }, - "list": { - "properties": { - "id": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "operator": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "value": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - } - } - }, - "immutable": { - "type": "boolean" - }, - "item_id": { - "type": "keyword" - }, - "list_id": { - "type": "keyword" - }, - "list_type": { - "type": "keyword" - }, - "meta": { - "type": "keyword" - }, - "name": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - }, - "os_types": { - "type": "keyword" - }, - "tags": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - }, - "tie_breaker_id": { - "type": "keyword" - }, - "type": { - "type": "keyword" - }, - "updated_by": { - "type": "keyword" - }, - "version": { - "type": "keyword" - } - } - }, - "file": { - "dynamic": "false", - "properties": { - "FileKind": { - "type": "keyword" - }, - "Meta": { - "type": "flattened" - }, - "Status": { - "type": "keyword" - }, - "Updated": { - "type": "date" - }, - "created": { - "type": "date" - }, - "extension": { - "type": "keyword" - }, - "mime_type": { - "type": "keyword" - }, - "name": { - "type": "text" - }, - "size": { - "type": "long" - }, - "user": { - "type": "flattened" - } - } - }, - "file-upload-usage-collection-telemetry": { - "properties": { - "file_upload": { - "properties": { - "index_creation_count": { - "type": "long" - } - } - } - } - }, - "fileShare": { - "dynamic": "false", - "properties": { - "created": { - "type": "date" - }, - "name": { - "type": "keyword" - }, - "token": { - "type": "keyword" - }, - "valid_until": { - "type": "long" - } - } - }, - "fleet-fleet-server-host": { - "properties": { - "host_urls": { - "index": false, - "type": "keyword" - }, - "is_default": { - "type": "boolean" - }, - "is_preconfigured": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "proxy_id": { - "type": "keyword" - } - } - }, - "fleet-preconfiguration-deletion-record": { - "properties": { - "id": { - "type": "keyword" - } - } - }, - "fleet-proxy": { - "properties": { - "certificate": { - "index": false, - "type": "keyword" - }, - "certificate_authorities": { - "index": false, - "type": "keyword" - }, - "certificate_key": { - "index": false, - "type": "keyword" - }, - "is_preconfigured": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "proxy_headers": { - "index": false, - "type": "text" - }, - "url": { - "index": false, - "type": "keyword" - } - } - }, - "graph-workspace": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "legacyIndexPatternRef": { - "index": false, - "type": "text" - }, - "numLinks": { - "type": "integer" - }, - "numVertices": { - "type": "integer" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "wsState": { - "type": "text" - } - } - }, - "guided-onboarding-guide-state": { - "dynamic": "false", - "properties": { - "guideId": { - "type": "keyword" - }, - "isActive": { - "type": "boolean" - } - } - }, - "guided-onboarding-plugin-state": { - "dynamic": "false", - "type": "object" - }, - "index-pattern": { - "dynamic": "false", - "properties": { - "name": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "title": { - "type": "text" - }, - "type": { - "type": "keyword" - } - } - }, - "infrastructure-monitoring-log-view": { - "dynamic": "false", - "properties": { - "name": { - "type": "text" - } - } - }, - "infrastructure-ui-source": { - "dynamic": "false", - "type": "object" - }, - "ingest-agent-policies": { - "properties": { - "data_output_id": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "download_source_id": { - "type": "keyword" - }, - "fleet_server_host_id": { - "type": "keyword" - }, - "inactivity_timeout": { - "type": "integer" - }, - "is_default": { - "type": "boolean" - }, - "is_default_fleet_server": { - "type": "boolean" - }, - "is_managed": { - "type": "boolean" - }, - "is_preconfigured": { - "type": "keyword" - }, - "monitoring_enabled": { - "index": false, - "type": "keyword" - }, - "monitoring_output_id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "namespace": { - "type": "keyword" - }, - "revision": { - "type": "integer" - }, - "schema_version": { - "type": "version" - }, - "status": { - "type": "keyword" - }, - "unenroll_timeout": { - "type": "integer" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "type": "keyword" - } - } - }, - "ingest-download-sources": { - "properties": { - "host": { - "type": "keyword" - }, - "is_default": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "source_id": { - "index": false, - "type": "keyword" - } - } - }, - "ingest-outputs": { - "properties": { - "ca_sha256": { - "index": false, - "type": "keyword" - }, - "ca_trusted_fingerprint": { - "index": false, - "type": "keyword" - }, - "config": { - "type": "flattened" - }, - "config_yaml": { - "type": "text" - }, - "hosts": { - "type": "keyword" - }, - "is_default": { - "type": "boolean" - }, - "is_default_monitoring": { - "type": "boolean" - }, - "is_preconfigured": { - "index": false, - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "output_id": { - "index": false, - "type": "keyword" - }, - "proxy_id": { - "type": "keyword" - }, - "shipper": { - "dynamic": "false", - "type": "object" - }, - "ssl": { - "type": "binary" - }, - "type": { - "type": "keyword" - } - } - }, - "ingest-package-policies": { - "properties": { - "created_at": { - "type": "date" - }, - "created_by": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "elasticsearch": { - "enabled": false, - "properties": { - "privileges": { - "properties": { - "cluster": { - "type": "keyword" - } - } - } - } - }, - "enabled": { - "type": "boolean" - }, - "inputs": { - "enabled": false, - "properties": { - "compiled_input": { - "type": "flattened" - }, - "config": { - "type": "flattened" - }, - "enabled": { - "type": "boolean" - }, - "policy_template": { - "type": "keyword" - }, - "streams": { - "properties": { - "compiled_stream": { - "type": "flattened" - }, - "config": { - "type": "flattened" - }, - "data_stream": { - "properties": { - "dataset": { - "type": "keyword" - }, - "elasticsearch": { - "properties": { - "privileges": { - "type": "flattened" - } - } - }, - "type": { - "type": "keyword" - } - } - }, - "enabled": { - "type": "boolean" - }, - "id": { - "type": "keyword" - }, - "vars": { - "type": "flattened" - } - }, - "type": "nested" - }, - "type": { - "type": "keyword" - }, - "vars": { - "type": "flattened" - } - }, - "type": "nested" - }, - "is_managed": { - "type": "boolean" - }, - "name": { - "type": "keyword" - }, - "namespace": { - "type": "keyword" - }, - "package": { - "properties": { - "name": { - "type": "keyword" - }, - "title": { - "type": "keyword" - }, - "version": { - "type": "keyword" - } - } - }, - "policy_id": { - "type": "keyword" - }, - "revision": { - "type": "integer" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "type": "keyword" - }, - "vars": { - "type": "flattened" - } - } - }, - "ingest_manager_settings": { - "properties": { - "fleet_server_hosts": { - "type": "keyword" - }, - "has_seen_add_data_notice": { - "index": false, - "type": "boolean" - }, - "prerelease_integrations_enabled": { - "type": "boolean" - } - } - }, - "inventory-view": { - "dynamic": "false", - "type": "object" - }, - "kql-telemetry": { - "properties": { - "optInCount": { - "type": "long" - }, - "optOutCount": { - "type": "long" - } - } - }, - "legacy-url-alias": { - "dynamic": "false", - "properties": { - "disabled": { - "type": "boolean" - }, - "resolveCounter": { - "type": "long" - }, - "sourceId": { - "type": "keyword" - }, - "targetId": { - "type": "keyword" - }, - "targetNamespace": { - "type": "keyword" - }, - "targetType": { - "type": "keyword" - } - } - }, - "lens": { - "properties": { - "description": { - "type": "text" - }, - "expression": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "state": { - "type": "flattened" - }, - "title": { - "type": "text" - }, - "visualizationType": { - "type": "keyword" - } - } - }, - "lens-ui-telemetry": { - "properties": { - "count": { - "type": "integer" - }, - "date": { - "type": "date" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - } - }, - "map": { - "properties": { - "bounds": { - "dynamic": "false", - "type": "object" - }, - "description": { - "type": "text" - }, - "layerListJSON": { - "type": "text" - }, - "mapStateJSON": { - "type": "text" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "maps-telemetry": { - "enabled": false, - "type": "object" - }, - "metrics-explorer-view": { - "dynamic": "false", - "type": "object" - }, - "migrationVersion": { - "dynamic": "true", - "properties": { - "canvas-workpad-template": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "config": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "space": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "ml-job": { - "properties": { - "datafeed_id": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "job_id": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "type": { - "type": "keyword" - } - } - }, - "ml-module": { - "dynamic": "false", - "properties": { - "datafeeds": { - "type": "object" - }, - "defaultIndexPattern": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "description": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "id": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "jobs": { - "type": "object" - }, - "logo": { - "type": "object" - }, - "query": { - "type": "object" - }, - "title": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "type": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "ml-trained-model": { - "properties": { - "job": { - "properties": { - "create_time": { - "type": "date" - }, - "job_id": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "model_id": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "monitoring-telemetry": { - "properties": { - "reportedClusterUuids": { - "type": "keyword" - } - } - }, - "namespace": { - "type": "keyword" - }, - "namespaces": { - "type": "keyword" - }, - "originId": { - "type": "keyword" - }, - "osquery-manager-usage-metric": { - "properties": { - "count": { - "type": "long" - }, - "errors": { - "type": "long" - } - } - }, - "osquery-pack": { - "properties": { - "created_at": { - "type": "date" - }, - "created_by": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "enabled": { - "type": "boolean" - }, - "name": { - "type": "text" - }, - "queries": { - "dynamic": "false", - "properties": { - "ecs_mapping": { - "enabled": false, - "type": "object" - }, - "id": { - "type": "keyword" - }, - "interval": { - "type": "text" - }, - "platform": { - "type": "keyword" - }, - "query": { - "type": "text" - }, - "version": { - "type": "keyword" - } - } - }, - "shards": { - "enabled": false, - "type": "object" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "type": "keyword" - }, - "version": { - "type": "long" - } - } - }, - "osquery-pack-asset": { - "dynamic": "false", - "properties": { - "description": { - "type": "text" - }, - "name": { - "type": "text" - }, - "queries": { - "dynamic": "false", - "properties": { - "ecs_mapping": { - "enabled": false, - "type": "object" - }, - "id": { - "type": "keyword" - }, - "interval": { - "type": "text" - }, - "platform": { - "type": "keyword" - }, - "query": { - "type": "text" - }, - "version": { - "type": "keyword" - } - } - }, - "shards": { - "enabled": false, - "type": "object" - }, - "version": { - "type": "long" - } - } - }, - "osquery-saved-query": { - "dynamic": "false", - "properties": { - "created_at": { - "type": "date" - }, - "created_by": { - "type": "text" - }, - "description": { - "type": "text" - }, - "ecs_mapping": { - "enabled": false, - "type": "object" - }, - "id": { - "type": "keyword" - }, - "interval": { - "type": "keyword" - }, - "platform": { - "type": "keyword" - }, - "query": { - "type": "text" - }, - "updated_at": { - "type": "date" - }, - "updated_by": { - "type": "text" - }, - "version": { - "type": "keyword" - } - } - }, - "query": { - "properties": { - "description": { - "type": "text" - }, - "filters": { - "enabled": false, - "type": "object" - }, - "query": { - "properties": { - "language": { - "type": "keyword" - }, - "query": { - "index": false, - "type": "keyword" - } - } - }, - "timefilter": { - "enabled": false, - "type": "object" - }, - "title": { - "type": "text" - } - } - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - }, - "sample-data-telemetry": { - "properties": { - "installCount": { - "type": "long" - }, - "unInstallCount": { - "type": "long" - } - } - }, - "search": { - "properties": { - "breakdownField": { - "type": "text" - }, - "columns": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "description": { - "type": "text" - }, - "grid": { - "enabled": false, - "type": "object" - }, - "hideAggregatedPreview": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "hideChart": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "hits": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "isTextBasedQuery": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "index": false, - "type": "text" - } - } - }, - "refreshInterval": { - "dynamic": "false", - "properties": { - "pause": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "value": { - "doc_values": false, - "index": false, - "type": "integer" - } - } - }, - "rowHeight": { - "type": "text" - }, - "rowsPerPage": { - "doc_values": false, - "index": false, - "type": "integer" - }, - "sort": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "timeRange": { - "dynamic": "false", - "properties": { - "from": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "to": { - "doc_values": false, - "index": false, - "type": "keyword" - } - } - }, - "timeRestore": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "title": { - "type": "text" - }, - "usesAdHocDataView": { - "doc_values": false, - "index": false, - "type": "boolean" - }, - "version": { - "type": "integer" - }, - "viewMode": { - "doc_values": false, - "index": false, - "type": "keyword" - } - } - }, - "search-session": { - "properties": { - "appId": { - "type": "keyword" - }, - "created": { - "type": "date" - }, - "expires": { - "type": "date" - }, - "idMapping": { - "enabled": false, - "type": "object" - }, - "initialState": { - "enabled": false, - "type": "object" - }, - "isCanceled": { - "type": "boolean" - }, - "locatorId": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "realmName": { - "type": "keyword" - }, - "realmType": { - "type": "keyword" - }, - "restoreState": { - "enabled": false, - "type": "object" - }, - "sessionId": { - "type": "keyword" - }, - "username": { - "type": "keyword" - }, - "version": { - "type": "keyword" - } - } - }, - "search-telemetry": { - "dynamic": "false", - "type": "object" - }, - "security-rule": { - "dynamic": "false", - "properties": { - "name": { - "type": "keyword" - }, - "rule_id": { - "type": "keyword" - }, - "version": { - "type": "long" - } - } - }, - "security-solution-signals-migration": { - "properties": { - "created": { - "index": false, - "type": "date" - }, - "createdBy": { - "index": false, - "type": "text" - }, - "destinationIndex": { - "index": false, - "type": "keyword" - }, - "error": { - "index": false, - "type": "text" - }, - "sourceIndex": { - "type": "keyword" - }, - "status": { - "index": false, - "type": "keyword" - }, - "taskId": { - "index": false, - "type": "keyword" - }, - "updated": { - "index": false, - "type": "date" - }, - "updatedBy": { - "index": false, - "type": "text" - }, - "version": { - "type": "long" - } - } - }, - "siem-detection-engine-rule-actions": { - "properties": { - "actions": { - "properties": { - "actionRef": { - "type": "keyword" - }, - "action_type_id": { - "type": "keyword" - }, - "group": { - "type": "keyword" - }, - "id": { - "type": "keyword" - }, - "params": { - "enabled": false, - "type": "object" - } - } - }, - "alertThrottle": { - "type": "keyword" - }, - "ruleAlertId": { - "type": "keyword" - }, - "ruleThrottle": { - "type": "keyword" - } - } - }, - "siem-detection-engine-rule-execution-info": { - "properties": { - "last_execution": { - "properties": { - "date": { - "type": "date" - }, - "message": { - "type": "text" - }, - "metrics": { - "properties": { - "execution_gap_duration_s": { - "type": "long" - }, - "total_enrichment_duration_ms": { - "type": "long" - }, - "total_indexing_duration_ms": { - "type": "long" - }, - "total_search_duration_ms": { - "type": "long" - } - } - }, - "status": { - "ignore_above": 1024, - "type": "keyword" - }, - "status_order": { - "type": "long" - } - } - } - } - }, - "siem-ui-timeline": { - "properties": { - "columns": { - "properties": { - "aggregatable": { - "type": "boolean" - }, - "category": { - "type": "keyword" - }, - "columnHeaderType": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "example": { - "type": "text" - }, - "id": { - "type": "keyword" - }, - "indexes": { - "type": "keyword" - }, - "name": { - "type": "text" - }, - "placeholder": { - "type": "text" - }, - "searchable": { - "type": "boolean" - }, - "type": { - "type": "keyword" - } - } - }, - "created": { - "type": "date" - }, - "createdBy": { - "type": "text" - }, - "dataProviders": { - "properties": { - "and": { - "properties": { - "enabled": { - "type": "boolean" - }, - "excluded": { - "type": "boolean" - }, - "id": { - "type": "keyword" - }, - "kqlQuery": { - "type": "text" - }, - "name": { - "type": "text" - }, - "queryMatch": { - "properties": { - "displayField": { - "type": "text" - }, - "displayValue": { - "type": "text" - }, - "field": { - "type": "text" - }, - "operator": { - "type": "text" - }, - "value": { - "type": "text" - } - } - }, - "type": { - "type": "text" - } - } - }, - "enabled": { - "type": "boolean" - }, - "excluded": { - "type": "boolean" - }, - "id": { - "type": "keyword" - }, - "kqlQuery": { - "type": "text" - }, - "name": { - "type": "text" - }, - "queryMatch": { - "properties": { - "displayField": { - "type": "text" - }, - "displayValue": { - "type": "text" - }, - "field": { - "type": "text" - }, - "operator": { - "type": "text" - }, - "value": { - "type": "text" - } - } - }, - "type": { - "type": "text" - } - } - }, - "dateRange": { - "properties": { - "end": { - "type": "date" - }, - "start": { - "type": "date" - } - } - }, - "description": { - "type": "text" - }, - "eqlOptions": { - "properties": { - "eventCategoryField": { - "type": "text" - }, - "query": { - "type": "text" - }, - "size": { - "type": "text" - }, - "tiebreakerField": { - "type": "text" - }, - "timestampField": { - "type": "text" - } - } - }, - "eventType": { - "type": "keyword" - }, - "excludedRowRendererIds": { - "type": "text" - }, - "favorite": { - "properties": { - "favoriteDate": { - "type": "date" - }, - "fullName": { - "type": "text" - }, - "keySearch": { - "type": "text" - }, - "userName": { - "type": "text" - } - } - }, - "filters": { - "properties": { - "exists": { - "type": "text" - }, - "match_all": { - "type": "text" - }, - "meta": { - "properties": { - "alias": { - "type": "text" - }, - "controlledBy": { - "type": "text" - }, - "disabled": { - "type": "boolean" - }, - "field": { - "type": "text" - }, - "formattedValue": { - "type": "text" - }, - "index": { - "type": "keyword" - }, - "key": { - "type": "keyword" - }, - "negate": { - "type": "boolean" - }, - "params": { - "type": "text" - }, - "type": { - "type": "keyword" - }, - "value": { - "type": "text" - } - } - }, - "missing": { - "type": "text" - }, - "query": { - "type": "text" - }, - "range": { - "type": "text" - }, - "script": { - "type": "text" - } - } - }, - "indexNames": { - "type": "text" - }, - "kqlMode": { - "type": "keyword" - }, - "kqlQuery": { - "properties": { - "filterQuery": { - "properties": { - "kuery": { - "properties": { - "expression": { - "type": "text" - }, - "kind": { - "type": "keyword" - } - } - }, - "serializedQuery": { - "type": "text" - } - } - } - } - }, - "sort": { - "dynamic": "false", - "properties": { - "columnId": { - "type": "keyword" - }, - "columnType": { - "type": "keyword" - }, - "sortDirection": { - "type": "keyword" - } - } - }, - "status": { - "type": "keyword" - }, - "templateTimelineId": { - "type": "text" - }, - "templateTimelineVersion": { - "type": "integer" - }, - "timelineType": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "updated": { - "type": "date" - }, - "updatedBy": { - "type": "text" - } - } - }, - "siem-ui-timeline-note": { - "properties": { - "created": { - "type": "date" - }, - "createdBy": { - "type": "text" - }, - "eventId": { - "type": "keyword" - }, - "note": { - "type": "text" - }, - "updated": { - "type": "date" - }, - "updatedBy": { - "type": "text" - } - } - }, - "siem-ui-timeline-pinned-event": { - "properties": { - "created": { - "type": "date" - }, - "createdBy": { - "type": "text" - }, - "eventId": { - "type": "keyword" - }, - "updated": { - "type": "date" - }, - "updatedBy": { - "type": "text" - } - } - }, - "space": { - "properties": { - "_reserved": { - "type": "boolean" - }, - "color": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "disabledFeatures": { - "type": "keyword" - }, - "imageUrl": { - "index": false, - "type": "text" - }, - "initials": { - "type": "keyword" - }, - "name": { - "fields": { - "keyword": { - "ignore_above": 2048, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "spaces-usage-stats": { - "dynamic": "false", - "type": "object" - }, - "synthetics-monitor": { - "dynamic": "false", - "properties": { - "custom_heartbeat_id": { - "type": "keyword" - }, - "enabled": { - "type": "boolean" - }, - "hash": { - "type": "keyword" - }, - "hosts": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "id": { - "type": "keyword" - }, - "journey_id": { - "type": "keyword" - }, - "locations": { - "properties": { - "id": { - "fields": { - "text": { - "type": "text" - } - }, - "ignore_above": 256, - "type": "keyword" - }, - "label": { - "type": "text" - } - } - }, - "name": { - "fields": { - "keyword": { - "ignore_above": 256, - "normalizer": "lowercase", - "type": "keyword" - } - }, - "type": "text" - }, - "origin": { - "type": "keyword" - }, - "project_id": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - }, - "schedule": { - "properties": { - "number": { - "type": "integer" - } - } - }, - "tags": { - "fields": { - "text": { - "type": "text" - } - }, - "type": "keyword" - }, - "type": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "urls": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "synthetics-param": { - "dynamic": "false", - "type": "object" - }, - "synthetics-privates-locations": { - "dynamic": "false", - "type": "object" - }, - "tag": { - "properties": { - "color": { - "type": "text" - }, - "description": { - "type": "text" - }, - "name": { - "type": "text" - } - } - }, - "telemetry": { - "properties": { - "allowChangingOptInStatus": { - "type": "boolean" - }, - "enabled": { - "type": "boolean" - }, - "lastReported": { - "type": "date" - }, - "lastVersionChecked": { - "type": "keyword" - }, - "reportFailureCount": { - "type": "integer" - }, - "reportFailureVersion": { - "type": "keyword" - }, - "sendUsageFrom": { - "type": "keyword" - }, - "userHasSeenNotice": { - "type": "boolean" - } - } - }, - "test-actions-export-hidden": { - "properties": { - "enabled": { - "type": "boolean" - }, - "title": { - "type": "text" - } - } - }, - "test-deprecations-plugin": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-export-add": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-export-add-dep": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-export-invalid-transform": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-export-transform": { - "properties": { - "enabled": { - "type": "boolean" - }, - "title": { - "type": "text" - } - } - }, - "test-export-transform-error": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-hidden-from-http-apis-importable-exportable": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-hidden-importable-exportable": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-hidden-non-importable-exportable": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-is-exportable": { - "properties": { - "enabled": { - "type": "boolean" - }, - "title": { - "type": "text" - } - } - }, - "test-not-hidden-from-http-apis-importable-exportable": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test-not-visible-in-management": { - "properties": { - "enabled": { - "type": "boolean" - }, - "title": { - "type": "text" - } - } - }, - "test-visible-in-management": { - "properties": { - "enabled": { - "type": "boolean" - }, - "title": { - "type": "text" - } - } - }, - "test-with-display-name": { - "properties": { - "enabled": { - "type": "boolean" - }, - "title": { - "type": "text" - } - } - }, - "test_import_warning_1": { - "properties": { - "title": { - "type": "text" - } - } - }, - "test_import_warning_2": { - "properties": { - "title": { - "type": "text" - } - } - }, - "type": { - "type": "keyword" - }, - "ui-metric": { - "properties": { - "count": { - "type": "integer" - } - } - }, - "updated_at": { - "type": "date" - }, - "upgrade-assistant-ml-upgrade-operation": { - "properties": { - "jobId": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "nodeId": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "snapshotId": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "status": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "upgrade-assistant-reindex-operation": { - "properties": { - "errorMessage": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "indexName": { - "type": "keyword" - }, - "lastCompletedStep": { - "type": "long" - }, - "locked": { - "type": "date" - }, - "newIndexName": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "reindexOptions": { - "properties": { - "openAndClose": { - "type": "boolean" - }, - "queueSettings": { - "properties": { - "queuedAt": { - "type": "long" - }, - "startedAt": { - "type": "long" - } - } - } - } - }, - "reindexTaskId": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - }, - "reindexTaskPercComplete": { - "type": "float" - }, - "runningReindexCount": { - "type": "integer" - }, - "status": { - "type": "integer" - } - } - }, - "upgrade-assistant-telemetry": { - "properties": { - "features": { - "properties": { - "deprecation_logging": { - "properties": { - "enabled": { - "null_value": true, - "type": "boolean" - } - } - } - } - } - } - }, - "uptime-dynamic-settings": { - "dynamic": "false", - "type": "object" - }, - "uptime-synthetics-api-key": { - "dynamic": "false", - "properties": { - "apiKey": { - "type": "binary" - } - } - }, - "url": { - "properties": { - "accessCount": { - "type": "long" - }, - "accessDate": { - "type": "date" - }, - "createDate": { - "type": "date" - }, - "locatorJSON": { - "index": false, - "type": "text" - }, - "slug": { - "fields": { - "keyword": { - "type": "keyword" - } - }, - "type": "text" - }, - "url": { - "fields": { - "keyword": { - "ignore_above": 2048, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "usage-counters": { - "dynamic": "false", - "properties": { - "domainId": { - "type": "keyword" - } - } - }, - "visualization": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "index": false, - "type": "text" - } - } - }, - "savedSearchRefName": { - "doc_values": false, - "index": false, - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "index": false, - "type": "text" - }, - "version": { - "type": "integer" - }, - "visState": { - "index": false, - "type": "text" - } - } - }, - "workplace_search_telemetry": { - "dynamic": "false", - "type": "object" - } - } - }, - "settings": { - "index": { - "auto_expand_replicas": "0-1", - "hidden": "true", - "mapping": { - "total_fields": { - "limit": "1500" - } - }, - "number_of_replicas": "0", - "number_of_shards": "1", - "priority": "10", - "refresh_interval": "1s" - } - } - } -} diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_saved_objects/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_saved_objects/data.json index cc38a9affdda5..065db0830fb3c 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_saved_objects/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_saved_objects/data.json @@ -5,8 +5,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-hidden-non-importable-exportable": { "title": "Hidden Saved object type that is not importable/exportable." }, @@ -16,3 +15,4 @@ "type": "_doc" } } + diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/data.json index 057373579c100..3dfde2c248862 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/data.json @@ -35,8 +35,7 @@ { "type": "doc", "value": { - "index": ".kibana", - "type": "doc", + "index": ".kibana_analytics", "id": "visualization:75c3e060-1e7c-11e9-8488-65449e65d0ed", "source": { "visualization": { @@ -50,13 +49,18 @@ } }, "type": "visualization", - "updated_at": "2019-01-22T19:32:31.206Z" + "updated_at": "2019-01-22T19:32:31.206Z", + "namespaces": [ + "default" + ], + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "8.0.0" }, - "references" : [ + "references": [ { - "name" : "kibanaSavedObjectMeta.searchSourceJSON.index", - "type" : "index-pattern", - "id" : "logstash-*" + "name": "kibanaSavedObjectMeta.searchSourceJSON.index", + "type": "index-pattern", + "id": "logstash-*" } ] } @@ -65,8 +69,7 @@ { "type": "doc", "value": { - "index": ".kibana", - "type": "doc", + "index": ".kibana_analytics", "id": "dashboard:i-exist", "source": { "dashboard": { @@ -82,7 +85,13 @@ } }, "type": "dashboard", - "updated_at": "2019-01-22T19:32:47.232Z" + "updated_at": "2019-01-22T19:32:47.232Z", + "namespaces": [ + "default" + ], + "coreMigrationVersion": "8.8.0", + "typeMigrationVersion": "8.0.0" } } } + diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/mappings.json b/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/mappings.json deleted file mode 100644 index adcf4164668d6..0000000000000 --- a/test/functional/fixtures/es_archiver/saved_objects_management/hidden_types/mappings.json +++ /dev/null @@ -1,466 +0,0 @@ -{ - "type": "index", - "value": { - "aliases": { - ".kibana": {} - }, - "index": ".kibana_1", - "settings": { - "index": { - "number_of_shards": "1", - "auto_expand_replicas": "0-1", - "number_of_replicas": "0" - } - }, - "mappings": { - "dynamic": true, - "properties": { - "test-actions-export-hidden": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-transform": { - "properties": { - "title": { "type": "text" }, - "enabled": { "type": "boolean" } - } - }, - "test-export-add": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-add-dep": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-transform-error": { - "properties": { - "title": { "type": "text" } - } - }, - "test-export-invalid-transform": { - "properties": { - "title": { "type": "text" } - } - }, - "apm-telemetry": { - "properties": { - "has_any_services": { - "type": "boolean" - }, - "services_per_agent": { - "properties": { - "go": { - "type": "long", - "null_value": 0 - }, - "java": { - "type": "long", - "null_value": 0 - }, - "js-base": { - "type": "long", - "null_value": 0 - }, - "nodejs": { - "type": "long", - "null_value": 0 - }, - "python": { - "type": "long", - "null_value": 0 - }, - "ruby": { - "type": "long", - "null_value": 0 - } - } - } - } - }, - "canvas-workpad": { - "dynamic": "false", - "properties": { - "@created": { - "type": "date" - }, - "@timestamp": { - "type": "date" - }, - "id": { - "type": "text", - "index": false - }, - "name": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword" - } - } - } - } - }, - "config": { - "dynamic": "true", - "properties": { - "accessibility:disableAnimations": { - "type": "boolean" - }, - "buildNum": { - "type": "keyword" - }, - "dateFormat:tz": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - }, - "defaultIndex": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - }, - "telemetry:optIn": { - "type": "boolean" - } - } - }, - "dashboard": { - "properties": { - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "optionsJSON": { - "type": "text" - }, - "panelsJSON": { - "type": "text" - }, - "refreshInterval": { - "properties": { - "display": { - "type": "keyword" - }, - "pause": { - "type": "boolean" - }, - "section": { - "type": "integer" - }, - "value": { - "type": "integer" - } - } - }, - "timeFrom": { - "type": "keyword" - }, - "timeRestore": { - "type": "boolean" - }, - "timeTo": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "map": { - "properties": { - "bounds": { - "dynamic": false, - "properties": {} - }, - "description": { - "type": "text" - }, - "layerListJSON": { - "type": "text" - }, - "mapStateJSON": { - "type": "text" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "graph-workspace": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "numLinks": { - "type": "integer" - }, - "numVertices": { - "type": "integer" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "wsState": { - "type": "text" - } - } - }, - "index-pattern": { - "properties": { - "fieldFormatMap": { - "type": "text" - }, - "fields": { - "type": "text" - }, - "intervalName": { - "type": "keyword" - }, - "notExpandable": { - "type": "boolean" - }, - "sourceFilters": { - "type": "text" - }, - "timeFieldName": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "type": { - "type": "keyword" - }, - "typeMeta": { - "type": "keyword" - } - } - }, - "kql-telemetry": { - "properties": { - "optInCount": { - "type": "long" - }, - "optOutCount": { - "type": "long" - } - } - }, - "migrationVersion": { - "dynamic": "true", - "properties": { - "index-pattern": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - }, - "space": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 256 - } - } - } - } - }, - "namespace": { - "type": "keyword" - }, - "search": { - "properties": { - "columns": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "hits": { - "type": "integer" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "sort": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "version": { - "type": "integer" - } - } - }, - "server": { - "properties": { - "uuid": { - "type": "keyword" - } - } - }, - "space": { - "properties": { - "_reserved": { - "type": "boolean" - }, - "color": { - "type": "keyword" - }, - "description": { - "type": "text" - }, - "disabledFeatures": { - "type": "keyword" - }, - "initials": { - "type": "keyword" - }, - "name": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 2048 - } - } - } - } - }, - "spaceId": { - "type": "keyword" - }, - "telemetry": { - "properties": { - "enabled": { - "type": "boolean" - } - } - }, - "type": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - }, - "url": { - "properties": { - "accessCount": { - "type": "long" - }, - "accessDate": { - "type": "date" - }, - "createDate": { - "type": "date" - }, - "url": { - "type": "text", - "fields": { - "keyword": { - "type": "keyword", - "ignore_above": 2048 - } - } - } - } - }, - "visualization": { - "properties": { - "description": { - "type": "text" - }, - "kibanaSavedObjectMeta": { - "properties": { - "searchSourceJSON": { - "type": "text" - } - } - }, - "savedSearchId": { - "type": "keyword" - }, - "title": { - "type": "text" - }, - "uiStateJSON": { - "type": "text" - }, - "version": { - "type": "integer" - }, - "visState": { - "type": "text" - } - } - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - } - } - } - } -} diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/nested_export_transform/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/nested_export_transform/data.json index 3c311b0465193..88de6cf244be4 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/nested_export_transform/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/nested_export_transform/data.json @@ -35,8 +35,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-transform": { "enabled": true, "title": "test_1-obj_2" @@ -55,8 +54,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-export-add": { "title": "test_2-obj_1" }, @@ -88,4 +86,5 @@ }, "type": "_doc" } -} \ No newline at end of file +} + diff --git a/test/functional/fixtures/es_archiver/saved_objects_management/visible_in_management/data.json b/test/functional/fixtures/es_archiver/saved_objects_management/visible_in_management/data.json index e277faf827925..f6099f319d3fe 100644 --- a/test/functional/fixtures/es_archiver/saved_objects_management/visible_in_management/data.json +++ b/test/functional/fixtures/es_archiver/saved_objects_management/visible_in_management/data.json @@ -5,8 +5,7 @@ "index": ".kibana", "source": { "coreMigrationVersion": "7.14.0", - "references": [ - ], + "references": [], "test-not-visible-in-management": { "enabled": true, "title": "vim-1" @@ -17,3 +16,4 @@ "type": "_doc" } } + diff --git a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap index 55bbf9d8b5fc1..3c1f38e8a7a19 100644 --- a/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap +++ b/x-pack/plugins/apm/common/__snapshots__/apm_telemetry.test.ts.snap @@ -937,6 +937,16 @@ exports[`APM telemetry helpers getApmTelemetry generates a JSON object with the "type": "long" } } + }, + "environments": { + "properties": { + "1d": { + "type": "long", + "_meta": { + "description": "Total number of unique environments within the last day" + } + } + } } } }, diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts index 0c4f7b46e8454..ce9133ebd8ff7 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/collect_data_telemetry/tasks.ts @@ -776,28 +776,31 @@ export const tasks: TelemetryTask[] = [ }) ).hits.total.value; - const servicesCount = ( - await telemetryClient.search({ - index: [indices.transaction, indices.error, indices.metric], - body: { - track_total_hits: false, - size: 0, - timeout, - query: { - bool: { - filter: [range1d], + const servicesAndEnvironmentsCount = await telemetryClient.search({ + index: [indices.transaction, indices.error, indices.metric], + body: { + track_total_hits: false, + size: 0, + timeout, + query: { + bool: { + filter: [range1d], + }, + }, + aggs: { + service_name: { + cardinality: { + field: SERVICE_NAME, }, }, - aggs: { - service_name: { - cardinality: { - field: SERVICE_NAME, - }, + service_environments: { + cardinality: { + field: SERVICE_ENVIRONMENT, }, }, }, - }) - ).aggregations?.service_name.value; + }, + }); return { counts: { @@ -811,7 +814,14 @@ export const tasks: TelemetryTask[] = [ '1d': tracesPerDayCount || 0, }, services: { - '1d': servicesCount || 0, + '1d': + servicesAndEnvironmentsCount.aggregations?.service_name.value || + 0, + }, + environments: { + '1d': + servicesAndEnvironmentsCount.aggregations?.service_environments + .value || 0, }, }, }; diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts index 3dacba9c68a07..4b6e00c3a18ab 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/schema.ts @@ -202,6 +202,15 @@ export const apmSchema: MakeSchemaFrom = { max_error_groups_per_service: timeframeMapSchema, traces: timeframeMapSchema, services: timeframeMapSchema, + environments: { + '1d': { + ...long, + _meta: { + description: + 'Total number of unique environments within the last day', + }, + }, + }, }, cardinality: { client: { geo: { country_iso_code: { rum: timeframeMap1dSchema } } }, diff --git a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts index f7f3f07fca457..ae4906feb7c7c 100644 --- a/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts +++ b/x-pack/plugins/apm/server/lib/apm_telemetry/types.ts @@ -108,6 +108,7 @@ export interface APMUsage { max_error_groups_per_service: TimeframeMap; traces: TimeframeMap; services: TimeframeMap; + environments: TimeframeMap1d; }; cardinality: { client: { geo: { country_iso_code: { rum: TimeframeMap1d } } }; diff --git a/x-pack/plugins/cases/common/api/cases/case.test.ts b/x-pack/plugins/cases/common/api/cases/case.test.ts index 0506b56d22dfb..893ee107087f8 100644 --- a/x-pack/plugins/cases/common/api/cases/case.test.ts +++ b/x-pack/plugins/cases/common/api/cases/case.test.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { PathReporter } from 'io-ts/lib/PathReporter'; import { ConnectorTypes } from '../../types/domain/connector/v1'; import { RelatedCaseInfoRt, @@ -25,6 +26,8 @@ import { CasesRt, CasesFindResponseRt, CaseResolveResponseRt, + CasesFindRequestSearchFieldsRt, + CasesFindRequestSortFieldsRt, } from './case'; import { CommentType } from './comment'; import { CaseStatuses } from './status'; @@ -336,11 +339,10 @@ describe('Case', () => { page: '1', perPage: '10', search: 'search text', - searchFields: 'closed_by.username', - rootSearchFields: ['_id'], + searchFields: ['title', 'description'], to: '1w', sortOrder: 'desc', - sortField: 'created_at', + sortField: 'createdAt', owner: 'cases', }; @@ -361,6 +363,58 @@ describe('Case', () => { right: { ...defaultRequest, page: 1, perPage: 10 }, }); }); + + const searchFields = Object.keys(CasesFindRequestSearchFieldsRt.keys); + + it.each(searchFields)('succeeds with %s as searchFields', (field) => { + const query = CasesFindRequestRt.decode({ ...defaultRequest, searchFields: field }); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: { ...defaultRequest, searchFields: field, page: 1, perPage: 10 }, + }); + }); + + const sortFields = Object.keys(CasesFindRequestSortFieldsRt.keys); + + it.each(sortFields)('succeeds with %s as sortField', (sortField) => { + const query = CasesFindRequestRt.decode({ ...defaultRequest, sortField }); + + expect(query).toStrictEqual({ + _tag: 'Right', + right: { ...defaultRequest, sortField, page: 1, perPage: 10 }, + }); + }); + + it('removes rootSearchField when passed', () => { + expect( + PathReporter.report( + CasesFindRequestRt.decode({ ...defaultRequest, rootSearchField: ['foobar'] }) + ) + ).toContain('No errors!'); + }); + + describe('errors', () => { + it('throws error when invalid searchField passed', () => { + expect( + PathReporter.report( + CasesFindRequestRt.decode({ ...defaultRequest, searchFields: 'foobar' }) + ) + ).not.toContain('No errors!'); + }); + + it('throws error when invalid sortField passed', () => { + expect( + PathReporter.report(CasesFindRequestRt.decode({ ...defaultRequest, sortField: 'foobar' })) + ).not.toContain('No errors!'); + }); + + it('succeeds when valid parameters passed', () => { + expect(PathReporter.report(CasesFindRequestRt.decode(defaultRequest))).toContain( + 'No errors!' + ); + }); + }); }); describe('CasesByAlertIDRequestRt', () => { diff --git a/x-pack/plugins/cases/common/api/cases/case.ts b/x-pack/plugins/cases/common/api/cases/case.ts index 07f36ff1132b7..3604d3b43fb81 100644 --- a/x-pack/plugins/cases/common/api/cases/case.ts +++ b/x-pack/plugins/cases/common/api/cases/case.ts @@ -205,32 +205,19 @@ export const CasePostRequestRt = rt.intersection([ ), ]); -const CasesFindRequestSearchFieldsRt = rt.keyof({ - 'closed_by.username': null, - 'closed_by.full_name': null, - 'closed_by.email': null, - 'closed_by.profile_uid': null, - 'created_by.username': null, - 'created_by.full_name': null, - 'created_by.email': null, - 'created_by.profile_uid': null, +export const CasesFindRequestSearchFieldsRt = rt.keyof({ description: null, - 'connector.name': null, - 'connector.type': null, - 'external_service.pushed_by.username': null, - 'external_service.pushed_by.full_name': null, - 'external_service.pushed_by.email': null, - 'external_service.pushed_by.profile_uid': null, - 'external_service.connector_name': null, - 'external_service.external_id': null, - 'external_service.external_title': null, - 'external_service.external_url': null, title: null, - 'title.keyword': null, - 'updated_by.username': null, - 'updated_by.full_name': null, - 'updated_by.email': null, - 'updated_by.profile_uid': null, +}); + +export const CasesFindRequestSortFieldsRt = rt.keyof({ + title: null, + category: null, + createdAt: null, + updatedAt: null, + closedAt: null, + status: null, + severity: null, }); export const CasesFindRequestRt = rt.intersection([ @@ -307,15 +294,11 @@ export const CasesFindRequestRt = rt.intersection([ rt.array(CasesFindRequestSearchFieldsRt), CasesFindRequestSearchFieldsRt, ]), - /** - * The root fields to perform the simple_query_string parsed query against - */ - rootSearchFields: rt.array(rt.string), /** * The field to use for sorting the found objects. * */ - sortField: rt.string, + sortField: CasesFindRequestSortFieldsRt, /** * The order to sort by */ @@ -551,6 +534,7 @@ export type Cases = rt.TypeOf; export type CasesDeleteRequest = rt.TypeOf; export type CasesByAlertIDRequest = rt.TypeOf; export type CasesFindRequest = rt.TypeOf; +export type CasesFindRequestSortFields = rt.TypeOf; export type CasesFindResponse = rt.TypeOf; export type CasePatchRequest = rt.TypeOf; export type CasesPatchRequest = rt.TypeOf; diff --git a/x-pack/plugins/cases/docs/openapi/bundled.json b/x-pack/plugins/cases/docs/openapi/bundled.json index 311efaba73d2f..3ff6564699cf6 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.json +++ b/x-pack/plugins/cases/docs/openapi/bundled.json @@ -12,18 +12,26 @@ "url": "https://www.elastic.co/licensing/elastic-license" } }, - "tags": [ - { - "name": "cases", - "description": "Case APIs enable you to open and track issues." - } - ], "servers": [ { "url": "http://localhost:5601", "description": "local" } ], + "security": [ + { + "basicAuth": [] + }, + { + "apiKeyAuth": [] + } + ], + "tags": [ + { + "name": "cases", + "description": "Case APIs enable you to open and track issues." + } + ], "paths": { "/api/cases": { "post": { @@ -3977,7 +3985,12 @@ "type": "string", "enum": [ "createdAt", - "updatedAt" + "updatedAt", + "closedAt", + "title", + "category", + "status", + "severity" ], "default": "createdAt" }, @@ -5286,31 +5299,8 @@ "type": "string", "description": "The fields to perform the `simple_query_string` parsed query against.", "enum": [ - "closed_by.username", - "closed_by.full_name", - "closed_by.email", - "closed_by.profile_uid", - "created_by.username", - "created_by.full_name", - "created_by.email", - "created_by.profile_uid", "description", - "connector.name", - "connector.type", - "external_service.pushed_by.username", - "external_service.pushed_by.full_name", - "external_service.pushed_by.email", - "external_service.pushed_by.profile_uid", - "external_service.connector_name", - "external_service.external_id", - "external_service.external_title", - "external_service.external_url", - "title", - "title.keyword", - "updated_by.username", - "updated_by.full_name", - "updated_by.email", - "updated_by.profile_uid" + "title" ] }, "closure_types": { @@ -7151,13 +7141,5 @@ ] } } - }, - "security": [ - { - "basicAuth": [] - }, - { - "apiKeyAuth": [] - } - ] + } } \ No newline at end of file diff --git a/x-pack/plugins/cases/docs/openapi/bundled.yaml b/x-pack/plugins/cases/docs/openapi/bundled.yaml index 3ad9350ec6846..be8e2da0462e8 100644 --- a/x-pack/plugins/cases/docs/openapi/bundled.yaml +++ b/x-pack/plugins/cases/docs/openapi/bundled.yaml @@ -8,12 +8,15 @@ info: license: name: Elastic License 2.0 url: https://www.elastic.co/licensing/elastic-license -tags: - - name: cases - description: Case APIs enable you to open and track issues. servers: - url: http://localhost:5601 description: local +security: + - basicAuth: [] + - apiKeyAuth: [] +tags: + - name: cases + description: Case APIs enable you to open and track issues. paths: /api/cases: post: @@ -2427,6 +2430,11 @@ components: enum: - createdAt - updatedAt + - closedAt + - title + - category + - status + - severity default: createdAt example: updatedAt sort_order: @@ -3392,31 +3400,8 @@ components: type: string description: The fields to perform the `simple_query_string` parsed query against. enum: - - closed_by.username - - closed_by.full_name - - closed_by.email - - closed_by.profile_uid - - created_by.username - - created_by.full_name - - created_by.email - - created_by.profile_uid - description - - connector.name - - connector.type - - external_service.pushed_by.username - - external_service.pushed_by.full_name - - external_service.pushed_by.email - - external_service.pushed_by.profile_uid - - external_service.connector_name - - external_service.external_id - - external_service.external_title - - external_service.external_url - title - - title.keyword - - updated_by.username - - updated_by.full_name - - updated_by.email - - updated_by.profile_uid closure_types: type: string description: Indicates whether a case is automatically closed when it is pushed to external systems (`close-by-pushing`) or not automatically closed (`close-by-user`). @@ -4768,6 +4753,3 @@ components: isPreconfigured: false isDeprecated: false referencedByCount: 0 -security: - - basicAuth: [] - - apiKeyAuth: [] diff --git a/x-pack/plugins/cases/docs/openapi/components/parameters/searchFieldsType.yaml b/x-pack/plugins/cases/docs/openapi/components/parameters/searchFieldsType.yaml index ee4926c6c8205..6c0db808085c0 100644 --- a/x-pack/plugins/cases/docs/openapi/components/parameters/searchFieldsType.yaml +++ b/x-pack/plugins/cases/docs/openapi/components/parameters/searchFieldsType.yaml @@ -1,28 +1,5 @@ type: string description: The fields to perform the `simple_query_string` parsed query against. enum: - - closed_by.username - - closed_by.full_name - - closed_by.email - - closed_by.profile_uid - - created_by.username - - created_by.full_name - - created_by.email - - created_by.profile_uid - description - - connector.name - - connector.type - - external_service.pushed_by.username - - external_service.pushed_by.full_name - - external_service.pushed_by.email - - external_service.pushed_by.profile_uid - - external_service.connector_name - - external_service.external_id - - external_service.external_title - - external_service.external_url - title - - title.keyword - - updated_by.username - - updated_by.full_name - - updated_by.email - - updated_by.profile_uid diff --git a/x-pack/plugins/cases/docs/openapi/components/parameters/sortField.yaml b/x-pack/plugins/cases/docs/openapi/components/parameters/sortField.yaml index c0b732f905c56..9df834cf9f5ac 100644 --- a/x-pack/plugins/cases/docs/openapi/components/parameters/sortField.yaml +++ b/x-pack/plugins/cases/docs/openapi/components/parameters/sortField.yaml @@ -6,5 +6,10 @@ schema: enum: - createdAt - updatedAt + - closedAt + - title + - category + - status + - severity default: createdAt example: updatedAt \ No newline at end of file diff --git a/x-pack/plugins/cases/server/client/cases/find.test.ts b/x-pack/plugins/cases/server/client/cases/find.test.ts index 988aebd33e2af..fc1bd1ef3d2a7 100644 --- a/x-pack/plugins/cases/server/client/cases/find.test.ts +++ b/x-pack/plugins/cases/server/client/cases/find.test.ts @@ -55,8 +55,7 @@ describe('find', () => { const call = clientArgs.services.caseService.findCasesGroupedByID.mock.calls[0][0]; expect(call.caseOptions.search).toBe(`"${search}" "cases:${search}"`); - expect(call.caseOptions).toHaveProperty('rootSearchFields'); - expect(call.caseOptions.rootSearchFields).toStrictEqual(['_id']); + expect(call.caseOptions).toHaveProperty('rootSearchFields', ['_id']); }); it('regular search term does not cause rootSearchFields to be appended', async () => { @@ -70,8 +69,16 @@ describe('find', () => { expect(call.caseOptions.search).toBe(search); expect(call.caseOptions).not.toHaveProperty('rootSearchFields'); }); + }); + + describe('errors', () => { + const clientArgs = createCasesClientMockArgs(); + + beforeEach(() => { + jest.clearAllMocks(); + }); - it('should not have foo:bar attribute in request payload', async () => { + it('when foo:bar attribute in request payload', async () => { const search = 'sample_text'; const findRequest = createCasesClientMockFindRequest({ search }); await expect( @@ -81,14 +88,6 @@ describe('find', () => { `"Failed to find cases: {\\"search\\":\\"sample_text\\",\\"searchFields\\":[\\"title\\",\\"description\\"],\\"severity\\":\\"low\\",\\"assignees\\":[],\\"reporters\\":[],\\"status\\":\\"open\\",\\"tags\\":[],\\"owner\\":[],\\"sortField\\":\\"createdAt\\",\\"sortOrder\\":\\"desc\\",\\"foo\\":\\"bar\\"}: Error: invalid keys \\"foo\\""` ); }); - }); - - describe('errors', () => { - const clientArgs = createCasesClientMockArgs(); - - beforeEach(() => { - jest.clearAllMocks(); - }); it('invalid searchFields with array', async () => { const searchFields = ['foobar']; @@ -112,6 +111,17 @@ describe('find', () => { ); }); + it('invalid sortField', async () => { + const sortField = 'foobar'; + + // @ts-expect-error + const findRequest = createCasesClientMockFindRequest({ sortField }); + + await expect(find(findRequest, clientArgs)).rejects.toThrow( + 'Error: Invalid value "foobar" supplied to "sortField"' + ); + }); + it(`throws an error when the category array has ${MAX_CATEGORY_FILTER_LENGTH} items`, async () => { const category = Array(MAX_CATEGORY_FILTER_LENGTH + 1).fill('foobar'); diff --git a/x-pack/plugins/cases/server/client/cases/find.ts b/x-pack/plugins/cases/server/client/cases/find.ts index aa2bb36768207..49ae281a403a6 100644 --- a/x-pack/plugins/cases/server/client/cases/find.ts +++ b/x-pack/plugins/cases/server/client/cases/find.ts @@ -79,7 +79,7 @@ export const find = async ( const queryArgs: CasesFindQueryParams = { tags: queryParams.tags, reporters: queryParams.reporters, - sortByField: queryParams.sortField, + sortField: queryParams.sortField, status: queryParams.status, severity: queryParams.severity, owner: queryParams.owner, diff --git a/x-pack/plugins/cases/server/client/types.ts b/x-pack/plugins/cases/server/client/types.ts index d634d0ea3f045..82439d4d5b70d 100644 --- a/x-pack/plugins/cases/server/client/types.ts +++ b/x-pack/plugins/cases/server/client/types.ts @@ -72,5 +72,6 @@ export type CasesFindQueryParams = Partial< | 'to' | 'assignees' | 'category' - > & { sortByField?: string; authorizationFilter?: KueryNode } + | 'sortField' + > & { authorizationFilter?: KueryNode } >; diff --git a/x-pack/plugins/cases/server/client/utils.test.ts b/x-pack/plugins/cases/server/client/utils.test.ts index 50dbdb8981c9f..8017d5cfa1866 100644 --- a/x-pack/plugins/cases/server/client/utils.test.ts +++ b/x-pack/plugins/cases/server/client/utils.test.ts @@ -133,14 +133,6 @@ describe('utils', () => { expect(convertSortField('createdAt')).toBe('created_at'); }); - it('transforms created_at correctly', () => { - expect(convertSortField('created_at')).toBe('created_at'); - }); - - it('transforms updated_at correctly', () => { - expect(convertSortField('updated_at')).toBe('updated_at'); - }); - it('transforms updatedAt correctly', () => { expect(convertSortField('updatedAt')).toBe('updated_at'); }); @@ -149,16 +141,12 @@ describe('utils', () => { expect(convertSortField('closedAt')).toBe('closed_at'); }); - it('transforms closed_at correctly', () => { - expect(convertSortField('closed_at')).toBe('closed_at'); - }); - it('transforms title correctly', () => { expect(convertSortField('title')).toBe('title.keyword'); }); it('transforms default correctly', () => { - expect(convertSortField('not-exist')).toBe('created_at'); + expect(convertSortField(undefined)).toBe('created_at'); }); }); diff --git a/x-pack/plugins/cases/server/client/utils.ts b/x-pack/plugins/cases/server/client/utils.ts index 749d961766289..884917a05f431 100644 --- a/x-pack/plugins/cases/server/client/utils.ts +++ b/x-pack/plugins/cases/server/client/utils.ts @@ -21,7 +21,7 @@ import type { CommentRequest, CaseSeverity, CommentRequestExternalReferenceType, - CasesFindRequest, + CasesFindRequestSortFields, } from '../../common/api'; import type { SavedObjectFindOptionsKueryNode } from '../common/types'; import type { CasesFindQueryParams } from './types'; @@ -339,7 +339,7 @@ export const constructQueryOptions = ({ reporters, status, severity, - sortByField, + sortField, owner, authorizationFilter, from, @@ -349,7 +349,7 @@ export const constructQueryOptions = ({ }: CasesFindQueryParams): SavedObjectFindOptionsKueryNode => { const tagsFilter = buildFilter({ filters: tags, field: 'tags', operator: 'or' }); const reportersFilter = createReportersFilter(reporters); - const sortField = convertSortField(sortByField); + const sortByField = convertSortField(sortField); const ownerFilter = buildFilter({ filters: owner, field: OWNER_FIELD, operator: 'or' }); const statusFilter = status != null ? addStatusFilter(status) : undefined; const severityFilter = severity != null ? addSeverityFilter(severity) : undefined; @@ -370,7 +370,7 @@ export const constructQueryOptions = ({ return { filter: combineFilterWithAuthorizationFilter(filters, authorizationFilter), - sortField, + sortField: sortByField, }; }; @@ -475,22 +475,21 @@ enum SortFieldCase { category = 'category', } -export const convertSortField = (sortField: string | undefined): SortFieldCase => { +export const convertSortField = ( + sortField: CasesFindRequestSortFields | undefined +): SortFieldCase => { switch (sortField) { case 'status': return SortFieldCase.status; case 'createdAt': - case 'created_at': return SortFieldCase.createdAt; case 'closedAt': - case 'closed_at': return SortFieldCase.closedAt; case 'title': return SortFieldCase.title; case 'severity': return SortFieldCase.severity; case 'updatedAt': - case 'updated_at': return SortFieldCase.updatedAt; case 'category': return SortFieldCase.category; @@ -503,7 +502,7 @@ export const constructSearch = ( search: string | undefined, spaceId: string, savedObjectsSerializer: ISavedObjectsSerializer -): Pick | undefined => { +): { search: string; rootSearchFields?: string[] } | undefined => { if (!search) { return undefined; } diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx index cced4626d893f..917f33ce1222b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/layout/findings_layout.tsx @@ -164,7 +164,7 @@ const baseColumns = [ )} tooltipContent={i18n.translate( 'xpack.csp.findings.findingsTable.findingsTableColumn.ruleBenchmarkColumnTooltipLabel', - { defaultMessage: 'The benchmark(s) rules used to evaluate this resource came from' } + { defaultMessage: 'The benchmark used to evaluate this resource' } )} /> ), diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/resource_vulnerabilities/resource_vulnerabilities.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/resource_vulnerabilities/resource_vulnerabilities.tsx index 7f95fe07c2b14..d979e8b350931 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/resource_vulnerabilities/resource_vulnerabilities.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/resource_vulnerabilities/resource_vulnerabilities.tsx @@ -328,7 +328,18 @@ export const ResourceVulnerabilities = ({ dataView }: { dataView: DataView }) => - + ({ }: VulnerabilityDashboardTableProps) => { const { euiTheme } = useEuiTheme(); const { title } = vulnerabilityDashboardTableContent[tableType]; - const tooltipText = i18n.translate('xpack.csp.vulnerabilityTable.panel.tooltipText', { - defaultMessage: 'Explore in Findings', - }); return ( - - - - - {i18n.translate('xpack.csp.vulnerabilityTable.panel.buttonText', { - defaultMessage: 'View all vulnerabilities', - })} - - + + + + + + + + {i18n.translate('xpack.csp.vulnerabilityTable.panel.buttonText', { + defaultMessage: 'View all vulnerabilities', + })} + + + ); }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx index c1fdccef0a086..e4c993337b04e 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_trend_graph.tsx @@ -91,11 +91,11 @@ const getUniqueCloudAccountsOptions = ( const uniqueCloudAccounts: Array<{ label: string; value: string }> = []; vulnTrends.forEach((trendTimepoint) => { - const accountStatss = Object.values( + const accountsStats = Object.values( trendTimepoint.vulnerabilities_stats_by_cloud_account || {} ); - accountStatss.forEach((accountStats) => { + accountsStats.forEach((accountStats) => { // Check if the entry already exists based on the cloudAccountId const isDuplicate = uniqueCloudAccounts.find( (account) => account.value === accountStats.cloudAccountId @@ -163,14 +163,9 @@ export const VulnerabilityTrendGraph = () => { }> = useMemo( () => [ { - id: VULNERABILITIES_SEVERITY.CRITICAL, - yAccessors: ['critical'], - color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.CRITICAL), - }, - { - id: VULNERABILITIES_SEVERITY.HIGH, - yAccessors: ['high'], - color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.HIGH), + id: VULNERABILITIES_SEVERITY.LOW, + yAccessors: ['low'], + color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.LOW), }, { id: VULNERABILITIES_SEVERITY.MEDIUM, @@ -178,9 +173,14 @@ export const VulnerabilityTrendGraph = () => { color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.MEDIUM), }, { - id: VULNERABILITIES_SEVERITY.LOW, - yAccessors: ['low'], - color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.LOW), + id: VULNERABILITIES_SEVERITY.HIGH, + yAccessors: ['high'], + color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.HIGH), + }, + { + id: VULNERABILITIES_SEVERITY.CRITICAL, + yAccessors: ['critical'], + color: getSeverityStatusColor(VULNERABILITIES_SEVERITY.CRITICAL), }, ], [] diff --git a/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts b/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts index 14bb41964e8b6..bec5aacd9f95c 100644 --- a/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts +++ b/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts @@ -17,12 +17,7 @@ import type { Logger } from '@kbn/core/server'; import { getSafeVulnerabilitiesQueryFilter } from '../../common/utils/get_safe_vulnerabilities_query_filter'; import { getSafePostureTypeRuntimeMapping } from '../../common/runtime_mappings/get_safe_posture_type_runtime_mapping'; import { getIdentifierRuntimeMapping } from '../../common/runtime_mappings/get_identifier_runtime_mapping'; -import { - FindingsStatsTaskResult, - TaskHealthStatus, - ScoreByPolicyTemplateBucket, - VulnSeverityAggs, -} from './types'; +import { FindingsStatsTaskResult, ScoreByPolicyTemplateBucket, VulnSeverityAggs } from './types'; import { BENCHMARK_SCORE_INDEX_DEFAULT_NS, LATEST_FINDINGS_INDEX_DEFAULT_NS, @@ -32,6 +27,12 @@ import { } from '../../common/constants'; import { scheduleTaskSafe, removeTaskSafe } from '../lib/task_manager_util'; import { CspServerPluginStartServices } from '../types'; +import { + stateSchemaByVersion, + emptyState, + type LatestTaskStateSchema, + type TaskHealthStatus, +} from './task_state'; const CSPM_FINDINGS_STATS_TASK_ID = 'cloud_security_posture-findings_stats'; const CSPM_FINDINGS_STATS_TASK_TYPE = 'cloud_security_posture-stats_task'; @@ -49,7 +50,7 @@ export async function scheduleFindingsStatsTask( schedule: { interval: CSPM_FINDINGS_STATS_INTERVAL, }, - state: {}, + state: emptyState, params: {}, }, logger @@ -72,6 +73,7 @@ export function setupFindingsStatsTask( taskManager.registerTaskDefinitions({ [CSPM_FINDINGS_STATS_TASK_TYPE]: { title: 'Aggregate latest findings index for score calculation', + stateSchemaByVersion, createTaskRunner: taskRunner(coreStartServices, logger), }, }); @@ -86,28 +88,30 @@ export function setupFindingsStatsTask( export function taskRunner(coreStartServices: CspServerPluginStartServices, logger: Logger) { return ({ taskInstance }: RunContext) => { - const { state } = taskInstance; + const state = taskInstance.state as LatestTaskStateSchema; return { async run(): Promise { try { logger.info(`Runs task: ${CSPM_FINDINGS_STATS_TASK_TYPE}`); const esClient = (await coreStartServices)[0].elasticsearch.client.asInternalUser; - const status = await aggregateLatestFindings(esClient, state.runs, logger); + const status = await aggregateLatestFindings(esClient, logger); + const updatedState: LatestTaskStateSchema = { + runs: state.runs + 1, + health_status: status, + }; return { - state: { - runs: (state.runs || 0) + 1, - health_status: status, - }, + state: updatedState, }; } catch (errMsg) { const error = transformError(errMsg); logger.warn(`Error executing alerting health check task: ${error.message}`); + const updatedState: LatestTaskStateSchema = { + runs: state.runs + 1, + health_status: 'error', + }; return { - state: { - runs: (state.runs || 0) + 1, - health_status: 'error', - }, + state: updatedState, }; } }, @@ -303,7 +307,6 @@ const getVulnStatsTrendDocIndexingPromises = ( export const aggregateLatestFindings = async ( esClient: ElasticsearchClient, - stateRuns: number, logger: Logger ): Promise => { try { diff --git a/x-pack/plugins/cloud_security_posture/server/tasks/task_state.test.ts b/x-pack/plugins/cloud_security_posture/server/tasks/task_state.test.ts new file mode 100644 index 0000000000000..c8289e57b4fbc --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/tasks/task_state.test.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { cloneDeep } from 'lodash'; +import { stateSchemaByVersion } from './task_state'; + +describe('finding stats task state', () => { + describe('v1', () => { + const v1 = stateSchemaByVersion[1]; + it('should work on empty object when running the up migration', () => { + const result = v1.up({}); + expect(result).toMatchInlineSnapshot(` + Object { + "health_status": "ok", + "runs": 0, + } + `); + }); + + it(`shouldn't overwrite properties when running the up migration`, () => { + const state = { + health_status: 'error', + runs: 1, + }; + const result = v1.up(cloneDeep(state)); + expect(result).toEqual(state); + }); + + it('should drop unknown properties when running the up migration', () => { + const state = { foo: true }; + const result = v1.up(state); + expect(result).not.toHaveProperty('foo'); + }); + }); +}); diff --git a/x-pack/plugins/cloud_security_posture/server/tasks/task_state.ts b/x-pack/plugins/cloud_security_posture/server/tasks/task_state.ts new file mode 100644 index 0000000000000..b0dc351c6489b --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/tasks/task_state.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema, TypeOf } from '@kbn/config-schema'; + +const taskHealthStatus = schema.oneOf([ + schema.literal('ok'), + schema.literal('warning'), + schema.literal('error'), +]); +export type TaskHealthStatus = TypeOf; + +/** + * WARNING: Do not modify the existing versioned schema(s) below, instead define a new version (ex: 2, 3, 4). + * This is required to support zero-downtime upgrades and rollbacks. See https://github.com/elastic/kibana/issues/155764. + * + * As you add a new schema version, don't forget to change latestTaskStateSchema variable to reference the latest schema. + * For example, changing stateSchemaByVersion[1].schema to stateSchemaByVersion[2].schema. + */ +export const stateSchemaByVersion = { + 1: { + // A task that was created < 8.10 will go through this "up" migration + // to ensure it matches the v1 schema. + up: (state: Record) => ({ + runs: state.runs || 0, + health_status: state.health_status || 'ok', + }), + schema: schema.object({ + runs: schema.number(), + health_status: taskHealthStatus, + }), + }, +}; + +const latestTaskStateSchema = stateSchemaByVersion[1].schema; +export type LatestTaskStateSchema = TypeOf; + +export const emptyState: LatestTaskStateSchema = { + runs: 0, + health_status: 'ok', +}; diff --git a/x-pack/plugins/cloud_security_posture/server/tasks/types.ts b/x-pack/plugins/cloud_security_posture/server/tasks/types.ts index c67f682c7c016..56ca619dcec55 100644 --- a/x-pack/plugins/cloud_security_posture/server/tasks/types.ts +++ b/x-pack/plugins/cloud_security_posture/server/tasks/types.ts @@ -5,6 +5,8 @@ * 2.0. */ +import { LatestTaskStateSchema } from './task_state'; + export interface ScoreByPolicyTemplateBucket { score_by_policy_template: { buckets: Array<{ @@ -62,11 +64,6 @@ export interface VulnSeverityAggs { }; } -export type TaskHealthStatus = 'ok' | 'warning' | 'error'; - export interface FindingsStatsTaskResult { - state: { - runs: number; - health_status: TaskHealthStatus; - }; + state: LatestTaskStateSchema; } diff --git a/x-pack/plugins/fleet/common/index.ts b/x-pack/plugins/fleet/common/index.ts index 6d89be74ada25..df9ecae76bea5 100644 --- a/x-pack/plugins/fleet/common/index.ts +++ b/x-pack/plugins/fleet/common/index.ts @@ -58,6 +58,7 @@ export { ENDPOINT_PRIVILEGES, // dashboards ids DASHBOARD_LOCATORS_IDS, + FLEET_ENROLLMENT_API_PREFIX, } from './constants'; export { // Route services diff --git a/x-pack/plugins/fleet/common/openapi/paths/agents@action_status.yaml b/x-pack/plugins/fleet/common/openapi/paths/agents@action_status.yaml index 89bc0d6c89178..c0e81da8331d5 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/agents@action_status.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/agents@action_status.yaml @@ -8,7 +8,7 @@ get: - schema: type: integer default: 5 - in: query + in: query name: errorSize responses: '200': @@ -78,7 +78,7 @@ get: type: string description: policy id (POLICY_CHANGE action) revision: - type: string + type: string description: new policy revision (POLICY_CHANGE action) creationTime: type: string @@ -90,11 +90,11 @@ get: type: object properties: agentId: - type: string + type: string error: type: string timestamp: - type: string + type: string required: - actionId - complete diff --git a/x-pack/plugins/fleet/common/types/models/agent.ts b/x-pack/plugins/fleet/common/types/models/agent.ts index 6c4108abf622a..f8ed69d6d4d33 100644 --- a/x-pack/plugins/fleet/common/types/models/agent.ts +++ b/x-pack/plugins/fleet/common/types/models/agent.ts @@ -415,3 +415,9 @@ export interface FleetServerAgentAction { [k: string]: unknown; } + +export interface ActionStatusOptions { + errorSize: number; + page?: number; + perPage?: number; +} diff --git a/x-pack/plugins/fleet/common/types/rest_spec/common.ts b/x-pack/plugins/fleet/common/types/rest_spec/common.ts index cd3279b4cb25e..07bd3c7019c16 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/common.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/common.ts @@ -7,9 +7,6 @@ import type { HttpFetchQuery } from '@kbn/core/public'; -/** - * @deprecated will be replaced by a "narrow" set of parameters - */ export interface ListWithKuery extends HttpFetchQuery { page?: number; perPage?: number; diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx index e13c7006e36dc..5478aca7c5baa 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx @@ -208,14 +208,6 @@ describe('SearchBar', () => { }); describe('filterAndConvertFields', () => { - it('prepends the fieldPrefix if passed and hides some fields ', async () => { - expect(filterAndConvertFields(fields, '.test-index', 'test-index')).toEqual({ - 'test-index.api_key': { esTypes: ['keyword'], name: 'test-index.api_key', type: 'string' }, - 'test-index.name': { esTypes: ['keyword'], name: 'test-index.name', type: 'string' }, - 'test-index.version': { esTypes: ['keyword'], name: 'test-index.version', type: 'string' }, - }); - }); - it('leaves the fields names unchanged and does not hide any fields if fieldPrefix is not passed', async () => { expect(filterAndConvertFields(fields, '.test-index')).toEqual({ _id: { esTypes: ['_id'], name: '_id', type: 'string' }, diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx index f2a26126f3637..5e610a46e3f34 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx @@ -49,22 +49,14 @@ export const filterAndConvertFields = ( if (indexPattern === INDEX_NAME) { filteredFields = fields.filter((field) => field.name.startsWith(fieldPrefix)); } else { - // Concatenate the fields with the prefix - const withPrefix = fields.map((field) => { - return !field.name.startsWith(fieldPrefix) - ? { ...field, name: `${fieldPrefix}.${field.name}` } - : field; - }); // filter out fields that have names to be hidden - filteredFields = withPrefix.filter((field) => { - if (field.name.startsWith(fieldPrefix)) { - for (const hiddenField of HIDDEN_FIELDS) { - if (field.name.includes(hiddenField)) { - return false; - } + filteredFields = fields.filter((field) => { + for (const hiddenField of HIDDEN_FIELDS) { + if (field.name.includes(hiddenField)) { + return false; } - return true; } + return true; }); } } else { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/es_requirements_page.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/es_requirements_page.tsx index 59f0df5045b3f..68f0205a40c7c 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/es_requirements_page.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_requirements_page/es_requirements_page.tsx @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiPageBody, - EuiPageContent_Deprecated as EuiPageContent, + EuiPageSection, EuiText, EuiSpacer, EuiIcon, @@ -22,6 +22,8 @@ import { EuiLink, } from '@elastic/eui'; +import styled from 'styled-components'; + import { WithoutHeaderLayout } from '../../../layouts'; import type { GetFleetStatusResponse } from '../../../types'; import { useStartServices } from '../../../hooks'; @@ -48,15 +50,21 @@ export const RequirementItem: React.FunctionComponent<{ isMissing: boolean }> = ); }; +const borderColor = '#d3dae6'; + +const StyledPageBody = styled(EuiPageBody)` + border: 1px solid ${borderColor}; + border-radius: 5px; +`; + export const MissingESRequirementsPage: React.FunctionComponent<{ missingRequirements: GetFleetStatusResponse['missing_requirements']; }> = ({ missingRequirements }) => { const { docLinks } = useStartServices(); - return ( - - + + - - + + ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/components/no_data_layout.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/components/no_data_layout.tsx index 9d9703451dd7b..c37bce702e978 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/components/no_data_layout.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/components/no_data_layout.tsx @@ -5,36 +5,31 @@ * 2.0. */ -import { - EuiEmptyPrompt, - EuiFlexGroup, - EuiFlexItem, - EuiPageContent_Deprecated as EuiPageContent, -} from '@elastic/eui'; +import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiPageSection } from '@elastic/eui'; import React from 'react'; import { withRouter } from 'react-router-dom'; interface LayoutProps { title: string | React.ReactNode; actionSection?: React.ReactNode; - modalClosePath?: string; } export const NoDataLayout: React.FunctionComponent = withRouter< any, React.FunctionComponent ->(({ actionSection, title, modalClosePath, children }: React.PropsWithChildren) => { +>(({ actionSection, title, children }: React.PropsWithChildren) => { return ( - + {title}} body={children} actions={actionSection} /> - + ); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/enforce_security.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/enforce_security.tsx deleted file mode 100644 index 74475aca10d5d..0000000000000 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/enforce_security.tsx +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { FormattedMessage, injectI18n } from '@kbn/i18n-react'; - -import { NoDataLayout } from './components/no_data_layout'; - -export const EnforceSecurityPage = injectI18n(({ intl }) => ( - -

- -

-
-)); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/invalid_license.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/invalid_license.tsx deleted file mode 100644 index 66f4d5fca19ca..0000000000000 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/error_pages/invalid_license.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { FormattedMessage, injectI18n } from '@kbn/i18n-react'; - -import { NoDataLayout } from './components/no_data_layout'; - -export const InvalidLicensePage = injectI18n(({ intl }) => ( - -

- -

-
-)); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/hooks/use_fleet_server_unhealthy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/hooks/use_fleet_server_unhealthy.tsx index 3c7ba71199eaa..5dd3fb9b5dfd9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/hooks/use_fleet_server_unhealthy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/hooks/use_fleet_server_unhealthy.tsx @@ -37,7 +37,7 @@ export function useFleetServerUnhealthy() { if (agentPolicyIds.length > 0) { const agentStatusesRes = await sendGetAgentStatus({ - kuery: agentPolicyIds.map((policyId) => `policy_id:"${policyId}"`).join(' or '), + kuery: agentPolicyIds.map((policyId) => `policy_id:${policyId}`).join(' or '), }); if (agentStatusesRes.error) { diff --git a/x-pack/plugins/fleet/server/constants/index.ts b/x-pack/plugins/fleet/server/constants/index.ts index 3635f8b38020a..356aaa0e0cf8e 100644 --- a/x-pack/plugins/fleet/server/constants/index.ts +++ b/x-pack/plugins/fleet/server/constants/index.ts @@ -95,3 +95,4 @@ export { } from './fleet_es_assets'; export { FILE_STORAGE_DATA_AGENT_INDEX } from './fleet_es_assets'; export { FILE_STORAGE_METADATA_AGENT_INDEX } from './fleet_es_assets'; +export * from './mappings'; diff --git a/x-pack/plugins/fleet/server/constants/mappings.ts b/x-pack/plugins/fleet/server/constants/mappings.ts new file mode 100644 index 0000000000000..617a5d35a46de --- /dev/null +++ b/x-pack/plugins/fleet/server/constants/mappings.ts @@ -0,0 +1,332 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * The mappings declared closely mirror the ones declared in indices and SOs + * But they are only used to perform validation on those endpoints using ListWithKuery + * Whenever a field is added on any of these mappings, make sure to add it here as well + */ + +export const AGENT_POLICY_MAPPINGS = { + properties: { + agent_features: { + properties: { + name: { type: 'keyword' }, + enabled: { type: 'boolean' }, + }, + }, + data_output_id: { type: 'keyword' }, + description: { type: 'text' }, + download_source_id: { type: 'keyword' }, + fleet_server_host_id: { type: 'keyword' }, + inactivity_timeout: { type: 'integer' }, + is_default: { type: 'boolean' }, + is_default_fleet_server: { type: 'boolean' }, + is_managed: { type: 'boolean' }, + is_preconfigured: { type: 'keyword' }, + is_protected: { type: 'boolean' }, + monitoring_enabled: { type: 'keyword', index: false }, + monitoring_output_id: { type: 'keyword' }, + name: { type: 'keyword' }, + namespace: { type: 'keyword' }, + revision: { type: 'integer' }, + schema_version: { type: 'version' }, + status: { type: 'keyword' }, + unenroll_timeout: { type: 'integer' }, + updated_at: { type: 'date' }, + updated_by: { type: 'keyword' }, + }, +} as const; + +export const PACKAGE_POLICIES_MAPPINGS = { + properties: { + name: { type: 'keyword' }, + description: { type: 'text' }, + namespace: { type: 'keyword' }, + enabled: { type: 'boolean' }, + is_managed: { type: 'boolean' }, + policy_id: { type: 'keyword' }, + package: { + properties: { + name: { type: 'keyword' }, + title: { type: 'keyword' }, + version: { type: 'keyword' }, + }, + }, + elasticsearch: { + dynamic: false, + properties: {}, + }, + vars: { type: 'flattened' }, + inputs: { + dynamic: false, + properties: {}, + }, + secret_references: { properties: { id: { type: 'keyword' } } }, + revision: { type: 'integer' }, + updated_at: { type: 'date' }, + updated_by: { type: 'keyword' }, + created_at: { type: 'date' }, + created_by: { type: 'keyword' }, + }, +} as const; + +export const AGENT_MAPPINGS = { + properties: { + access_api_key_id: { + type: 'keyword', + }, + action_seq_no: { + type: 'integer', + }, + active: { + type: 'boolean', + }, + agent: { + properties: { + id: { + type: 'keyword', + }, + version: { + type: 'keyword', + }, + }, + }, + default_api_key: { + type: 'keyword', + }, + default_api_key_id: { + type: 'keyword', + }, + enrollment_id: { + type: 'keyword', + }, + enrolled_at: { + type: 'date', + }, + last_checkin: { + type: 'date', + }, + last_checkin_message: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + last_checkin_status: { + type: 'keyword', + }, + last_updated: { + type: 'date', + }, + local_metadata: { + properties: { + elastic: { + properties: { + agent: { + properties: { + build: { + properties: { + original: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + }, + }, + id: { + type: 'keyword', + }, + log_level: { + type: 'keyword', + }, + snapshot: { + type: 'boolean', + }, + upgradeable: { + type: 'boolean', + }, + version: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + }, + }, + }, + }, + host: { + properties: { + architecture: { + type: 'keyword', + }, + hostname: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + id: { + type: 'keyword', + }, + ip: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + mac: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + name: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + }, + }, + os: { + properties: { + family: { + type: 'keyword', + }, + full: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + kernel: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + name: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + platform: { + type: 'keyword', + }, + version: { + type: 'text', + properties: { + keyword: { + type: 'keyword', + }, + }, + }, + }, + }, + }, + }, + packages: { + type: 'keyword', + }, + policy_output_permissions_hash: { + type: 'keyword', + }, + policy_coordinator_idx: { + type: 'integer', + }, + policy_id: { + type: 'keyword', + }, + policy_revision_idx: { + type: 'integer', + }, + type: { + type: 'keyword', + }, + tags: { + type: 'keyword', + }, + unenrolled_at: { + type: 'date', + }, + unenrollment_started_at: { + type: 'date', + }, + unenrolled_reason: { + type: 'keyword', + }, + updated_at: { + type: 'date', + }, + upgrade_started_at: { + type: 'date', + }, + upgraded_at: { + type: 'date', + }, + upgrade_status: { + type: 'keyword', + }, + // added to allow validation on status field + status: { + type: 'keyword', + }, + }, +} as const; + +export const ENROLLMENT_API_KEY_MAPPINGS = { + properties: { + active: { + type: 'boolean', + }, + api_key: { + type: 'keyword', + }, + api_key_id: { + type: 'keyword', + }, + created_at: { + type: 'date', + }, + expire_at: { + type: 'date', + }, + name: { + type: 'keyword', + }, + policy_id: { + type: 'keyword', + }, + updated_at: { + type: 'date', + }, + }, +} as const; diff --git a/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts b/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts index 7da8edb68f9f7..c6eaba98135f3 100644 --- a/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts @@ -164,201 +164,209 @@ describe('Fleet preconfiguration reset', () => { data.signed.data = ''; data.signed.signature = ''; - expect(data).toEqual({ - agent: { - download: { - sourceURI: 'https://artifacts.elastic.co/downloads/', - }, - features: {}, - monitoring: { - enabled: false, - logs: false, - metrics: false, - }, - protection: { - enabled: false, - signing_key: '', - uninstall_token_hash: '', - }, - }, - id: 'policy-elastic-agent-on-cloud', - inputs: [ - { - data_stream: { - namespace: 'default', + expect(data).toEqual( + expect.objectContaining({ + agent: { + download: { + sourceURI: 'https://artifacts.elastic.co/downloads/', }, - id: 'fleet-server-fleet_server-elastic-cloud-fleet-server', - meta: { - package: { - name: 'fleet_server', - }, + features: {}, + monitoring: { + enabled: false, + logs: false, + metrics: false, }, - name: 'Fleet Server', - package_policy_id: 'elastic-cloud-fleet-server', - revision: 1, - 'server.runtime': { - gc_percent: 20, + protection: { + enabled: false, + signing_key: '', + uninstall_token_hash: '', }, - type: 'fleet-server', - unused_key: 'not_used', - use_output: 'es-containerhost', }, - { - 'apm-server': { - agent: { - config: { - elasticsearch: { - api_key: '', - }, + id: 'policy-elastic-agent-on-cloud', + inputs: expect.arrayContaining([ + { + data_stream: { + namespace: 'default', + }, + id: 'fleet-server-fleet_server-elastic-cloud-fleet-server', + meta: { + package: { + name: 'fleet_server', }, }, - agent_config: [], - auth: { - anonymous: { - allow_agent: ['rum-js', 'js-base', 'iOS/swift'], - allow_service: null, + name: 'Fleet Server', + package_policy_id: 'elastic-cloud-fleet-server', + revision: 1, + 'server.runtime': { + gc_percent: 20, + }, + type: 'fleet-server', + unused_key: 'not_used', + use_output: 'es-containerhost', + }, + { + 'apm-server': { + agent: { + config: { + elasticsearch: { + api_key: '', + }, + }, + }, + agent_config: [], + auth: { + anonymous: { + allow_agent: ['rum-js', 'js-base', 'iOS/swift'], + allow_service: null, + enabled: true, + rate_limit: { + event_limit: 300, + ip_limit: 1000, + }, + }, + api_key: { + enabled: true, + limit: 100, + }, + secret_token: 'CLOUD_SECRET_TOKEN', + }, + capture_personal_data: true, + default_service_environment: null, + 'expvar.enabled': false, + host: '0.0.0.0:8200', + idle_timeout: '45s', + java_attacher: { + 'discovery-rules': null, + 'download-agent-version': null, + enabled: false, + }, + max_connections: 0, + max_event_size: 307200, + max_header_size: 1048576, + 'pprof.enabled': false, + read_timeout: '3600s', + response_headers: null, + rum: { + allow_headers: null, + allow_origins: ['*'], enabled: true, - rate_limit: { - event_limit: 300, - ip_limit: 1000, + exclude_from_grouping: '^/webpack', + library_pattern: 'node_modules|bower_components|~', + response_headers: null, + source_mapping: { + elasticsearch: { + api_key: '', + }, + metadata: [], + }, + }, + sampling: { + tail: { + enabled: false, + interval: '1m', + policies: [ + { + sample_rate: 0.1, + }, + ], + storage_limit: '3GB', }, }, - api_key: { + shutdown_timeout: '30s', + ssl: { + certificate: '/app/config/certs/node.crt', + cipher_suites: null, + curve_types: null, enabled: true, - limit: 100, + key: '/app/config/certs/node.key', + key_passphrase: null, + supported_protocols: ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], }, - secret_token: 'CLOUD_SECRET_TOKEN', + write_timeout: '30s', }, - capture_personal_data: true, - default_service_environment: null, - 'expvar.enabled': false, - host: '0.0.0.0:8200', - idle_timeout: '45s', - java_attacher: { - 'discovery-rules': null, - 'download-agent-version': null, - enabled: false, + data_stream: { + namespace: 'default', }, - max_connections: 0, - max_event_size: 307200, - max_header_size: 1048576, - 'pprof.enabled': false, - read_timeout: '3600s', - response_headers: null, - rum: { - allow_headers: null, - allow_origins: ['*'], - enabled: true, - exclude_from_grouping: '^/webpack', - library_pattern: 'node_modules|bower_components|~', - response_headers: null, - source_mapping: { - elasticsearch: { - api_key: '', - }, - metadata: [], + id: 'elastic-cloud-apm', + meta: { + package: { + name: 'apm', }, }, - sampling: { - tail: { - enabled: false, - interval: '1m', - policies: [ - { - sample_rate: 0.1, - }, - ], - storage_limit: '3GB', - }, + name: 'Elastic APM', + package_policy_id: 'elastic-cloud-apm', + revision: 2, + type: 'apm', + use_output: 'es-containerhost', + }, + ]), + output_permissions: { + 'es-containerhost': { + _elastic_agent_checks: { + cluster: ['monitor'], }, - shutdown_timeout: '30s', - ssl: { - certificate: '/app/config/certs/node.crt', - cipher_suites: null, - curve_types: null, - enabled: true, - key: '/app/config/certs/node.key', - key_passphrase: null, - supported_protocols: ['TLSv1.1', 'TLSv1.2', 'TLSv1.3'], + _elastic_agent_monitoring: { + indices: [], }, - write_timeout: '30s', - }, - data_stream: { - namespace: 'default', - }, - id: 'elastic-cloud-apm', - meta: { - package: { - name: 'apm', + 'elastic-cloud-apm': { + cluster: ['cluster:monitor/main'], + indices: [ + { + names: ['logs-apm.app-default'], + privileges: ['auto_configure', 'create_doc'], + }, + { + names: ['metrics-apm.app.*-default'], + privileges: ['auto_configure', 'create_doc'], + }, + { + names: ['logs-apm.error-default'], + privileges: ['auto_configure', 'create_doc'], + }, + { + names: ['metrics-apm.internal-default'], + privileges: ['auto_configure', 'create_doc'], + }, + { + names: ['metrics-apm.profiling-default'], + privileges: ['auto_configure', 'create_doc'], + }, + { + names: ['traces-apm.rum-default'], + privileges: ['auto_configure', 'create_doc'], + }, + { + names: ['traces-apm.sampled-default'], + privileges: [ + 'auto_configure', + 'create_doc', + 'maintenance', + 'monitor', + 'read', + ], + }, + { + names: ['traces-apm-default'], + privileges: ['auto_configure', 'create_doc'], + }, + ], }, }, - name: 'Elastic APM', - package_policy_id: 'elastic-cloud-apm', - revision: 2, - type: 'apm', - use_output: 'es-containerhost', }, - ], - output_permissions: { - 'es-containerhost': { - _elastic_agent_checks: { - cluster: ['monitor'], - }, - _elastic_agent_monitoring: { - indices: [], - }, - 'elastic-cloud-apm': { - cluster: ['cluster:monitor/main'], - indices: [ - { - names: ['logs-apm.app-default'], - privileges: ['auto_configure', 'create_doc'], - }, - { - names: ['metrics-apm.app.*-default'], - privileges: ['auto_configure', 'create_doc'], - }, - { - names: ['logs-apm.error-default'], - privileges: ['auto_configure', 'create_doc'], - }, - { - names: ['metrics-apm.internal-default'], - privileges: ['auto_configure', 'create_doc'], - }, - { - names: ['metrics-apm.profiling-default'], - privileges: ['auto_configure', 'create_doc'], - }, - { - names: ['traces-apm.rum-default'], - privileges: ['auto_configure', 'create_doc'], - }, - { - names: ['traces-apm.sampled-default'], - privileges: ['auto_configure', 'create_doc', 'maintenance', 'monitor', 'read'], - }, - { - names: ['traces-apm-default'], - privileges: ['auto_configure', 'create_doc'], - }, - ], + outputs: { + 'es-containerhost': { + hosts: ['https://cloudinternales:9200'], + type: 'elasticsearch', }, }, - }, - outputs: { - 'es-containerhost': { - hosts: ['https://cloudinternales:9200'], - type: 'elasticsearch', + revision: 5, + secret_references: [], + signed: { + data: '', + signature: '', }, - }, - revision: 5, - secret_references: [], - signed: { - data: '', - signature: '', - }, - }); + }) + ); }); it('Create correct package policies', async () => { diff --git a/x-pack/plugins/fleet/server/routes/utils/filter_utils.test.ts b/x-pack/plugins/fleet/server/routes/utils/filter_utils.test.ts new file mode 100644 index 0000000000000..f888959b152c4 --- /dev/null +++ b/x-pack/plugins/fleet/server/routes/utils/filter_utils.test.ts @@ -0,0 +1,444 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 esKuery from '@kbn/es-query'; + +import { validateFilterKueryNode } from './filter_utils'; + +const mockMappings = { + properties: { + updated_at: { + type: 'date', + }, + foo: { + properties: { + title: { + type: 'text', + }, + description: { + type: 'text', + }, + bytes: { + type: 'integer', + }, + }, + }, + bar: { + properties: { + _id: { + type: 'keyword', + }, + foo: { + type: 'text', + }, + description: { + type: 'text', + }, + }, + }, + bean: { + properties: { + canned: { + fields: { + text: { + type: 'text', + }, + }, + type: 'keyword', + }, + }, + }, + alert: { + properties: { + actions: { + type: 'nested', + properties: { + group: { + type: 'keyword', + }, + actionRef: { + type: 'keyword', + }, + actionTypeId: { + type: 'keyword', + }, + params: { + enabled: false, + type: 'object', + }, + }, + }, + params: { + type: 'flattened', + }, + }, + }, + hiddenType: { + properties: { + description: { + type: 'text', + }, + }, + }, + }, +} as const; + +describe('Filter Utils', () => { + describe('ValidateFilterKueryNode', () => { + describe('Validate general kueries through KueryNode', () => { + it('Simple filter', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'foo.updated_at: 5678654567 and foo.attributes.bytes > 1000 and foo.attributes.bytes < 8000 and foo.attributes.title: "best" and (foo.attributes.description: t* or foo.attributes.description :*)' + ), + types: ['foo'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'foo.updated_at', + type: 'foo', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.2', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.3', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.title', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + ]); + }); + + it('Nested filter query', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'alert.attributes.actions:{ actionTypeId: ".server-log" }' + ), + types: ['alert'], + indexMapping: mockMappings, + hasNestedKey: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'alert.attributes.actions.actionTypeId', + type: 'alert', + }, + ]); + }); + + it('Accept defined key even if not wrapped by a saved object type', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'updated_at: 5678654567 and foo.attributes.bytes > 1000 and foo.attributes.bytes < 8000 and foo.attributes.title: "best" and (foo.attributes.description: t* or foo.attributes.description :*)' + ), + types: ['foo'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'updated_at', + type: null, + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.2', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.3', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.title', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + ]); + }); + + it('Return Error if key of a saved object type is not wrapped with attributes', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'foo.updated_at: 5678654567 and foo.attributes.bytes > 1000 and foo.bytes < 8000 and foo.attributes.title: "best" and (foo.attributes.description: t* or foo.description :*)' + ), + types: ['foo'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'foo.updated_at', + type: 'foo', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.2', + error: + "This key 'foo.bytes' does NOT match the filter proposition SavedObjectType.attributes.key", + isSavedObjectAttr: false, + key: 'foo.bytes', + type: 'foo', + }, + { + astPath: 'arguments.3', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.title', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.1', + error: + "This key 'foo.description' does NOT match the filter proposition SavedObjectType.attributes.key", + isSavedObjectAttr: false, + key: 'foo.description', + type: 'foo', + }, + ]); + }); + + it('Return Error if filter is not using an allowed type', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'bar.updated_at: 5678654567 and foo.attributes.bytes > 1000 and foo.attributes.bytes < 8000 and foo.attributes.title: "best" and (foo.attributes.description: t* or foo.attributes.description :*)' + ), + types: ['foo'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: `This key 'bar.updated_at' does NOT exist in foo saved object index patterns`, + isSavedObjectAttr: true, + key: 'bar.updated_at', + type: 'bar', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.2', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.3', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.title', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + ]); + }); + + it('Return Error if filter is using an non-existing key in the index patterns of the saved object type', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'foo.updated_at33: 5678654567 and foo.attributes.bytes > 1000 and foo.attributes.bytes < 8000 and foo.attributes.header: "best" and (foo.attributes.description: t* or foo.attributes.description :*)' + ), + types: ['foo'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: "This key 'foo.updated_at33' does NOT exist in foo saved object index patterns", + isSavedObjectAttr: false, + key: 'foo.updated_at33', + type: 'foo', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.2', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.bytes', + type: 'foo', + }, + { + astPath: 'arguments.3', + error: + "This key 'foo.attributes.header' does NOT exist in foo saved object index patterns", + isSavedObjectAttr: false, + key: 'foo.attributes.header', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + { + astPath: 'arguments.4.arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + ]); + }); + + it('Return Error if filter is using an non-existing key null key', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression('foo.attributes.description: hello AND bye'), + types: ['foo'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'foo.attributes.description', + type: 'foo', + }, + { + astPath: 'arguments.1', + error: 'The key is empty and needs to be wrapped by a saved object type like foo', + isSavedObjectAttr: false, + key: null, + type: null, + }, + ]); + }); + + it('Multiple nested filter queries', () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + 'alert.attributes.actions:{ actionTypeId: ".server-log" AND actionRef: "foo" }' + ), + types: ['alert'], + indexMapping: mockMappings, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.1.arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'alert.attributes.actions.actionTypeId', + type: 'alert', + }, + { + astPath: 'arguments.1.arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'alert.attributes.actions.actionRef', + type: 'alert', + }, + ]); + }); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/routes/utils/filter_utils.ts b/x-pack/plugins/fleet/server/routes/utils/filter_utils.ts new file mode 100644 index 0000000000000..fccddd66891c6 --- /dev/null +++ b/x-pack/plugins/fleet/server/routes/utils/filter_utils.ts @@ -0,0 +1,255 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { get } from 'lodash'; +import * as esKuery from '@kbn/es-query'; +import type { IndexMapping } from '@kbn/core-saved-objects-base-server-internal'; + +type KueryNode = any; + +const astFunctionType = ['is', 'range', 'nested']; +const allowedTerms = ['_exists_']; + +interface ValidateFilterKueryNode { + astPath: string; + error: string; + isSavedObjectAttr: boolean; + key: string; + type: string | null; +} + +interface ValidateFilterKueryNodeParams { + astFilter: KueryNode; + types: string[]; + indexMapping: IndexMapping; + hasNestedKey?: boolean; + nestedKeys?: string; + storeValue?: boolean; + path?: string; + skipNormalization?: boolean; +} + +export const validateFilterKueryNode = ({ + astFilter, + types, + indexMapping, + hasNestedKey = false, + nestedKeys, + storeValue = false, + path = 'arguments', + skipNormalization, +}: ValidateFilterKueryNodeParams): ValidateFilterKueryNode[] => { + let localNestedKeys: string | undefined; + return astFilter.arguments.reduce((kueryNode: string[], ast: KueryNode, index: number) => { + if (hasNestedKey && ast.type === 'literal' && ast.value != null) { + localNestedKeys = ast.value; + } else if (ast.type === 'literal' && ast.value && typeof ast.value === 'string') { + const key = ast.value.replace('.attributes', ''); + const mappingKey = 'properties.' + key.split('.').join('.properties.'); + const field = get(indexMapping, mappingKey); + + if (field != null && field.type === 'nested') { + localNestedKeys = ast.value; + } + } + + if (ast.arguments) { + const myPath = `${path}.${index}`; + return [ + ...kueryNode, + ...validateFilterKueryNode({ + astFilter: ast, + types, + indexMapping, + storeValue: ast.type === 'function' && astFunctionType.includes(ast.function), + path: `${myPath}.arguments`, + hasNestedKey: ast.type === 'function' && ast.function === 'nested', + nestedKeys: localNestedKeys || nestedKeys, + skipNormalization, + }), + ]; + } + if (storeValue && index === 0) { + const splitPath = path.split('.'); + const astPath = path.includes('.') + ? splitPath.slice(0, splitPath.length - 1).join('.') + : `${path}.${index}`; + const key = nestedKeys != null ? `${nestedKeys}.${ast.value}` : ast.value; + + return [ + ...kueryNode, + { + astPath, + error: hasFilterKeyError(key, types, indexMapping, skipNormalization), + isSavedObjectAttr: isSavedObjectAttr(key, indexMapping), + key, + type: getType(key), + }, + ]; + } + return kueryNode; + }, []); +}; + +const getType = (key: string | undefined | null) => { + if (key != null && key.includes('.')) { + return key.split('.')[0]; + } else if (allowedTerms.some((term) => term === key)) { + return 'searchTerm'; + } else { + return null; + } +}; + +/** + * Is this filter key referring to a a top-level SavedObject attribute such as + * `updated_at` or `references`. + * + * @param key + * @param indexMapping + */ +export const isSavedObjectAttr = (key: string | null | undefined, indexMapping: IndexMapping) => { + const keySplit = key != null ? key.split('.') : []; + if (keySplit.length === 1 && fieldDefined(indexMapping, keySplit[0])) { + return true; + } else if (keySplit.length === 2 && keySplit[1] === 'id') { + return true; + } else if (keySplit.length === 2 && fieldDefined(indexMapping, keySplit[1])) { + return true; + } else { + return false; + } +}; + +export const hasFilterKeyError = ( + key: string | null | undefined, + types: string[], + indexMapping: IndexMapping, + skipNormalization?: boolean +): string | null => { + if (key == null) { + return `The key is empty and needs to be wrapped by a saved object type like ${types.join()}`; + } + if (!key.includes('.')) { + if (allowedTerms.some((term) => term === key) || fieldDefined(indexMapping, key)) { + return null; + } + return `This type '${key}' is not allowed`; + } else if (key.includes('.')) { + const keySplit = key.split('.'); + if ( + keySplit.length <= 1 && + !fieldDefined(indexMapping, keySplit[0]) && + !types.includes(keySplit[0]) + ) { + return `This type '${keySplit[0]}' is not allowed`; + } + // In some cases we don't want to check about the `attributes` presence + // In that case pass the `skipNormalization` parameter + if ( + (!skipNormalization && keySplit.length === 2 && fieldDefined(indexMapping, key)) || + (!skipNormalization && keySplit.length > 2 && keySplit[1] !== 'attributes') + ) { + return `This key '${key}' does NOT match the filter proposition SavedObjectType.attributes.key`; + } + // Check that the key exists in the mappings + const searchKey = + skipNormalization || keySplit[1] !== 'attributes' + ? `${keySplit[0]}.${keySplit.slice(1, keySplit.length).join('.')}` + : `${keySplit[0]}.${keySplit.slice(2, keySplit.length).join('.')}`; + if ( + (keySplit.length === 2 && !fieldDefined(indexMapping, keySplit[1])) || + (keySplit.length === 2 && + !types.includes(keySplit[0]) && + !fieldDefined(indexMapping, searchKey)) || + (keySplit.length > 2 && !fieldDefined(indexMapping, searchKey)) + ) { + return `This key '${key}' does NOT exist in ${types.join()} saved object index patterns`; + } + } + return null; +}; + +export const fieldDefined = (indexMappings: IndexMapping, key: string): boolean => { + const keySplit = key.split('.'); + const shortenedKey = `${keySplit[1]}.${keySplit.slice(2, keySplit.length).join('.')}`; + const mappingKey = 'properties.' + key.split('.').join('.properties.'); + const shortenedMappingKey = 'properties.' + shortenedKey.split('.').join('.properties.'); + + if (get(indexMappings, mappingKey) != null || get(indexMappings, shortenedMappingKey) != null) { + return true; + } + + if (mappingKey === 'properties.id') { + return true; + } + + // If the `mappingKey` does not match a valid path, before returning false, + // we want to check and see if the intended path was for a multi-field + // such as `x.attributes.field.text` where `field` is mapped to both text + // and keyword + const propertiesAttribute = 'properties'; + const indexOfLastProperties = mappingKey.lastIndexOf(propertiesAttribute); + const fieldMapping = mappingKey.substr(0, indexOfLastProperties); + const fieldType = mappingKey.substr( + mappingKey.lastIndexOf(propertiesAttribute) + `${propertiesAttribute}.`.length + ); + const mapping = `${fieldMapping}fields.${fieldType}`; + if (get(indexMappings, mapping) != null) { + return true; + } + + // If the path is for a flattened type field, we'll assume the mappings are defined. + const keys = key.split('.'); + for (let i = 0; i < keys.length; i++) { + const path = `properties.${keys.slice(0, i + 1).join('.properties.')}`; + if (get(indexMappings, path)?.type === 'flattened') { + return true; + } + } + + return false; +}; + +export const validateKuery = ( + kuery: string | undefined, + allowedTypes: string[], + indexMapping: IndexMapping, + skipNormalization?: boolean +) => { + let isValid = true; + let error: string | undefined; + + if (!kuery) { + isValid = true; + } + try { + if (kuery && indexMapping) { + const astFilter = esKuery.fromKueryExpression(kuery); + const validationObject = validateFilterKueryNode({ + astFilter, + types: allowedTypes, + indexMapping, + storeValue: true, + skipNormalization, + }); + if (validationObject.some((obj) => obj.error != null)) { + error = `KQLSyntaxError: ${validationObject + .filter((obj) => obj.error != null) + .map((obj) => obj.error) + .join('\n')}`; + isValid = false; + } + } else { + isValid = true; + } + return { isValid, error }; + } catch (e) { + isValid = false; + error = e.message; + } +}; diff --git a/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts b/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts new file mode 100644 index 0000000000000..e8d3b65598806 --- /dev/null +++ b/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts @@ -0,0 +1,755 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 esKuery from '@kbn/es-query'; + +import { + AGENT_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, + AGENTS_PREFIX, + AGENT_POLICY_MAPPINGS, + PACKAGE_POLICIES_MAPPINGS, + AGENT_MAPPINGS, + ENROLLMENT_API_KEY_MAPPINGS, +} from '../../constants'; + +import { FLEET_ENROLLMENT_API_PREFIX } from '../../../common/constants'; + +import { validateFilterKueryNode, validateKuery } from './filter_utils'; + +describe('ValidateFilterKueryNode validates real kueries through KueryNode', () => { + describe('Agent policies', () => { + it('Test 1 - search by data_output_id', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + indexMapping: AGENT_POLICY_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.data_output_id', + type: 'ingest-agent-policies', + }, + ]); + }); + + it('Test 2 - search by inactivity timeout', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.inactivity_timeout:*` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + indexMapping: AGENT_POLICY_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.inactivity_timeout', + type: 'ingest-agent-policies', + }, + ]); + }); + + it('Test 3 - complex query', async () => { + const validationObject = validateFilterKueryNode({ + astFilter: esKuery.fromKueryExpression( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:some_id or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:*)` + ), + types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + indexMapping: AGENT_POLICY_MAPPINGS, + storeValue: true, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.download_source_id', + type: 'ingest-agent-policies', + }, + { + astPath: 'arguments.1.arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.download_source_id', + type: 'ingest-agent-policies', + }, + ]); + }); + + it('Test 4', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id: test_id or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + indexMapping: AGENT_POLICY_MAPPINGS, + storeValue: true, + }); + + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.data_output_id', + type: 'ingest-agent-policies', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.monitoring_output_id', + type: 'ingest-agent-policies', + }, + { + astPath: 'arguments.2.arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'ingest-agent-policies.data_output_id', + type: 'ingest-agent-policies', + }, + ]); + }); + + it('Test 5 - returns error if the attribute does not exist', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.package_policies:test_id_1 or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.package_policies:test_id_2` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + indexMapping: AGENT_POLICY_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: + "This key 'ingest-agent-policies.package_policies' does NOT exist in ingest-agent-policies saved object index patterns", + isSavedObjectAttr: false, + key: 'ingest-agent-policies.package_policies', + type: 'ingest-agent-policies', + }, + { + astPath: 'arguments.1', + error: + "This key 'ingest-agent-policies.package_policies' does NOT exist in ingest-agent-policies saved object index patterns", + isSavedObjectAttr: false, + key: 'ingest-agent-policies.package_policies', + type: 'ingest-agent-policies', + }, + ]); + }); + }); + + describe('Package policies', () => { + it('Search by package name', async () => { + const astFilter = esKuery.fromKueryExpression( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.attributes.package.name:packageName` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + indexMapping: PACKAGE_POLICIES_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'ingest-package-policies.attributes.package.name', + type: 'ingest-package-policies', + }, + ]); + }); + + it('It fails if the kuery is not normalized', async () => { + const astFilter = esKuery.fromKueryExpression( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:packageName` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + indexMapping: PACKAGE_POLICIES_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: + "This key 'ingest-package-policies.package.name' does NOT match the filter proposition SavedObjectType.attributes.key", + isSavedObjectAttr: false, + key: 'ingest-package-policies.package.name', + type: 'ingest-package-policies', + }, + ]); + }); + + it('It does not check attributes if skipNormalization is passed', async () => { + const astFilter = esKuery.fromKueryExpression( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:packageName` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + indexMapping: PACKAGE_POLICIES_MAPPINGS, + storeValue: true, + skipNormalization: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'ingest-package-policies.package.name', + type: 'ingest-package-policies', + }, + ]); + }); + + it('Allows passing query without SO', async () => { + const astFilter = esKuery.fromKueryExpression(`package.name:packageName`); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + indexMapping: PACKAGE_POLICIES_MAPPINGS, + storeValue: true, + skipNormalization: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'package.name', + type: 'package', + }, + ]); + }); + }); + + describe('Agents', () => { + it('Search policy id', async () => { + const astFilter = esKuery.fromKueryExpression(`${AGENTS_PREFIX}.policy_id: "policy_id"`); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENTS_PREFIX], + indexMapping: AGENT_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.policy_id', + type: 'fleet-agents', + }, + ]); + }); + + it('Search by multiple ids', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENTS_PREFIX}.attributes.agent.id : (id_1 or id_2)` + ); + + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENTS_PREFIX], + indexMapping: AGENT_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: false, + key: 'fleet-agents.attributes.agent.id', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: false, + key: 'fleet-agents.attributes.agent.id', + type: 'fleet-agents', + }, + ]); + }); + + it('Search agent by policy Id and enrolled since more than 10m', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENTS_PREFIX}.policy_id: "policyId" and not (_exists_: "${AGENTS_PREFIX}.unenrolled_at") and ${AGENTS_PREFIX}.enrolled_at >= now-10m` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENTS_PREFIX], + indexMapping: AGENT_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.policy_id', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1.arguments.0', + error: null, + isSavedObjectAttr: false, + key: '_exists_', + type: 'searchTerm', + }, + { + astPath: 'arguments.2', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.enrolled_at', + type: 'fleet-agents', + }, + ]); + }); + + it('Search agent by multiple policy Ids and tags', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENTS_PREFIX}.policy_id: (policyId1 or policyId2) and ${AGENTS_PREFIX}.tags: (tag1)` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENTS_PREFIX], + indexMapping: AGENT_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0.arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.policy_id', + type: 'fleet-agents', + }, + { + astPath: 'arguments.0.arguments.1', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.policy_id', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.tags', + type: 'fleet-agents', + }, + ]); + }); + + it('Search agent by multiple tags', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENTS_PREFIX}.tags: (tag1 or tag2 or tag3)` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENTS_PREFIX], + indexMapping: AGENT_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.tags', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.tags', + type: 'fleet-agents', + }, + { + astPath: 'arguments.2', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.tags', + type: 'fleet-agents', + }, + ]); + }); + + it('Returns error if kuery is passed without a reference to the index', async () => { + const astFilter = esKuery.fromKueryExpression( + `${AGENTS_PREFIX}.status:online or (${AGENTS_PREFIX}.status:updating or ${AGENTS_PREFIX}.status:unenrolling or ${AGENTS_PREFIX}.status:enrolling)` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [AGENTS_PREFIX], + indexMapping: AGENT_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.status', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1.arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.status', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1.arguments.1', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.status', + type: 'fleet-agents', + }, + { + astPath: 'arguments.1.arguments.2', + error: null, + isSavedObjectAttr: true, + key: 'fleet-agents.status', + type: 'fleet-agents', + }, + ]); + }); + }); + + describe('Enrollment Api keys', () => { + it('Search by policy id', async () => { + const astFilter = esKuery.fromKueryExpression( + `${FLEET_ENROLLMENT_API_PREFIX}.policy_id: policyId1` + ); + const validationObject = validateFilterKueryNode({ + astFilter, + types: [FLEET_ENROLLMENT_API_PREFIX], + indexMapping: ENROLLMENT_API_KEY_MAPPINGS, + storeValue: true, + }); + expect(validationObject).toEqual([ + { + astPath: 'arguments.0', + error: null, + isSavedObjectAttr: true, + key: 'fleet-enrollment-api-keys.policy_id', + type: 'fleet-enrollment-api-keys', + }, + ]); + }); + }); +}); + +describe('validateKuery validates real kueries', () => { + describe('Agent policies', () => { + it('Search by data_output_id', async () => { + const validationObj = validateKuery( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id`, + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by data_output_id without SO wrapping', async () => { + const validationObj = validateKuery( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id`, + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by name', async () => { + const validationObj = validateKuery( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.name: test_id`, + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Invalid kuery', async () => { + const validationObj = validateKuery( + 'test%3A', + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(false); + expect(validationObj?.error).toContain( + `KQLSyntaxError: The key is empty and needs to be wrapped by a saved object type like ingest-agent-policies` + ); + }); + + it('Kuery with non existent parameter wrapped by SO', async () => { + const validationObj = validateKuery( + `${AGENT_POLICY_SAVED_OBJECT_TYPE}.non_existent_parameter: 'test_id'`, + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(false); + expect(validationObj?.error).toContain( + `KQLSyntaxError: This key 'ingest-agent-policies.non_existent_parameter' does NOT exist in ingest-agent-policies saved object index patterns` + ); + }); + + it('Kuery with non existent parameter', async () => { + const validationObj = validateKuery( + `non_existent_parameter: 'test_id'`, + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(false); + expect(validationObj?.error).toContain( + `KQLSyntaxError: This type 'non_existent_parameter' is not allowed` + ); + }); + }); + + describe('Agents', () => { + it('Test 1 - search policy id', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.policy_id: "policy_id"`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Test 2 - status kuery without SO wrapping', async () => { + const validationObj = validateKuery( + `status:online or (status:updating or status:unenrolling or status:enrolling)`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Test 3 - status kuery with SO wrapping', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.status:online or (${AGENTS_PREFIX}.status:updating or ${AGENTS_PREFIX}.status:unenrolling or ${AGENTS_PREFIX}.status:enrolling)`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Test 4 - valid kuery without SO wrapping', async () => { + const validationObj = validateKuery( + `local_metadata.elastic.agent.version : "8.6.0"`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by multiple agent ids', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.agent.id : (id_1 or id_2)`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by complex query', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.policy_id: "policyId" and not (_exists_: "${AGENTS_PREFIX}.unenrolled_at") and ${AGENTS_PREFIX}.enrolled_at >= now-10m`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by complex query without SO wrapping', async () => { + const validationObj = validateKuery( + `policy_id: "policyId" and not (_exists_: "unenrolled_at") and enrolled_at >= now-10m`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by tags', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.tags: (tag1 or tag2 or tag3)`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by hostname keyword and status', async () => { + const validationObj = validateKuery( + `(${AGENTS_PREFIX}.local_metadata.host.hostname.keyword:test) and (${AGENTS_PREFIX}.status:online)`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by deeply nested fields', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.local_metadata.os.version.keyword: test`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by deeply nested fields in local_metadata', async () => { + const validationObj = validateKuery( + `${AGENTS_PREFIX}.local_metadata.elastic.agent.build.original.keyword: test`, + [AGENTS_PREFIX], + AGENT_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + }); + + describe('Package policies', () => { + it('Search by package name without SO', async () => { + const validationObj = validateKuery( + `package.name:fleet_server`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by package name', async () => { + const validationObj = validateKuery( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:fleet_server`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by package name works with attributes if skipNormalization is not passed', async () => { + const validationObj = validateKuery( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.attributes.package.name:packageName`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by name and version', async () => { + const validationObj = validateKuery( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: "TestName" AND ${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.version: "8.8.0"`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Invalid search by nested wrong parameter', async () => { + const validationObj = validateKuery( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.is_managed:packageName`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(false); + expect(validationObj?.error).toEqual( + `KQLSyntaxError: This key 'ingest-package-policies.package.is_managed' does NOT exist in ingest-package-policies saved object index patterns` + ); + }); + + it('invalid search by nested wrong parameter - without wrapped SO', async () => { + const validationObj = validateKuery( + `package.is_managed:packageName`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(false); + expect(validationObj?.error).toEqual( + `KQLSyntaxError: This key 'package.is_managed' does NOT exist in ingest-package-policies saved object index patterns` + ); + }); + + it('Invalid search by non existent parameter', async () => { + const validationObj = validateKuery( + `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.non_existent_parameter:packageName`, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS + ); + expect(validationObj?.isValid).toEqual(false); + expect(validationObj?.error).toEqual( + `KQLSyntaxError: This key 'ingest-package-policies.non_existent_parameter' does NOT exist in ingest-package-policies saved object index patterns` + ); + }); + }); + + describe('Enrollment keys', () => { + it('Search by policy id without SO name', async () => { + const validationObj = validateKuery( + `policy_id: policyId1`, + [FLEET_ENROLLMENT_API_PREFIX], + ENROLLMENT_API_KEY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + + it('Search by policy id', async () => { + const validationObj = validateKuery( + `${FLEET_ENROLLMENT_API_PREFIX}.policy_id: policyId1`, + [FLEET_ENROLLMENT_API_PREFIX], + ENROLLMENT_API_KEY_MAPPINGS, + true + ); + expect(validationObj?.isValid).toEqual(true); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/agents/action_status.ts b/x-pack/plugins/fleet/server/services/agents/action_status.ts index 2872a1671a8f3..403ddf02a034d 100644 --- a/x-pack/plugins/fleet/server/services/agents/action_status.ts +++ b/x-pack/plugins/fleet/server/services/agents/action_status.ts @@ -13,8 +13,8 @@ import type { FleetServerAgentAction, ActionStatus, ActionErrorResult, - ListWithKuery, AgentActionType, + ActionStatusOptions, } from '../../types'; import { AGENT_ACTIONS_INDEX, @@ -29,7 +29,7 @@ import { appContextService } from '..'; */ export async function getActionStatuses( esClient: ElasticsearchClient, - options: ListWithKuery & { errorSize: number } + options: ActionStatusOptions ): Promise { const actions = await _getActions(esClient, options); const cancelledActions = await getCancelledActions(esClient); @@ -218,7 +218,7 @@ export async function getCancelledActions( async function _getActions( esClient: ElasticsearchClient, - options: ListWithKuery + options: ActionStatusOptions ): Promise { const res = await esClient.search({ index: AGENT_ACTIONS_INDEX, diff --git a/x-pack/plugins/fleet/server/services/saved_object.ts b/x-pack/plugins/fleet/server/services/saved_object.ts index 43ec734edceb1..0a7a74be70529 100644 --- a/x-pack/plugins/fleet/server/services/saved_object.ts +++ b/x-pack/plugins/fleet/server/services/saved_object.ts @@ -5,11 +5,6 @@ * 2.0. */ -import type { SavedObjectsClientContract, SavedObjectsFindResponse } from '@kbn/core/server'; - -import { SO_SEARCH_LIMIT } from '../constants'; -import type { ListWithKuery } from '../types'; - /** * Escape a value with double quote to use with saved object search * Example: escapeSearchQueryPhrase('-test"toto') => '"-test\"toto""' @@ -29,53 +24,3 @@ export const normalizeKuery = (savedObjectType: string, kuery: string): string = `${savedObjectType}.attributes.` ); }; - -// Like saved object client `.find()`, but ignores `page` and `perPage` parameters and -// returns *all* matching saved objects by collocating results from all `.find` pages. -// This function actually doesn't offer any additional benefits over `.find()` for now -// due to SO client limitations (see comments below), so is a placeholder for when SO -// client is improved. -export const findAllSOs = async ( - soClient: SavedObjectsClientContract, - options: Omit & { - type: string; - } -): Promise, 'saved_objects' | 'total'>> => { - const { type, sortField, sortOrder, kuery } = options; - let savedObjectResults: SavedObjectsFindResponse['saved_objects'] = []; - - const query = { - type, - sortField, - sortOrder, - filter: kuery, - page: 1, - perPage: SO_SEARCH_LIMIT, - }; - - const { saved_objects: initialSOs, total } = await soClient.find(query); - - savedObjectResults = initialSOs; - - // The saved object client can't actually page through more than the first 10,000 - // results, due to the same `index.max_result_window` constraint. The commented out - // code below is an example of paging through rest of results when the SO client - // offers that kind of support. - // if (total > searchLimit) { - // const remainingPages = Math.ceil((total - searchLimit) / searchLimit); - // for (let currentPage = 2; currentPage <= remainingPages + 1; currentPage++) { - // const { saved_objects: currentPageSavedObjects } = await soClient.find({ - // ...query, - // page: currentPage, - // }); - // if (currentPageSavedObjects.length) { - // savedObjectResults = savedObjectResults.concat(currentPageSavedObjects); - // } - // } - // } - - return { - saved_objects: savedObjectResults, - total, - }; -}; diff --git a/x-pack/plugins/fleet/server/services/setup.test.ts b/x-pack/plugins/fleet/server/services/setup.test.ts index 15dccb15053ab..56b398c17fafb 100644 --- a/x-pack/plugins/fleet/server/services/setup.test.ts +++ b/x-pack/plugins/fleet/server/services/setup.test.ts @@ -29,7 +29,6 @@ jest.mock('./setup/upgrade_package_install_version'); jest.mock('./epm/elasticsearch/template/install', () => { return { ...jest.requireActual('./epm/elasticsearch/template/install'), - ensureFileUploadWriteIndices: jest.fn(), }; }); diff --git a/x-pack/plugins/fleet/server/services/setup.ts b/x-pack/plugins/fleet/server/services/setup.ts index 92d8f8fb37dda..d83e1424c54c4 100644 --- a/x-pack/plugins/fleet/server/services/setup.ts +++ b/x-pack/plugins/fleet/server/services/setup.ts @@ -53,6 +53,7 @@ import { ensurePreconfiguredFleetServerHosts, getPreconfiguredFleetServerHostFromConfig, } from './preconfiguration/fleet_server_host'; +import { cleanUpOldFileIndices } from './setup/clean_old_fleet_indices'; export interface SetupStatus { isInitialized: boolean; @@ -75,6 +76,8 @@ async function createSetupSideEffects( const logger = appContextService.getLogger(); logger.info('Beginning fleet setup'); + await cleanUpOldFileIndices(esClient, logger); + await ensureFleetDirectories(); const { agentPolicies: policiesOrUndefined, packages: packagesOrUndefined } = diff --git a/x-pack/plugins/fleet/server/services/setup/clean_old_fleet_indices.test.tsx b/x-pack/plugins/fleet/server/services/setup/clean_old_fleet_indices.test.tsx new file mode 100644 index 0000000000000..e98441b7043e4 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/setup/clean_old_fleet_indices.test.tsx @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; + +import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; + +import { cleanUpOldFileIndices } from './clean_old_fleet_indices'; + +describe('cleanUpOldFileIndices', () => { + it('should clean old indices and old index templates', async () => { + const logger = loggingSystemMock.createLogger(); + const esClient = elasticsearchServiceMock.createInternalClient(); + esClient.indices.get.mockResolvedValueOnce({ + '.fleet-files-agent': {}, + '.fleet-files-test': {}, + }); + esClient.indices.get.mockImplementation(({ index }) => { + if (index === '.fleet-files-agent') { + return { + '.fleet-files-agent': {}, + '.fleet-files-test': {}, + } as any; + } + return {}; + }); + + await cleanUpOldFileIndices(esClient, logger); + + expect(esClient.indices.delete).toBeCalledTimes(1); + expect(esClient.indices.delete).toBeCalledWith( + expect.objectContaining({ + index: '.fleet-files-agent,.fleet-files-test', + }) + ); + + expect(esClient.indices.deleteIndexTemplate).toBeCalledTimes(1); + expect(esClient.indices.deleteIndexTemplate).toBeCalledWith( + expect.objectContaining({ + name: '.fleet-files,.fleet-file-data,.fleet-filedelivery-data,.fleet-filedelivery-meta', + }) + ); + expect(logger.warn).not.toBeCalled(); + }); + + it('should log a warning and not throw if an unexpected error happen', async () => { + const logger = loggingSystemMock.createLogger(); + const esClient = elasticsearchServiceMock.createInternalClient(); + esClient.indices.get.mockRejectedValue(new Error('test error')); + + await cleanUpOldFileIndices(esClient, logger); + + expect(logger.warn).toBeCalledWith('Old fleet indices cleanup failed: test error'); + }); + + it('should handle 404 while deleting index template', async () => { + const logger = loggingSystemMock.createLogger(); + const esClient = elasticsearchServiceMock.createInternalClient(); + esClient.indices.get.mockResolvedValue({}); + esClient.indices.deleteIndexTemplate.mockRejectedValue({ + meta: { + statusCode: 404, + }, + }); + + await cleanUpOldFileIndices(esClient, logger); + + expect(esClient.indices.deleteIndexTemplate).toBeCalledTimes(1); + expect(logger.warn).not.toBeCalled(); + }); + + it('should handle 404 when deleting old index', async () => { + const logger = loggingSystemMock.createLogger(); + const esClient = elasticsearchServiceMock.createInternalClient(); + esClient.indices.get.mockResolvedValueOnce({ + '.fleet-files-agent': {}, + '.fleet-files-test': {}, + }); + esClient.indices.get.mockImplementation(({ index }) => { + if (index === '.fleet-files-agent') { + return { + '.fleet-files-agent': {}, + '.fleet-files-test': {}, + } as any; + } + return {}; + }); + + esClient.indices.delete.mockRejectedValue({ + meta: { + statusCode: 404, + }, + }); + + await cleanUpOldFileIndices(esClient, logger); + + expect(esClient.indices.delete).toBeCalledTimes(1); + expect(logger.warn).not.toBeCalled(); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/setup/clean_old_fleet_indices.tsx b/x-pack/plugins/fleet/server/services/setup/clean_old_fleet_indices.tsx new file mode 100644 index 0000000000000..856e3543cd962 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/setup/clean_old_fleet_indices.tsx @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import pMap from 'p-map'; + +const INDICES_TO_CLEAN = [ + '.fleet-files-*', + '.fleet-file-data-*', + '.fleet-filedelivery-data-*', + '.fleet-filedelivery-meta-*', +]; + +const INDEX_TEMPLATE_TO_CLEAN = [ + '.fleet-files', + '.fleet-file-data', + '.fleet-filedelivery-data', + '.fleet-filedelivery-meta', +]; + +/** + * In 8.10 upload feature moved from using index to datastreams, this function allows to clean those old indices. + */ +export async function cleanUpOldFileIndices(esClient: ElasticsearchClient, logger: Logger) { + try { + // Clean indices + await pMap( + INDICES_TO_CLEAN, + async (indiceToClean) => { + const res = await esClient.indices.get({ + index: indiceToClean, + }); + const indices = Object.keys(res); + if (indices.length) { + await esClient.indices + .delete({ + index: indices.join(','), + }) + .catch((err) => { + // Skip not found errors + if (err.meta?.statusCode !== 404) { + throw err; + } + }); + } + }, + { concurrency: 2 } + ); + await esClient.indices + .deleteIndexTemplate({ + name: INDEX_TEMPLATE_TO_CLEAN.join(','), + }) + .catch((err) => { + // Skip not found errors + if (err.meta?.statusCode !== 404) { + throw err; + } + }); + // Clean index template + } catch (err) { + logger.warn(`Old fleet indices cleanup failed: ${err.message}`); + } +} diff --git a/x-pack/plugins/fleet/server/types/index.tsx b/x-pack/plugins/fleet/server/types/index.tsx index d9c7ff9db74af..5144d48fbd6f8 100644 --- a/x-pack/plugins/fleet/server/types/index.tsx +++ b/x-pack/plugins/fleet/server/types/index.tsx @@ -89,6 +89,7 @@ export type { PackageListItem, PackageList, InstallationInfo, + ActionStatusOptions, } from '../../common/types'; export { ElasticsearchAssetType, KibanaAssetType, KibanaSavedObjectType } from '../../common/types'; export { dataTypes } from '../../common/constants'; diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts index 2ea1a26117481..e90fda99cdff9 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent.ts @@ -9,16 +9,27 @@ import { schema } from '@kbn/config-schema'; import moment from 'moment'; import semverIsValid from 'semver/functions/valid'; -import { SO_SEARCH_LIMIT } from '../../constants'; +import { SO_SEARCH_LIMIT, AGENTS_PREFIX, AGENT_MAPPINGS } from '../../constants'; import { NewAgentActionSchema } from '../models'; +import { validateKuery } from '../../routes/utils/filter_utils'; + export const GetAgentsRequestSchema = { query: schema.object( { page: schema.number({ defaultValue: 1 }), perPage: schema.number({ defaultValue: 20 }), - kuery: schema.maybe(schema.string()), + kuery: schema.maybe( + schema.string({ + validate: (value: string) => { + const validationObj = validateKuery(value, [AGENTS_PREFIX], AGENT_MAPPINGS, true); + if (validationObj?.error) { + return validationObj?.error; + } + }, + }) + ), showInactive: schema.boolean({ defaultValue: false }), withMetrics: schema.boolean({ defaultValue: false }), showUpgradeable: schema.boolean({ defaultValue: false }), @@ -206,7 +217,16 @@ export const PostBulkUpdateAgentTagsRequestSchema = { export const GetAgentStatusRequestSchema = { query: schema.object({ policyId: schema.maybe(schema.string()), - kuery: schema.maybe(schema.string()), + kuery: schema.maybe( + schema.string({ + validate: (value: string) => { + const validationObj = validateKuery(value, [AGENTS_PREFIX], AGENT_MAPPINGS, true); + if (validationObj?.error) { + return validationObj?.error; + } + }, + }) + ), }), }; @@ -221,7 +241,6 @@ export const GetActionStatusRequestSchema = { query: schema.object({ page: schema.number({ defaultValue: 0 }), perPage: schema.number({ defaultValue: 20 }), - kuery: schema.maybe(schema.string()), errorSize: schema.number({ defaultValue: 5 }), }), }; diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts index 25275ed998c58..88cc6df372c11 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts @@ -9,10 +9,34 @@ import { schema } from '@kbn/config-schema'; import { NewAgentPolicySchema } from '../models'; -import { ListWithKuerySchema, BulkRequestBodySchema } from './common'; +import { AGENT_POLICY_SAVED_OBJECT_TYPE, AGENT_POLICY_MAPPINGS } from '../../constants'; + +import { validateKuery } from '../../routes/utils/filter_utils'; + +import { BulkRequestBodySchema } from './common'; export const GetAgentPoliciesRequestSchema = { - query: ListWithKuerySchema.extends({ + query: schema.object({ + page: schema.maybe(schema.number({ defaultValue: 1 })), + perPage: schema.maybe(schema.number({ defaultValue: 20 })), + sortField: schema.maybe(schema.string()), + sortOrder: schema.maybe(schema.oneOf([schema.literal('desc'), schema.literal('asc')])), + showUpgradeable: schema.maybe(schema.boolean()), + kuery: schema.maybe( + schema.string({ + validate: (value: string) => { + const validationObj = validateKuery( + value, + [AGENT_POLICY_SAVED_OBJECT_TYPE], + AGENT_POLICY_MAPPINGS, + true + ); + if (validationObj?.error) { + return validationObj?.error; + } + }, + }) + ), noAgentCount: schema.maybe(schema.boolean()), full: schema.maybe(schema.boolean()), }), diff --git a/x-pack/plugins/fleet/server/types/rest_spec/common.ts b/x-pack/plugins/fleet/server/types/rest_spec/common.ts index 884e5922747b2..0c5f16ff87f90 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/common.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/common.ts @@ -8,9 +8,6 @@ import { schema } from '@kbn/config-schema'; import type { TypeOf } from '@kbn/config-schema'; -/** - * @deprecated - */ export const ListWithKuerySchema = schema.object({ page: schema.maybe(schema.number({ defaultValue: 1 })), perPage: schema.maybe(schema.number({ defaultValue: 20 })), diff --git a/x-pack/plugins/fleet/server/types/rest_spec/enrollment_api_key.ts b/x-pack/plugins/fleet/server/types/rest_spec/enrollment_api_key.ts index 9294736999986..d7bfbb289620a 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/enrollment_api_key.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/enrollment_api_key.ts @@ -7,11 +7,31 @@ import { schema } from '@kbn/config-schema'; +import { ENROLLMENT_API_KEY_MAPPINGS } from '../../constants'; + +import { FLEET_ENROLLMENT_API_PREFIX } from '../../../common/constants'; + +import { validateKuery } from '../../routes/utils/filter_utils'; + export const GetEnrollmentAPIKeysRequestSchema = { query: schema.object({ page: schema.number({ defaultValue: 1 }), perPage: schema.number({ defaultValue: 20 }), - kuery: schema.maybe(schema.string()), + kuery: schema.maybe( + schema.string({ + validate: (value: string) => { + const validationObj = validateKuery( + value, + [FLEET_ENROLLMENT_API_PREFIX], + ENROLLMENT_API_KEY_MAPPINGS, + true + ); + if (validationObj?.error) { + return validationObj?.error; + } + }, + }) + ), }), }; diff --git a/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts b/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts index 1538f380fb7b4..88b4452a5fe7a 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/package_policy.ts @@ -15,10 +15,34 @@ import { import { inputsFormat } from '../../../common/constants'; -import { ListWithKuerySchema, BulkRequestBodySchema } from './common'; +import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICIES_MAPPINGS } from '../../constants'; + +import { validateKuery } from '../../routes/utils/filter_utils'; + +import { BulkRequestBodySchema } from './common'; export const GetPackagePoliciesRequestSchema = { - query: ListWithKuerySchema.extends({ + query: schema.object({ + page: schema.maybe(schema.number({ defaultValue: 1 })), + perPage: schema.maybe(schema.number({ defaultValue: 20 })), + sortField: schema.maybe(schema.string()), + sortOrder: schema.maybe(schema.oneOf([schema.literal('desc'), schema.literal('asc')])), + showUpgradeable: schema.maybe(schema.boolean()), + kuery: schema.maybe( + schema.string({ + validate: (value: string) => { + const validationObj = validateKuery( + value, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE], + PACKAGE_POLICIES_MAPPINGS, + true + ); + if (validationObj?.error) { + return validationObj?.error; + } + }, + }) + ), format: schema.maybe( schema.oneOf([schema.literal(inputsFormat.Simplified), schema.literal(inputsFormat.Legacy)]) ), diff --git a/x-pack/plugins/fleet/server/types/rest_spec/tags.ts b/x-pack/plugins/fleet/server/types/rest_spec/tags.ts index 2b454647296eb..beb646ccec9d5 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/tags.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/tags.ts @@ -7,9 +7,22 @@ import { schema } from '@kbn/config-schema'; +import { validateKuery } from '../../routes/utils/filter_utils'; + +import { AGENTS_PREFIX, AGENT_MAPPINGS } from '../../constants'; + export const GetTagsRequestSchema = { query: schema.object({ - kuery: schema.maybe(schema.string()), + kuery: schema.maybe( + schema.string({ + validate: (value: string) => { + const validationObj = validateKuery(value, [AGENTS_PREFIX], AGENT_MAPPINGS, true); + if (validationObj?.error) { + return validationObj?.error; + } + }, + }) + ), showInactive: schema.boolean({ defaultValue: false }), }), }; diff --git a/x-pack/plugins/fleet/tsconfig.json b/x-pack/plugins/fleet/tsconfig.json index 4e8ec7de3fcc7..82b22c90779b7 100644 --- a/x-pack/plugins/fleet/tsconfig.json +++ b/x-pack/plugins/fleet/tsconfig.json @@ -99,5 +99,6 @@ "@kbn/shared-ux-file-types", "@kbn/core-http-router-server-mocks", "@kbn/core-application-browser", + "@kbn/core-saved-objects-base-server-internal", ] } diff --git a/x-pack/plugins/lens/common/expressions/format_column/format_column.test.ts b/x-pack/plugins/lens/common/expressions/format_column/format_column.test.ts index ff90e1d40d30c..ac1cf6ef1f940 100644 --- a/x-pack/plugins/lens/common/expressions/format_column/format_column.test.ts +++ b/x-pack/plugins/lens/common/expressions/format_column/format_column.test.ts @@ -326,4 +326,65 @@ describe('format_column', () => { }, }); }); + + it('does translate the duration params into native parameters', async () => { + const result = await fn(datatable, { + columnId: 'test', + format: 'duration', + fromUnit: 'seconds', + toUnit: 'asHours', + compact: true, + decimals: 2, + }); + + expect(result.columns[0].meta).toEqual({ + type: 'number', + params: { + id: 'duration', + params: { + pattern: '', + formatOverride: true, + inputFormat: 'seconds', + outputFormat: 'asHours', + outputPrecision: 2, + useShortSuffix: true, + showSuffix: true, + includeSpaceWithSuffix: true, + }, + }, + }); + }); + + it('should apply custom suffix to duration format when configured', async () => { + const result = await fn(datatable, { + columnId: 'test', + format: 'duration', + fromUnit: 'seconds', + toUnit: 'asHours', + compact: true, + decimals: 2, + suffix: ' on Earth', + }); + expect(result.columns[0].meta).toEqual({ + type: 'number', + params: { + id: 'suffix', + params: { + suffixString: ' on Earth', + id: 'duration', + formatOverride: true, + params: { + pattern: '', + formatOverride: true, + inputFormat: 'seconds', + outputFormat: 'asHours', + outputPrecision: 2, + useShortSuffix: true, + showSuffix: true, + includeSpaceWithSuffix: true, + }, + }, + }, + }); + }); }); diff --git a/x-pack/plugins/lens/common/expressions/format_column/format_column_fn.ts b/x-pack/plugins/lens/common/expressions/format_column/format_column_fn.ts index 84e83aa2a9d18..e99aaa7577024 100644 --- a/x-pack/plugins/lens/common/expressions/format_column/format_column_fn.ts +++ b/x-pack/plugins/lens/common/expressions/format_column/format_column_fn.ts @@ -42,7 +42,16 @@ function getPatternFromFormat( export const formatColumnFn: FormatColumnExpressionFunction['fn'] = ( input, - { format, columnId, decimals, compact, suffix, pattern, parentFormat }: FormatColumnArgs + { + format, + columnId, + decimals, + compact, + suffix, + pattern, + parentFormat, + ...otherArgs + }: FormatColumnArgs ) => ({ ...input, columns: input.columns @@ -56,6 +65,12 @@ export const formatColumnFn: FormatColumnExpressionFunction['fn'] = ( params: { pattern: getPatternFromFormat(format, decimals, compact, pattern), formatOverride: true, + ...supportedFormats[format].translateToFormatParams?.({ + decimals, + compact, + suffix, + ...otherArgs, + }), }, }; return withParams(col, serializedFormat as Record); @@ -80,6 +95,12 @@ export const formatColumnFn: FormatColumnExpressionFunction['fn'] = ( const customParams = { pattern: getPatternFromFormat(format, decimals, compact, pattern), formatOverride: true, + ...supportedFormats[format].translateToFormatParams?.({ + decimals, + compact, + suffix, + ...otherArgs, + }), }; // Some parent formatters are multi-fields and wrap the custom format into a "paramsPerField" // property. Here the format is passed to this property to make it work properly diff --git a/x-pack/plugins/lens/common/expressions/format_column/index.ts b/x-pack/plugins/lens/common/expressions/format_column/index.ts index 7acbe3237c0e8..7cfb5e8afed92 100644 --- a/x-pack/plugins/lens/common/expressions/format_column/index.ts +++ b/x-pack/plugins/lens/common/expressions/format_column/index.ts @@ -15,6 +15,8 @@ export interface FormatColumnArgs { compact?: boolean; pattern?: string; parentFormat?: string; + fromUnit?: string; + toUnit?: string; } export const formatColumn: FormatColumnExpressionFunction = { @@ -52,6 +54,14 @@ export const formatColumn: FormatColumnExpressionFunction = { types: ['string'], help: '', }, + fromUnit: { + types: ['string'], + help: '', + }, + toUnit: { + types: ['string'], + help: '', + }, }, inputTypes: ['datatable'], async fn(...args) { diff --git a/x-pack/plugins/lens/common/expressions/format_column/supported_formats.ts b/x-pack/plugins/lens/common/expressions/format_column/supported_formats.ts index 9c1ef439bad31..b13b9348577d2 100644 --- a/x-pack/plugins/lens/common/expressions/format_column/supported_formats.ts +++ b/x-pack/plugins/lens/common/expressions/format_column/supported_formats.ts @@ -5,9 +5,21 @@ * 2.0. */ +import { + DEFAULT_DURATION_INPUT_FORMAT, + DEFAULT_DURATION_OUTPUT_FORMAT, +} from '@kbn/field-formats-plugin/common'; +import type { FormatColumnArgs } from '.'; + export const supportedFormats: Record< string, - { decimalsToPattern: (decimals?: number, compact?: boolean) => string; formatId: string } + { + formatId: string; + decimalsToPattern: (decimals?: number, compact?: boolean) => string; + translateToFormatParams?: ( + params: Omit + ) => Record; + } > = { number: { formatId: 'number', @@ -45,6 +57,20 @@ export const supportedFormats: Record< return `0,0.${'0'.repeat(decimals)}bitd`; }, }, + duration: { + formatId: 'duration', + decimalsToPattern: () => '', + translateToFormatParams: (params) => { + return { + inputFormat: params.fromUnit || DEFAULT_DURATION_INPUT_FORMAT.kind, + outputFormat: params.toUnit || DEFAULT_DURATION_OUTPUT_FORMAT.method, + outputPrecision: params.decimals, + useShortSuffix: Boolean(params.compact), + showSuffix: true, + includeSpaceWithSuffix: true, + }; + }, + }, custom: { formatId: 'custom', decimalsToPattern: () => '', diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.test.tsx index 81d6040abefda..af45608665b0c 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.test.tsx @@ -14,7 +14,7 @@ import { LensAppServices } from '../../../app_plugin/types'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { I18nProvider } from '@kbn/i18n-react'; import { coreMock } from '@kbn/core/public/mocks'; -import { EuiFieldNumber } from '@elastic/eui'; +import { EuiComboBox, EuiFieldNumber } from '@elastic/eui'; jest.mock('lodash', () => { const original = jest.requireActual('lodash'); @@ -106,10 +106,10 @@ describe('FormatSelector', () => { }); expect(props.onChange).toBeCalledWith({ id: 'bytes', params: { decimals: 0 } }); }); - it('updates the suffix', async () => { + it('updates the suffix', () => { const props = getDefaultProps(); const component = mountWithServices(); - await act(async () => { + act(() => { component .find('[data-test-subj="indexPattern-dimension-formatSuffix"]') .last() @@ -120,4 +120,55 @@ describe('FormatSelector', () => { component.update(); expect(props.onChange).toBeCalledWith({ id: 'bytes', params: { suffix: 'GB' } }); }); + + describe('Duration', () => { + it('disables the decimals and compact controls for humanize approximate output', () => { + const originalProps = getDefaultProps(); + let component = mountWithServices( + + ); + + expect( + component + .find('[data-test-subj="indexPattern-dimension-formatDecimals"]') + .last() + .prop('disabled') + ).toBe(true); + expect( + component + .find('[data-test-subj="lns-indexpattern-dimension-formatCompact"]') + .first() + .prop('disabled') + ).toBe(true); + + act(() => { + component + .find('[data-test-subj="indexPattern-dimension-duration-end"]') + .find(EuiComboBox) + .prop('onChange')!([{ label: 'Hours', value: 'asHours' }]); + }); + component = component.update(); + + expect( + component + .find('[data-test-subj="indexPattern-dimension-formatDecimals"]') + .last() + .prop('disabled') + ).toBe(false); + expect( + component + .find('[data-test-subj="lns-indexpattern-dimension-formatCompact"]') + .first() + .prop('disabled') + ).toBe(false); + }); + }); }); diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.tsx index af0645a0c4c29..e233cb3cf7f21 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/format_selector.tsx @@ -16,35 +16,52 @@ import { EuiSwitch, EuiCode, } from '@elastic/eui'; -import { useDebouncedValue } from '@kbn/visualization-ui-components'; +import { useDebouncedValue, TooltipWrapper } from '@kbn/visualization-ui-components'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { FORMATS_UI_SETTINGS } from '@kbn/field-formats-plugin/common'; +import { + DEFAULT_DURATION_INPUT_FORMAT, + DEFAULT_DURATION_OUTPUT_FORMAT, + FORMATS_UI_SETTINGS, +} from '@kbn/field-formats-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; import { LensAppServices } from '../../../app_plugin/types'; import { GenericIndexPatternColumn } from '../form_based'; import { isColumnFormatted } from '../operations/definitions/helpers'; import { ValueFormatConfig } from '../operations/definitions/column_types'; +import { DurationRowInputs } from './formatting/duration_input'; const supportedFormats: Record< string, - { title: string; defaultDecimals?: number; supportsCompact: boolean } + { + title: string; + defaultDecimals?: number; + supportsCompact: boolean; + supportsDecimals: boolean; + supportsSuffix: boolean; + } > = { number: { title: i18n.translate('xpack.lens.indexPattern.numberFormatLabel', { defaultMessage: 'Number', }), + supportsDecimals: true, + supportsSuffix: true, supportsCompact: true, }, percent: { title: i18n.translate('xpack.lens.indexPattern.percentFormatLabel', { defaultMessage: 'Percent', }), + supportsDecimals: true, + supportsSuffix: true, supportsCompact: true, }, bytes: { title: i18n.translate('xpack.lens.indexPattern.bytesFormatLabel', { defaultMessage: 'Bytes (1024)', }), + supportsDecimals: true, + supportsSuffix: true, supportsCompact: false, }, bits: { @@ -52,13 +69,26 @@ const supportedFormats: Record< defaultMessage: 'Bits (1000)', }), defaultDecimals: 0, + supportsDecimals: true, + supportsSuffix: true, supportsCompact: false, }, + duration: { + title: i18n.translate('xpack.lens.indexPattern.durationLabel', { + defaultMessage: 'Duration', + }), + defaultDecimals: 0, + supportsDecimals: true, + supportsSuffix: true, + supportsCompact: true, + }, custom: { title: i18n.translate('xpack.lens.indexPattern.customFormatLabel', { defaultMessage: 'Custom format', }), defaultDecimals: 0, + supportsDecimals: false, + supportsSuffix: false, supportsCompact: false, }, }; @@ -164,6 +194,20 @@ export function FormatSelector(props: FormatSelectorProps) { onChange ); + const { setter: setDurationFrom, value: durationFrom } = useDebouncedInputforParam( + 'fromUnit' as const, + DEFAULT_DURATION_INPUT_FORMAT.kind, + currentFormat, + onChange + ); + + const { setter: setDurationTo, value: durationTo } = useDebouncedInputforParam( + 'toUnit' as const, + DEFAULT_DURATION_OUTPUT_FORMAT.method, + currentFormat, + onChange + ); + const selectedFormat = currentFormat?.id ? supportedFormats[currentFormat.id] : undefined; const stableOptions = useMemo( () => [ @@ -210,6 +254,8 @@ export function FormatSelector(props: FormatSelectorProps) { [currentFormat, selectedFormat?.title] ); + const approximatedFormat = currentFormat?.id === 'duration' && durationTo === 'humanize'; + return ( <> - {currentFormat && currentFormat.id !== 'custom' ? ( - <> - - { - const value = Number(e.currentTarget.value); - setDecimals(value); - const validatedValue = Math.min(RANGE_MAX, Math.max(RANGE_MIN, value)); - onChange({ - id: currentFormat.id, - params: { - ...currentFormat.params, - decimals: validatedValue, - }, - }); - }} - data-test-subj="indexPattern-dimension-formatDecimals" - compressed - fullWidth - prepend={decimalsLabel} - aria-label={decimalsLabel} - /> - - - { - setSuffix(e.currentTarget.value); - }} - data-test-subj="indexPattern-dimension-formatSuffix" - compressed - fullWidth - prepend={suffixLabel} - aria-label={suffixLabel} - /> - - ) : null} - {selectedFormat?.supportsCompact ? ( + {currentFormat && selectedFormat ? ( <> - - setCompact(!compact)} - data-test-subj="lns-indexpattern-dimension-formatCompact" - /> + {currentFormat?.id === 'duration' ? ( + <> + + + + ) : null} + {selectedFormat.supportsDecimals ? ( + <> + + + { + const value = Number(e.currentTarget.value); + setDecimals(value); + const validatedValue = Math.min(RANGE_MAX, Math.max(RANGE_MIN, value)); + onChange({ + id: currentFormat.id, + params: { + ...currentFormat.params, + decimals: validatedValue, + }, + }); + }} + data-test-subj="indexPattern-dimension-formatDecimals" + compressed + fullWidth + prepend={decimalsLabel} + aria-label={decimalsLabel} + disabled={approximatedFormat} + /> + + + ) : null} + {selectedFormat.supportsSuffix ? ( + <> + + { + setSuffix(e.currentTarget.value); + }} + data-test-subj="indexPattern-dimension-formatSuffix" + compressed + fullWidth + prepend={suffixLabel} + aria-label={suffixLabel} + /> + + ) : null} + {selectedFormat.supportsCompact ? ( + <> + + + setCompact(!compact)} + data-test-subj="lns-indexpattern-dimension-formatCompact" + disabled={approximatedFormat} + /> + + + ) : null} ) : null}
diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/formatting/duration_input.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/formatting/duration_input.tsx new file mode 100644 index 0000000000000..e5414af51f45a --- /dev/null +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/formatting/duration_input.tsx @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiComboBox, EuiSpacer } from '@elastic/eui'; +import { DURATION_INPUT_FORMATS, DURATION_OUTPUT_FORMATS } from '@kbn/field-formats-plugin/common'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; + +export const durationOutputOptions = DURATION_OUTPUT_FORMATS.map(({ text, method }) => ({ + label: text, + value: method, +})); +export const durationInputOptions = DURATION_INPUT_FORMATS.map(({ text, kind }) => ({ + label: text, + value: kind, +})); + +interface DurationInputProps { + testSubjLayout?: string; + testSubjStart?: string; + testSubjEnd?: string; + onStartChange: (newStartValue: string) => void; + onEndChange: (newEndValue: string) => void; + startValue: string | undefined; + endValue: string | undefined; +} + +function getSelectedOption( + inputValue: string, + list: Array<{ label: string; value: string }> +): Array<{ label: string; value: string }> { + const option = list.find(({ value }) => inputValue === value); + return option ? [option] : []; +} + +export const DurationRowInputs = ({ + testSubjLayout, + testSubjStart, + testSubjEnd, + startValue = 'milliseconds', + endValue = 'seconds', + onStartChange, + onEndChange, +}: DurationInputProps) => { + return ( + <> + onStartChange(newStartValue.value!)} + singleSelection={{ asPlainText: true }} + data-test-subj={testSubjStart} + compressed + /> + + onEndChange(newEndChange.value!)} + singleSelection={{ asPlainText: true }} + data-test-subj={testSubjEnd} + compressed + /> + + ); +}; diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/column_types.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/column_types.ts index e10955b3c54ba..971f952c73dc6 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/column_types.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/column_types.ts @@ -27,6 +27,8 @@ export interface ValueFormatConfig { suffix?: string; compact?: boolean; pattern?: string; + fromUnit?: string; + toUnit?: string; }; } diff --git a/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts b/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts index d28df1c3e5f9a..33bec4c23a1bf 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/to_expression.ts @@ -27,7 +27,7 @@ import { GenericIndexPatternColumn } from './form_based'; import { operationDefinitionMap } from './operations'; import { FormBasedPrivateState, FormBasedLayer } from './types'; import { DateHistogramIndexPatternColumn, RangeIndexPatternColumn } from './operations/definitions'; -import { FormattedIndexPatternColumn } from './operations/definitions/column_types'; +import type { FormattedIndexPatternColumn } from './operations/definitions/column_types'; import { isColumnFormatted, isColumnOfType } from './operations/definitions/helpers'; import type { IndexPattern, IndexPatternMap } from '../../types'; import { dedupeAggs } from './dedupe_aggs'; @@ -352,6 +352,14 @@ function getExpressionForLayer( format?.params && 'pattern' in format.params && format.params.pattern ? [format.params.pattern] : [], + fromUnit: + format?.params && 'fromUnit' in format.params && format.params.fromUnit + ? [format.params.fromUnit] + : [], + toUnit: + format?.params && 'toUnit' in format.params && format.params.toUnit + ? [format.params.toUnit] + : [], parentFormat: parentFormat ? [JSON.stringify(parentFormat)] : [], }, }; diff --git a/x-pack/plugins/observability/server/ui_settings.ts b/x-pack/plugins/observability/server/ui_settings.ts index 6a42dcc860c53..637856d91c7e9 100644 --- a/x-pack/plugins/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability/server/ui_settings.ts @@ -186,13 +186,16 @@ export const uiSettings: Record = { }), description: i18n.translate('xpack.observability.apmTraceExplorerTabDescription', { defaultMessage: - '{technicalPreviewLabel} Enable the APM Trace Explorer feature, that allows you to search and inspect traces with KQL or EQL.', + '{technicalPreviewLabel} Enable the APM Trace Explorer feature, that allows you to search and inspect traces with KQL or EQL. {link}', values: { technicalPreviewLabel: `[${technicalPreviewLabel}]`, + link: traceExplorerDocsLink({ + href: 'https://www.elastic.co/guide/en/kibana/master/traces.html#trace-explorer', + }), }, }), schema: schema.boolean(), - value: false, + value: true, requiresPageReload: true, type: 'boolean', showInLabs: true, @@ -369,3 +372,10 @@ function throttlingDocsLink({ href }: { href: string }) { { defaultMessage: 'read notice here.' } )}`; } + +function traceExplorerDocsLink({ href }: { href: string }) { + return `${i18n.translate( + 'xpack.observability.uiSettings.traceExplorerDocsLinkText', + { defaultMessage: 'Learn more.' } + )}`; +} diff --git a/x-pack/plugins/security/server/config.ts b/x-pack/plugins/security/server/config.ts index 2ce87e8d3d8e9..b3e11a70839c2 100644 --- a/x-pack/plugins/security/server/config.ts +++ b/x-pack/plugins/security/server/config.ts @@ -303,9 +303,9 @@ export const ConfigSchema = schema.object({ schema.contextRef('serverless'), true, schema.object({ - userManagementEnabled: schema.boolean({ defaultValue: false }), - roleManagementEnabled: schema.boolean({ defaultValue: false }), - roleMappingManagementEnabled: schema.boolean({ defaultValue: false }), + userManagementEnabled: schema.boolean({ defaultValue: true }), + roleManagementEnabled: schema.boolean({ defaultValue: true }), + roleMappingManagementEnabled: schema.boolean({ defaultValue: true }), }), schema.never() ), diff --git a/x-pack/plugins/security_solution/common/utils/get_ramdom_color.ts b/x-pack/plugins/security_solution/common/utils/get_ramdom_color.ts new file mode 100644 index 0000000000000..67ff5686f98d8 --- /dev/null +++ b/x-pack/plugins/security_solution/common/utils/get_ramdom_color.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** + * Returns the hex representation of a random color (e.g `#F1B7E2`) + */ +export const getRandomColor = (): string => { + return `#${String(Math.floor(Math.random() * 16777215).toString(16)).padStart(6, '0')}`; +}; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts index b42ea0190a406..d6eb89cee13d8 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/custom_query_rule.cy.ts @@ -69,11 +69,11 @@ import { import { deleteFirstRule, deleteRuleFromDetailsPage, - deleteSelectedRules, editFirstRule, goToRuleDetails, selectNumberOfRules, } from '../../tasks/alerts_detection_rules'; +import { deleteSelectedRules } from '../../tasks/rules_bulk_actions'; import { createRule } from '../../tasks/api_calls/rules'; import { createTimeline } from '../../tasks/api_calls/timelines'; import { cleanKibana, deleteAlertsAndRules, deleteConnectors } from '../../tasks/common'; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/export_rule.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/export_rule.cy.ts index 1b7bde1ea7be1..f089b2991d782 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/export_rule.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/export_rule.cy.ts @@ -17,13 +17,13 @@ import { import { filterByElasticRules, selectNumberOfRules, - bulkExportRules, selectAllRules, waitForRuleExecution, exportRule, importRules, expectManagementTableRules, } from '../../tasks/alerts_detection_rules'; +import { bulkExportRules } from '../../tasks/rules_bulk_actions'; import { createExceptionList, deleteExceptionList } from '../../tasks/api_calls/exceptions'; import { getExceptionList } from '../../objects/exception'; import { createRule } from '../../tasks/api_calls/rules'; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/indicator_match_rule.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/indicator_match_rule.cy.ts index f22dc47e56b96..f7b5ed197f43f 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/indicator_match_rule.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/indicator_match_rule.cy.ts @@ -63,8 +63,8 @@ import { selectNumberOfRules, checkDuplicatedRule, expectNumberOfRules, - duplicateSelectedRulesWithExceptions, } from '../../tasks/alerts_detection_rules'; +import { duplicateSelectedRulesWithExceptions } from '../../tasks/rules_bulk_actions'; import { createRule } from '../../tasks/api_calls/rules'; import { loadPrepackagedTimelineTemplates } from '../../tasks/api_calls/timelines'; import { cleanKibana, deleteAlertsAndRules } from '../../tasks/common'; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/prebuilt_rules_management.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/prebuilt_rules_management.cy.ts index f36d8f7fa0948..eea13a4def02b 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/prebuilt_rules_management.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detection_rules/prebuilt_rules_management.cy.ts @@ -21,14 +21,16 @@ import { import { confirmRulesDelete, deleteFirstRule, - deleteSelectedRules, - disableSelectedRules, - enableSelectedRules, selectAllRules, selectNumberOfRules, waitForPrebuiltDetectionRulesToBeLoaded, waitForRuleToUpdate, } from '../../tasks/alerts_detection_rules'; +import { + deleteSelectedRules, + disableSelectedRules, + enableSelectedRules, +} from '../../tasks/rules_bulk_actions'; import { createAndInstallMockedPrebuiltRules, getAvailablePrebuiltRulesCount, diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_duplicate_rules.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_duplicate_rules.cy.ts similarity index 86% rename from x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_duplicate_rules.cy.ts rename to x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_duplicate_rules.cy.ts index 16f3ca1e235e4..2f091fd4d03af 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_duplicate_rules.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_duplicate_rules.cy.ts @@ -9,27 +9,28 @@ import { waitForRulesTableToBeLoaded, goToTheRuleDetailsOf, selectNumberOfRules, - duplicateSelectedRulesWithoutExceptions, expectManagementTableRules, +} from '../../../../tasks/alerts_detection_rules'; +import { + duplicateSelectedRulesWithoutExceptions, duplicateSelectedRulesWithExceptions, duplicateSelectedRulesWithNonExpiredExceptions, -} from '../../tasks/alerts_detection_rules'; - -import { goToExceptionsTab, viewExpiredExceptionItems } from '../../tasks/rule_details'; -import { login, visitWithoutDateRange } from '../../tasks/login'; +} from '../../../../tasks/rules_bulk_actions'; +import { goToExceptionsTab, viewExpiredExceptionItems } from '../../../../tasks/rule_details'; +import { login, visitWithoutDateRange } from '../../../../tasks/login'; -import { SECURITY_DETECTIONS_RULES_URL } from '../../urls/navigation'; -import { createRule } from '../../tasks/api_calls/rules'; -import { cleanKibana, resetRulesTableState, deleteAlertsAndRules } from '../../tasks/common'; +import { SECURITY_DETECTIONS_RULES_URL } from '../../../../urls/navigation'; +import { createRule } from '../../../../tasks/api_calls/rules'; +import { cleanKibana, resetRulesTableState, deleteAlertsAndRules } from '../../../../tasks/common'; -import { getNewRule } from '../../objects/rule'; +import { getNewRule } from '../../../../objects/rule'; -import { createRuleExceptionItem } from '../../tasks/api_calls/exceptions'; -import { EXCEPTION_CARD_ITEM_NAME } from '../../screens/exceptions'; +import { createRuleExceptionItem } from '../../../../tasks/api_calls/exceptions'; +import { EXCEPTION_CARD_ITEM_NAME } from '../../../../screens/exceptions'; import { assertExceptionItemsExists, assertNumberOfExceptionItemsExists, -} from '../../tasks/exceptions'; +} from '../../../../tasks/exceptions'; const RULE_NAME = 'Custom rule for bulk actions'; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules.cy.ts similarity index 95% rename from x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules.cy.ts rename to x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules.cy.ts index 3fba5602cf42f..efb546fb8ec29 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules.cy.ts @@ -11,7 +11,7 @@ import { RULE_CHECKBOX, RULES_TAGS_POPOVER_BTN, MODAL_ERROR_BODY, -} from '../../screens/alerts_detection_rules'; +} from '../../../../screens/alerts_detection_rules'; import { RULES_BULK_EDIT_INDEX_PATTERNS_WARNING, @@ -20,11 +20,11 @@ import { TAGS_RULE_BULK_MENU_ITEM, INDEX_PATTERNS_RULE_BULK_MENU_ITEM, APPLY_TIMELINE_RULE_BULK_MENU_ITEM, -} from '../../screens/rules_bulk_edit'; +} from '../../../../screens/rules_bulk_actions'; -import { TIMELINE_TEMPLATE_DETAILS } from '../../screens/rule_details'; +import { TIMELINE_TEMPLATE_DETAILS } from '../../../../screens/rule_details'; -import { EUI_FILTER_SELECT_ITEM } from '../../screens/common/controls'; +import { EUI_FILTER_SELECT_ITEM } from '../../../../screens/common/controls'; import { waitForRulesTableToBeLoaded, @@ -38,7 +38,7 @@ import { clickErrorToastBtn, unselectRuleByName, cancelConfirmationModal, -} from '../../tasks/alerts_detection_rules'; +} from '../../../../tasks/alerts_detection_rules'; import { typeIndexPatterns, @@ -69,15 +69,15 @@ import { assertRuleScheduleValues, assertUpdateScheduleWarningExists, assertDefaultValuesAreAppliedToScheduleFields, -} from '../../tasks/rules_bulk_edit'; +} from '../../../../tasks/rules_bulk_actions'; -import { hasIndexPatterns, getDetails } from '../../tasks/rule_details'; -import { login, visitWithoutDateRange } from '../../tasks/login'; +import { hasIndexPatterns, getDetails } from '../../../../tasks/rule_details'; +import { login, visitWithoutDateRange } from '../../../../tasks/login'; -import { SECURITY_DETECTIONS_RULES_URL } from '../../urls/navigation'; -import { createRule } from '../../tasks/api_calls/rules'; -import { loadPrepackagedTimelineTemplates } from '../../tasks/api_calls/timelines'; -import { cleanKibana, resetRulesTableState, deleteAlertsAndRules } from '../../tasks/common'; +import { SECURITY_DETECTIONS_RULES_URL } from '../../../../urls/navigation'; +import { createRule } from '../../../../tasks/api_calls/rules'; +import { loadPrepackagedTimelineTemplates } from '../../../../tasks/api_calls/timelines'; +import { cleanKibana, resetRulesTableState, deleteAlertsAndRules } from '../../../../tasks/common'; import { getEqlRule, @@ -86,13 +86,13 @@ import { getNewThresholdRule, getMachineLearningRule, getNewTermsRule, -} from '../../objects/rule'; +} from '../../../../objects/rule'; import { getAvailablePrebuiltRulesCount, excessivelyInstallAllPrebuiltRules, -} from '../../tasks/api_calls/prebuilt_rules'; -import { setRowsPerPageTo } from '../../tasks/table_pagination'; +} from '../../../../tasks/api_calls/prebuilt_rules'; +import { setRowsPerPageTo } from '../../../../tasks/table_pagination'; const RULE_NAME = 'Custom rule for bulk actions'; const EUI_SELECTABLE_LIST_ITEM_SR_TEXT = '. To check this option, press Enter.'; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules_actions.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules_actions.cy.ts similarity index 88% rename from x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules_actions.cy.ts rename to x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules_actions.cy.ts index 5cc0e4c0bfbd3..7f06d43f4bd96 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules_actions.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules_actions.cy.ts @@ -6,17 +6,17 @@ */ import type { RuleActionArray } from '@kbn/securitysolution-io-ts-alerting-types'; -import { ROLES } from '../../../common/test'; +import { ROLES } from '../../../../../common/test'; import { RULES_BULK_EDIT_ACTIONS_INFO, RULES_BULK_EDIT_ACTIONS_WARNING, ADD_RULE_ACTIONS_MENU_ITEM, -} from '../../screens/rules_bulk_edit'; -import { actionFormSelector } from '../../screens/common/rule_actions'; +} from '../../../../screens/rules_bulk_actions'; +import { actionFormSelector } from '../../../../screens/common/rule_actions'; -import { cleanKibana, deleteAlertsAndRules, deleteConnectors } from '../../tasks/common'; -import type { RuleActionCustomFrequency } from '../../tasks/common/rule_actions'; +import { cleanKibana, deleteAlertsAndRules, deleteConnectors } from '../../../../tasks/common'; +import type { RuleActionCustomFrequency } from '../../../../tasks/common/rule_actions'; import { addSlackRuleAction, assertSlackRuleAction, @@ -28,25 +28,25 @@ import { pickCustomFrequencyOption, pickPerRuleRunFrequencyOption, pickSummaryOfAlertsOption, -} from '../../tasks/common/rule_actions'; +} from '../../../../tasks/common/rule_actions'; import { waitForRulesTableToBeLoaded, selectNumberOfRules, goToEditRuleActionsSettingsOf, -} from '../../tasks/alerts_detection_rules'; +} from '../../../../tasks/alerts_detection_rules'; import { waitForBulkEditActionToFinish, submitBulkEditForm, checkOverwriteRuleActionsCheckbox, openBulkEditRuleActionsForm, openBulkActionsMenu, -} from '../../tasks/rules_bulk_edit'; -import { login, visitWithoutDateRange } from '../../tasks/login'; +} from '../../../../tasks/rules_bulk_actions'; +import { login, visitWithoutDateRange } from '../../../../tasks/login'; -import { SECURITY_DETECTIONS_RULES_URL } from '../../urls/navigation'; +import { SECURITY_DETECTIONS_RULES_URL } from '../../../../urls/navigation'; -import { createRule } from '../../tasks/api_calls/rules'; -import { createSlackConnector } from '../../tasks/api_calls/connectors'; +import { createRule } from '../../../../tasks/api_calls/rules'; +import { createSlackConnector } from '../../../../tasks/api_calls/connectors'; import { getEqlRule, @@ -55,8 +55,8 @@ import { getNewThresholdRule, getMachineLearningRule, getNewTermsRule, -} from '../../objects/rule'; -import { excessivelyInstallAllPrebuiltRules } from '../../tasks/api_calls/prebuilt_rules'; +} from '../../../../objects/rule'; +import { excessivelyInstallAllPrebuiltRules } from '../../../../tasks/api_calls/prebuilt_rules'; const ruleNameToAssert = 'Custom rule name with actions'; const expectedNumberOfCustomRulesToBeEdited = 7; diff --git a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules_data_view.cy.ts b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules_data_view.cy.ts similarity index 93% rename from x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules_data_view.cy.ts rename to x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules_data_view.cy.ts index 55533c0cb86d0..f3963340c8977 100644 --- a/x-pack/plugins/security_solution/cypress/e2e/detection_rules/bulk_edit_rules_data_view.cy.ts +++ b/x-pack/plugins/security_solution/cypress/e2e/detections_response/rules_management/bulk_actions/bulk_edit_rules_data_view.cy.ts @@ -8,16 +8,16 @@ import { RULES_BULK_EDIT_DATA_VIEWS_WARNING, RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX, -} from '../../screens/rules_bulk_edit'; +} from '../../../../screens/rules_bulk_actions'; -import { DATA_VIEW_DETAILS, INDEX_PATTERNS_DETAILS } from '../../screens/rule_details'; +import { DATA_VIEW_DETAILS, INDEX_PATTERNS_DETAILS } from '../../../../screens/rule_details'; import { waitForRulesTableToBeLoaded, goToRuleDetails, selectNumberOfRules, goToTheRuleDetailsOf, -} from '../../tasks/alerts_detection_rules'; +} from '../../../../tasks/alerts_detection_rules'; import { typeIndexPatterns, @@ -27,14 +27,18 @@ import { checkOverwriteIndexPatternsCheckbox, openBulkEditAddIndexPatternsForm, openBulkEditDeleteIndexPatternsForm, -} from '../../tasks/rules_bulk_edit'; +} from '../../../../tasks/rules_bulk_actions'; -import { hasIndexPatterns, getDetails, assertDetailsNotExist } from '../../tasks/rule_details'; -import { login, visitWithoutDateRange } from '../../tasks/login'; +import { + hasIndexPatterns, + getDetails, + assertDetailsNotExist, +} from '../../../../tasks/rule_details'; +import { login, visitWithoutDateRange } from '../../../../tasks/login'; -import { SECURITY_DETECTIONS_RULES_URL } from '../../urls/navigation'; -import { createRule } from '../../tasks/api_calls/rules'; -import { cleanKibana, deleteAlertsAndRules, postDataView } from '../../tasks/common'; +import { SECURITY_DETECTIONS_RULES_URL } from '../../../../urls/navigation'; +import { createRule } from '../../../../tasks/api_calls/rules'; +import { cleanKibana, deleteAlertsAndRules, postDataView } from '../../../../tasks/common'; import { getEqlRule, @@ -42,7 +46,7 @@ import { getNewRule, getNewThresholdRule, getNewTermsRule, -} from '../../objects/rule'; +} from '../../../../objects/rule'; const DATA_VIEW_ID = 'auditbeat'; diff --git a/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts b/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts index 5ba64892e741a..166bb191e8730 100644 --- a/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts +++ b/x-pack/plugins/security_solution/cypress/screens/alerts_detection_rules.ts @@ -5,10 +5,6 @@ * 2.0. */ -export const BULK_ACTIONS_BTN = '[data-test-subj="bulkActions"] span'; - -export const BULK_ACTIONS_PROGRESS_BTN = '[data-test-subj="bulkActions-progress"]'; - export const CREATE_NEW_RULE_BTN = '[data-test-subj="create-new-rule"]'; export const COLLAPSED_ACTION_BTN = '[data-test-subj="euiCollapsedItemActionsButton"]'; @@ -30,14 +26,6 @@ export const DUPLICATE_RULE_ACTION_BTN = '[data-test-subj="duplicateRuleAction"] export const DUPLICATE_RULE_MENU_PANEL_BTN = '[data-test-subj="rules-details-duplicate-rule"]'; export const CONFIRM_DUPLICATE_RULE = '[data-test-subj="confirmModalConfirmButton"]'; -export const ENABLE_RULE_BULK_BTN = '[data-test-subj="enableRuleBulk"]'; - -export const DISABLE_RULE_BULK_BTN = '[data-test-subj="disableRuleBulk"]'; - -export const DELETE_RULE_BULK_BTN = '[data-test-subj="deleteRuleBulk"]'; - -export const DUPLICATE_RULE_BULK_BTN = '[data-test-subj="duplicateRuleBulk"]'; - export const DUPLICATE_WITH_EXCEPTIONS_OPTION = '[data-test-subj="withExceptions"] label'; export const DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION = @@ -49,8 +37,6 @@ export const RULE_SEARCH_FIELD = '[data-test-subj="ruleSearchField"]'; export const EXPORT_ACTION_BTN = '[data-test-subj="exportRuleAction"]'; -export const BULK_EXPORT_ACTION_BTN = '[data-test-subj="exportRuleBulk"]'; - export const FIRST_RULE = 0; export const FOURTH_RULE = 3; diff --git a/x-pack/plugins/security_solution/cypress/screens/rules_bulk_edit.ts b/x-pack/plugins/security_solution/cypress/screens/rules_bulk_actions.ts similarity index 82% rename from x-pack/plugins/security_solution/cypress/screens/rules_bulk_edit.ts rename to x-pack/plugins/security_solution/cypress/screens/rules_bulk_actions.ts index 7a36c7fd7c74e..69efa1d31c2a7 100644 --- a/x-pack/plugins/security_solution/cypress/screens/rules_bulk_edit.ts +++ b/x-pack/plugins/security_solution/cypress/screens/rules_bulk_actions.ts @@ -5,6 +5,12 @@ * 2.0. */ +// FORM +export const RULES_BULK_EDIT_FORM_TITLE = '[data-test-subj="rulesBulkEditFormTitle"]'; + +export const RULES_BULK_EDIT_FORM_CONFIRM_BTN = '[data-test-subj="rulesBulkEditFormSaveBtn"]'; + +// INDEX PATTERNS export const INDEX_PATTERNS_RULE_BULK_MENU_ITEM = '[data-test-subj="indexPatternsBulkEditRule"]'; export const ADD_INDEX_PATTERNS_RULE_BULK_MENU_ITEM = @@ -13,22 +19,6 @@ export const ADD_INDEX_PATTERNS_RULE_BULK_MENU_ITEM = export const DELETE_INDEX_PATTERNS_RULE_BULK_MENU_ITEM = '[data-test-subj="deleteIndexPatternsBulkEditRule"]'; -export const UPDATE_SCHEDULE_MENU_ITEM = '[data-test-subj="setScheduleBulk"]'; - -export const ADD_RULE_ACTIONS_MENU_ITEM = '[data-test-subj="addRuleActionsBulk"]'; - -export const APPLY_TIMELINE_RULE_BULK_MENU_ITEM = '[data-test-subj="applyTimelineTemplateBulk"]'; - -export const TAGS_RULE_BULK_MENU_ITEM = '[data-test-subj="tagsBulkEditRule"]'; - -export const ADD_TAGS_RULE_BULK_MENU_ITEM = '[data-test-subj="addTagsBulkEditRule"]'; - -export const DELETE_TAGS_RULE_BULK_MENU_ITEM = '[data-test-subj="deleteTagsBulkEditRule"]'; - -export const RULES_BULK_EDIT_FORM_TITLE = '[data-test-subj="rulesBulkEditFormTitle"]'; - -export const RULES_BULK_EDIT_FORM_CONFIRM_BTN = '[data-test-subj="rulesBulkEditFormSaveBtn"]'; - export const RULES_BULK_EDIT_INDEX_PATTERNS = '[data-test-subj="bulkEditRulesIndexPatterns"]'; export const RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX = @@ -37,25 +27,15 @@ export const RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX = export const RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX = '[data-test-subj="bulkEditRulesOverwriteRulesWithDataViews"]'; -export const RULES_BULK_EDIT_TAGS = '[data-test-subj="bulkEditRulesTags"]'; - -export const RULES_BULK_EDIT_OVERWRITE_TAGS_CHECKBOX = - '[data-test-subj="bulkEditRulesOverwriteTags"]'; - export const RULES_BULK_EDIT_INDEX_PATTERNS_WARNING = '[data-test-subj="bulkEditRulesIndexPatternsWarning"]'; -export const RULES_BULK_EDIT_TAGS_WARNING = '[data-test-subj="bulkEditRulesTagsWarning"]'; - -export const RULES_BULK_EDIT_TIMELINE_TEMPLATES_SELECTOR = - '[data-test-subj="bulkEditRulesTimelineTemplateSelector"]'; - -export const RULES_BULK_EDIT_TIMELINE_TEMPLATES_WARNING = - '[data-test-subj="bulkEditRulesTimelineTemplateWarning"]'; - export const RULES_BULK_EDIT_DATA_VIEWS_WARNING = '[data-test-subj="bulkEditRulesDataViewsWarning"]'; +// SCHEDULE +export const UPDATE_SCHEDULE_MENU_ITEM = '[data-test-subj="setScheduleBulk"]'; + export const RULES_BULK_EDIT_SCHEDULES_WARNING = '[data-test-subj="bulkEditRulesSchedulesWarning"]'; export const UPDATE_SCHEDULE_INTERVAL_INPUT = @@ -66,9 +46,53 @@ export const UPDATE_SCHEDULE_LOOKBACK_INPUT = export const UPDATE_SCHEDULE_TIME_UNIT_SELECT = '[data-test-subj="timeType"]'; +// ACTIONS +export const ADD_RULE_ACTIONS_MENU_ITEM = '[data-test-subj="addRuleActionsBulk"]'; + export const RULES_BULK_EDIT_ACTIONS_INFO = '[data-test-subj="bulkEditRulesRuleActionInfo"]'; export const RULES_BULK_EDIT_ACTIONS_WARNING = '[data-test-subj="bulkEditRulesRuleActionsWarning"]'; export const RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX = '[data-test-subj="bulkEditRulesOverwriteRuleActions"]'; + +export const BULK_ACTIONS_BTN = '[data-test-subj="bulkActions"] span'; + +export const BULK_ACTIONS_PROGRESS_BTN = '[data-test-subj="bulkActions-progress"]'; + +// TIMELINE +export const APPLY_TIMELINE_RULE_BULK_MENU_ITEM = '[data-test-subj="applyTimelineTemplateBulk"]'; + +export const RULES_BULK_EDIT_TIMELINE_TEMPLATES_SELECTOR = + '[data-test-subj="bulkEditRulesTimelineTemplateSelector"]'; + +export const RULES_BULK_EDIT_TIMELINE_TEMPLATES_WARNING = + '[data-test-subj="bulkEditRulesTimelineTemplateWarning"]'; + +// TAGS +export const TAGS_RULE_BULK_MENU_ITEM = '[data-test-subj="tagsBulkEditRule"]'; + +export const ADD_TAGS_RULE_BULK_MENU_ITEM = '[data-test-subj="addTagsBulkEditRule"]'; + +export const DELETE_TAGS_RULE_BULK_MENU_ITEM = '[data-test-subj="deleteTagsBulkEditRule"]'; + +export const RULES_BULK_EDIT_TAGS = '[data-test-subj="bulkEditRulesTags"]'; + +export const RULES_BULK_EDIT_OVERWRITE_TAGS_CHECKBOX = + '[data-test-subj="bulkEditRulesOverwriteTags"]'; + +export const RULES_BULK_EDIT_TAGS_WARNING = '[data-test-subj="bulkEditRulesTagsWarning"]'; + +// ENABLE/DISABLE +export const ENABLE_RULE_BULK_BTN = '[data-test-subj="enableRuleBulk"]'; + +export const DISABLE_RULE_BULK_BTN = '[data-test-subj="disableRuleBulk"]'; + +// DELETE +export const DELETE_RULE_BULK_BTN = '[data-test-subj="deleteRuleBulk"]'; + +// DUPLICATE +export const DUPLICATE_RULE_BULK_BTN = '[data-test-subj="duplicateRuleBulk"]'; + +// EXPORT +export const BULK_EXPORT_ACTION_BTN = '[data-test-subj="exportRuleBulk"]'; diff --git a/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts b/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts index 97dbdad4506a9..02a2051968fdd 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/alerts_detection_rules.ts @@ -7,11 +7,9 @@ import { duplicatedRuleName } from '../objects/rule'; import { - BULK_ACTIONS_BTN, COLLAPSED_ACTION_BTN, CUSTOM_RULES_BTN, DELETE_RULE_ACTION_BTN, - DELETE_RULE_BULK_BTN, RULES_SELECTED_TAG, RULES_TABLE_INITIAL_LOADING_INDICATOR, RULES_TABLE_AUTOREFRESH_INDICATOR, @@ -24,14 +22,11 @@ import { EDIT_RULE_ACTION_BTN, DUPLICATE_RULE_ACTION_BTN, DUPLICATE_RULE_MENU_PANEL_BTN, - DUPLICATE_RULE_BULK_BTN, CONFIRM_DUPLICATE_RULE, RULES_ROW, SELECT_ALL_RULES_BTN, MODAL_CONFIRMATION_BTN, RULES_DELETE_CONFIRMATION_MODAL, - ENABLE_RULE_BULK_BTN, - DISABLE_RULE_BULK_BTN, RULE_DETAILS_DELETE_BTN, RULE_IMPORT_MODAL_BUTTON, RULE_IMPORT_MODAL, @@ -45,7 +40,6 @@ import { REFRESH_SETTINGS_POPOVER, REFRESH_SETTINGS_SWITCH, ELASTIC_RULES_BTN, - BULK_EXPORT_ACTION_BTN, TOASTER_ERROR_BTN, MODAL_CONFIRMATION_CANCEL_BTN, MODAL_CONFIRMATION_BODY, @@ -60,9 +54,6 @@ import { DISABLED_RULES_BTN, REFRESH_RULES_TABLE_BUTTON, RULE_LAST_RUN, - DUPLICATE_WITHOUT_EXCEPTIONS_OPTION, - DUPLICATE_WITH_EXCEPTIONS_OPTION, - DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION, TOASTER_CLOSE_ICON, ADD_ELASTIC_RULES_EMPTY_PROMPT_BTN, } from '../screens/alerts_detection_rules'; @@ -126,11 +117,6 @@ export const deleteFirstRule = () => { cy.get(DELETE_RULE_ACTION_BTN).click(); }; -export const deleteSelectedRules = () => { - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(DELETE_RULE_BULK_BTN).click(); -}; - export const deleteRuleFromDetailsPage = () => { cy.get(ALL_ACTIONS).should('be.visible'); // We cannot use cy.root().pipe($el) withing this function and instead have to use a cy.wait() @@ -145,42 +131,6 @@ export const deleteRuleFromDetailsPage = () => { cy.get(RULE_DETAILS_DELETE_BTN).should('not.be.visible'); }; -export const duplicateSelectedRulesWithoutExceptions = () => { - cy.log('Duplicate selected rules'); - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(DUPLICATE_RULE_BULK_BTN).click(); - cy.get(DUPLICATE_WITHOUT_EXCEPTIONS_OPTION).click(); - cy.get(CONFIRM_DUPLICATE_RULE).click(); -}; - -export const duplicateSelectedRulesWithExceptions = () => { - cy.log('Duplicate selected rules'); - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(DUPLICATE_RULE_BULK_BTN).click(); - cy.get(DUPLICATE_WITH_EXCEPTIONS_OPTION).click(); - cy.get(CONFIRM_DUPLICATE_RULE).click(); -}; - -export const duplicateSelectedRulesWithNonExpiredExceptions = () => { - cy.log('Duplicate selected rules'); - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(DUPLICATE_RULE_BULK_BTN).click(); - cy.get(DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION).click(); - cy.get(CONFIRM_DUPLICATE_RULE).click(); -}; - -export const enableSelectedRules = () => { - cy.log('Enable selected rules'); - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(ENABLE_RULE_BULK_BTN).click(); -}; - -export const disableSelectedRules = () => { - cy.log('Disable selected rules'); - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(DISABLE_RULE_BULK_BTN).click(); -}; - export const exportRule = (name: string) => { cy.log(`Export rule "${name}"`); @@ -534,11 +484,6 @@ export const mockGlobalClock = () => { cy.clock(Date.now(), ['setInterval', 'clearInterval', 'Date']); }; -export const bulkExportRules = () => { - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(BULK_EXPORT_ACTION_BTN).click(); -}; - export const cancelConfirmationModal = () => { cy.get(MODAL_CONFIRMATION_CANCEL_BTN).click(); cy.get(MODAL_CONFIRMATION_BODY).should('not.exist'); diff --git a/x-pack/plugins/security_solution/cypress/tasks/rules_bulk_edit.ts b/x-pack/plugins/security_solution/cypress/tasks/rules_bulk_actions.ts similarity index 83% rename from x-pack/plugins/security_solution/cypress/tasks/rules_bulk_edit.ts rename to x-pack/plugins/security_solution/cypress/tasks/rules_bulk_actions.ts index 010a587cf1019..7361cdc9f1a0a 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/rules_bulk_edit.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/rules_bulk_actions.ts @@ -6,69 +6,127 @@ */ import { recurse } from 'cypress-recurse'; -import { TIMELINE_SEARCHBOX, EUI_SELECTABLE_LIST_ITEM } from '../screens/common/controls'; import { - BULK_ACTIONS_BTN, - BULK_ACTIONS_PROGRESS_BTN, - MODAL_CONFIRMATION_TITLE, + CONFIRM_DUPLICATE_RULE, + DUPLICATE_WITHOUT_EXCEPTIONS_OPTION, + DUPLICATE_WITH_EXCEPTIONS_OPTION, + DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION, MODAL_CONFIRMATION_BODY, - TOASTER_BODY, + MODAL_CONFIRMATION_TITLE, RULES_TAGS_FILTER_BTN, + TOASTER_BODY, } from '../screens/alerts_detection_rules'; - +import { EUI_SELECTABLE_LIST_ITEM, TIMELINE_SEARCHBOX } from '../screens/common/controls'; import { - INDEX_PATTERNS_RULE_BULK_MENU_ITEM, ADD_INDEX_PATTERNS_RULE_BULK_MENU_ITEM, ADD_RULE_ACTIONS_MENU_ITEM, - DELETE_INDEX_PATTERNS_RULE_BULK_MENU_ITEM, - TAGS_RULE_BULK_MENU_ITEM, ADD_TAGS_RULE_BULK_MENU_ITEM, + APPLY_TIMELINE_RULE_BULK_MENU_ITEM, + BULK_ACTIONS_BTN, + BULK_ACTIONS_PROGRESS_BTN, + BULK_EXPORT_ACTION_BTN, + DELETE_INDEX_PATTERNS_RULE_BULK_MENU_ITEM, + DELETE_RULE_BULK_BTN, DELETE_TAGS_RULE_BULK_MENU_ITEM, + DISABLE_RULE_BULK_BTN, + DUPLICATE_RULE_BULK_BTN, + ENABLE_RULE_BULK_BTN, + INDEX_PATTERNS_RULE_BULK_MENU_ITEM, + RULES_BULK_EDIT_FORM_CONFIRM_BTN, RULES_BULK_EDIT_FORM_TITLE, RULES_BULK_EDIT_INDEX_PATTERNS, - RULES_BULK_EDIT_TAGS, - RULES_BULK_EDIT_FORM_CONFIRM_BTN, - APPLY_TIMELINE_RULE_BULK_MENU_ITEM, - RULES_BULK_EDIT_OVERWRITE_TAGS_CHECKBOX, - RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX, + RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX, RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX, + RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX, + RULES_BULK_EDIT_OVERWRITE_TAGS_CHECKBOX, + RULES_BULK_EDIT_SCHEDULES_WARNING, + RULES_BULK_EDIT_TAGS, RULES_BULK_EDIT_TIMELINE_TEMPLATES_SELECTOR, - UPDATE_SCHEDULE_MENU_ITEM, + TAGS_RULE_BULK_MENU_ITEM, UPDATE_SCHEDULE_INTERVAL_INPUT, - UPDATE_SCHEDULE_TIME_UNIT_SELECT, UPDATE_SCHEDULE_LOOKBACK_INPUT, - RULES_BULK_EDIT_SCHEDULES_WARNING, - RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX, -} from '../screens/rules_bulk_edit'; + UPDATE_SCHEDULE_MENU_ITEM, + UPDATE_SCHEDULE_TIME_UNIT_SELECT, +} from '../screens/rules_bulk_actions'; import { SCHEDULE_DETAILS } from '../screens/rule_details'; -export const clickApplyTimelineTemplatesMenuItem = () => { +// DELETE +export const deleteSelectedRules = () => { cy.get(BULK_ACTIONS_BTN).click(); - cy.get(APPLY_TIMELINE_RULE_BULK_MENU_ITEM).click(); - cy.get(APPLY_TIMELINE_RULE_BULK_MENU_ITEM).should('not.exist'); + cy.get(DELETE_RULE_BULK_BTN).click(); }; -const clickIndexPatternsMenuItem = () => { +// DUPLICATE +export const duplicateSelectedRulesWithoutExceptions = () => { + cy.log('Bulk duplicate selected rules without exceptions'); cy.get(BULK_ACTIONS_BTN).click(); - cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).click(); - cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).should('not.exist'); + cy.get(DUPLICATE_RULE_BULK_BTN).click(); + cy.get(DUPLICATE_WITHOUT_EXCEPTIONS_OPTION).click(); + cy.get(CONFIRM_DUPLICATE_RULE).click(); }; -const clickTagsMenuItem = () => { +export const duplicateSelectedRulesWithExceptions = () => { + cy.log('Bulk duplicate selected rules with exceptions'); cy.get(BULK_ACTIONS_BTN).click(); - cy.get(TAGS_RULE_BULK_MENU_ITEM).click(); + cy.get(DUPLICATE_RULE_BULK_BTN).click(); + cy.get(DUPLICATE_WITH_EXCEPTIONS_OPTION).click(); + cy.get(CONFIRM_DUPLICATE_RULE).click(); }; -export const clickAddTagsMenuItem = () => { - clickTagsMenuItem(); - cy.get(ADD_TAGS_RULE_BULK_MENU_ITEM).click(); +export const duplicateSelectedRulesWithNonExpiredExceptions = () => { + cy.log('Bulk duplicate selected rules with non expired exceptions'); + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(DUPLICATE_RULE_BULK_BTN).click(); + cy.get(DUPLICATE_WITH_EXCEPTIONS_WITHOUT_EXPIRED_OPTION).click(); + cy.get(CONFIRM_DUPLICATE_RULE).click(); }; -export const clickUpdateScheduleMenuItem = () => { +// ENABLE/DISABLE +export const enableSelectedRules = () => { + cy.log('Bulk enable selected rules'); cy.get(BULK_ACTIONS_BTN).click(); - cy.get(UPDATE_SCHEDULE_MENU_ITEM).click(); - cy.get(UPDATE_SCHEDULE_MENU_ITEM).should('not.exist'); + cy.get(ENABLE_RULE_BULK_BTN).click(); +}; + +export const disableSelectedRules = () => { + cy.log('Bulk disable selected rules'); + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(DISABLE_RULE_BULK_BTN).click(); +}; + +// EXPORT +export const bulkExportRules = () => { + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(BULK_EXPORT_ACTION_BTN).click(); +}; + +// EDIT-TIMELINE +export const clickApplyTimelineTemplatesMenuItem = () => { + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(APPLY_TIMELINE_RULE_BULK_MENU_ITEM).click(); + cy.get(APPLY_TIMELINE_RULE_BULK_MENU_ITEM).should('not.exist'); +}; + +export const selectTimelineTemplate = (timelineTitle: string) => { + recurse( + () => { + cy.get(RULES_BULK_EDIT_TIMELINE_TEMPLATES_SELECTOR).click(); + cy.get(TIMELINE_SEARCHBOX).clear(); + cy.get(TIMELINE_SEARCHBOX).type(`${timelineTitle}{enter}`); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(500); + return cy.get(TIMELINE_SEARCHBOX).should(Cypress._.noop); + }, + ($el) => !$el.length + ); +}; + +// EDIT-INDEX +const clickIndexPatternsMenuItem = () => { + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).click(); + cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).should('not.exist'); }; export const clickAddIndexPatternsMenuItem = () => { @@ -82,13 +140,6 @@ export const openBulkEditAddIndexPatternsForm = () => { cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Add index patterns'); }; -export const openBulkEditRuleActionsForm = () => { - cy.get(BULK_ACTIONS_BTN).click(); - cy.get(ADD_RULE_ACTIONS_MENU_ITEM).click(); - - cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Add rule actions'); -}; - export const openBulkEditDeleteIndexPatternsForm = () => { cy.get(BULK_ACTIONS_BTN).click(); cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).click(); @@ -97,92 +148,61 @@ export const openBulkEditDeleteIndexPatternsForm = () => { cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Delete index patterns'); }; -export const openBulkEditAddTagsForm = () => { - clickAddTagsMenuItem(); +export const typeIndexPatterns = (indices: string[]) => { + cy.get(RULES_BULK_EDIT_INDEX_PATTERNS).find('input').type(indices.join('{enter}')); +}; - cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Add tags'); +export const checkOverwriteIndexPatternsCheckbox = () => { + cy.get(RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX) + .should('have.text', "Overwrite all selected rules' index patterns") + .click(); + cy.get(RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX) + .should('have.text', "Overwrite all selected rules' index patterns") + .get('input') + .should('be.checked'); }; -export const openBulkEditDeleteTagsForm = () => { - clickTagsMenuItem(); - cy.get(DELETE_TAGS_RULE_BULK_MENU_ITEM).click(); +export const checkOverwriteDataViewCheckbox = () => { + cy.get(RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX) + .should('have.text', 'Apply changes to rules configured with data views') + .click(); - cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Delete tags'); + cy.get(RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX) + .should('have.text', 'Apply changes to rules configured with data views') + .get('input') + .should('be.checked'); }; -export const openBulkActionsMenu = () => { +// EDIT-TAGS +const clickTagsMenuItem = () => { cy.get(BULK_ACTIONS_BTN).click(); + cy.get(TAGS_RULE_BULK_MENU_ITEM).click(); }; -export const typeIndexPatterns = (indices: string[]) => { - cy.get(RULES_BULK_EDIT_INDEX_PATTERNS).find('input').type(indices.join('{enter}')); +export const clickAddTagsMenuItem = () => { + clickTagsMenuItem(); + cy.get(ADD_TAGS_RULE_BULK_MENU_ITEM).click(); }; -export const typeTags = (tags: string[]) => { - cy.get(RULES_BULK_EDIT_TAGS).find('input').type(tags.join('{enter}')); -}; +export const openBulkEditAddTagsForm = () => { + clickAddTagsMenuItem(); -export const openTagsSelect = () => { - cy.get(RULES_BULK_EDIT_TAGS).find('input').click(); + cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Add tags'); }; -export const submitBulkEditForm = () => cy.get(RULES_BULK_EDIT_FORM_CONFIRM_BTN).click(); - -export const waitForBulkEditActionToFinish = ({ - updatedCount, - skippedCount, - failedCount, - showDataViewsWarning = false, -}: { - updatedCount?: number; - skippedCount?: number; - failedCount?: number; - showDataViewsWarning?: boolean; -}) => { - cy.get(BULK_ACTIONS_PROGRESS_BTN).should('be.disabled'); - - if (updatedCount !== undefined) { - cy.contains(TOASTER_BODY, `You've successfully updated ${updatedCount} rule`); - } - if (failedCount !== undefined) { - if (failedCount === 1) { - cy.contains(TOASTER_BODY, `${failedCount} rule failed to update`); - } else { - cy.contains(TOASTER_BODY, `${failedCount} rules failed to update`); - } - } - if (skippedCount !== undefined) { - if (skippedCount === 1) { - cy.contains(TOASTER_BODY, `${skippedCount} rule was skipped`); - } else { - cy.contains(TOASTER_BODY, `${skippedCount} rules were skipped`); - } - if (showDataViewsWarning) { - cy.contains( - TOASTER_BODY, - 'If you did not select to apply changes to rules using Kibana data views, those rules were not updated and will continue using data views.' - ); - } - } -}; +export const openBulkEditDeleteTagsForm = () => { + clickTagsMenuItem(); + cy.get(DELETE_TAGS_RULE_BULK_MENU_ITEM).click(); -export const checkPrebuiltRulesCannotBeModified = (rulesCount: number) => { - cy.get(MODAL_CONFIRMATION_BODY).contains( - `${rulesCount} prebuilt Elastic rules (editing prebuilt rules is not supported)` - ); + cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Delete tags'); }; -export const checkMachineLearningRulesCannotBeModified = (rulesCount: number) => { - cy.get(MODAL_CONFIRMATION_BODY).contains( - `${rulesCount} custom machine learning rule (these rules don't have index patterns)` - ); +export const typeTags = (tags: string[]) => { + cy.get(RULES_BULK_EDIT_TAGS).find('input').type(tags.join('{enter}')); }; -export const waitForMixedRulesBulkEditModal = (customRulesCount: number) => { - cy.get(MODAL_CONFIRMATION_TITLE).should( - 'have.text', - `This action can only be applied to ${customRulesCount} custom rules` - ); +export const openTagsSelect = () => { + cy.get(RULES_BULK_EDIT_TAGS).find('input').click(); }; export const checkOverwriteTagsCheckbox = () => { @@ -195,52 +215,6 @@ export const checkOverwriteTagsCheckbox = () => { .should('be.checked'); }; -export const checkOverwriteIndexPatternsCheckbox = () => { - cy.get(RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX) - .should('have.text', "Overwrite all selected rules' index patterns") - .click(); - cy.get(RULES_BULK_EDIT_OVERWRITE_INDEX_PATTERNS_CHECKBOX) - .should('have.text', "Overwrite all selected rules' index patterns") - .get('input') - .should('be.checked'); -}; - -export const checkOverwriteRuleActionsCheckbox = () => { - cy.get(RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX) - .should('have.text', 'Overwrite all selected rules actions') - .find('input') - .click({ force: true }); - cy.get(RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX) - .should('have.text', 'Overwrite all selected rules actions') - .find('input') - .should('be.checked'); -}; - -export const checkOverwriteDataViewCheckbox = () => { - cy.get(RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX) - .should('have.text', 'Apply changes to rules configured with data views') - .click(); - - cy.get(RULES_BULK_EDIT_OVERWRITE_DATA_VIEW_CHECKBOX) - .should('have.text', 'Apply changes to rules configured with data views') - .get('input') - .should('be.checked'); -}; - -export const selectTimelineTemplate = (timelineTitle: string) => { - recurse( - () => { - cy.get(RULES_BULK_EDIT_TIMELINE_TEMPLATES_SELECTOR).click(); - cy.get(TIMELINE_SEARCHBOX).clear(); - cy.get(TIMELINE_SEARCHBOX).type(`${timelineTitle}{enter}`); - // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.wait(500); - return cy.get(TIMELINE_SEARCHBOX).should(Cypress._.noop); - }, - ($el) => !$el.length - ); -}; - /** * check if rule tags filter populated with a list of tags * @param tags @@ -256,6 +230,13 @@ export const checkTagsInTagsFilter = (tags: string[], srOnlyText: string = '') = }); }; +// EDIT-SCHEDULE +export const clickUpdateScheduleMenuItem = () => { + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(UPDATE_SCHEDULE_MENU_ITEM).click(); + cy.get(UPDATE_SCHEDULE_MENU_ITEM).should('not.exist'); +}; + export const typeScheduleInterval = (interval: string) => { cy.get(UPDATE_SCHEDULE_INTERVAL_INPUT).find('input').type(`{selectAll}${interval.toString()}`); cy.get(UPDATE_SCHEDULE_INTERVAL_INPUT).find('input').blur(); @@ -312,3 +293,86 @@ export const assertRuleScheduleValues = ({ interval, lookback }: RuleSchedule) = cy.get('dd').eq(1).should('contain.text', lookback); }); }; + +// EDIT-ACTIONS +export const openBulkEditRuleActionsForm = () => { + cy.get(BULK_ACTIONS_BTN).click(); + cy.get(ADD_RULE_ACTIONS_MENU_ITEM).click(); + + cy.get(RULES_BULK_EDIT_FORM_TITLE).should('have.text', 'Add rule actions'); +}; + +export const openBulkActionsMenu = () => { + cy.get(BULK_ACTIONS_BTN).click(); +}; + +export const checkOverwriteRuleActionsCheckbox = () => { + cy.get(RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX) + .should('have.text', 'Overwrite all selected rules actions') + .find('input') + .click({ force: true }); + cy.get(RULES_BULK_EDIT_OVERWRITE_ACTIONS_CHECKBOX) + .should('have.text', 'Overwrite all selected rules actions') + .find('input') + .should('be.checked'); +}; + +// EDIT-FORM +export const submitBulkEditForm = () => cy.get(RULES_BULK_EDIT_FORM_CONFIRM_BTN).click(); + +export const waitForBulkEditActionToFinish = ({ + updatedCount, + skippedCount, + failedCount, + showDataViewsWarning = false, +}: { + updatedCount?: number; + skippedCount?: number; + failedCount?: number; + showDataViewsWarning?: boolean; +}) => { + cy.get(BULK_ACTIONS_PROGRESS_BTN).should('be.disabled'); + + if (updatedCount !== undefined) { + cy.contains(TOASTER_BODY, `You've successfully updated ${updatedCount} rule`); + } + if (failedCount !== undefined) { + if (failedCount === 1) { + cy.contains(TOASTER_BODY, `${failedCount} rule failed to update`); + } else { + cy.contains(TOASTER_BODY, `${failedCount} rules failed to update`); + } + } + if (skippedCount !== undefined) { + if (skippedCount === 1) { + cy.contains(TOASTER_BODY, `${skippedCount} rule was skipped`); + } else { + cy.contains(TOASTER_BODY, `${skippedCount} rules were skipped`); + } + if (showDataViewsWarning) { + cy.contains( + TOASTER_BODY, + 'If you did not select to apply changes to rules using Kibana data views, those rules were not updated and will continue using data views.' + ); + } + } +}; + +export const checkPrebuiltRulesCannotBeModified = (rulesCount: number) => { + cy.get(MODAL_CONFIRMATION_BODY).contains( + `${rulesCount} prebuilt Elastic rules (editing prebuilt rules is not supported)` + ); +}; + +export const checkMachineLearningRulesCannotBeModified = (rulesCount: number) => { + cy.get(MODAL_CONFIRMATION_BODY).contains( + `${rulesCount} custom machine learning rule (these rules don't have index patterns)` + ); +}; + +export const waitForMixedRulesBulkEditModal = (customRulesCount: number) => { + cy.get(MODAL_CONFIRMATION_TITLE).should( + 'have.text', + `This action can only be applied to ${customRulesCount} custom rules` + ); +}; diff --git a/x-pack/plugins/security_solution/jest.config.dev.js b/x-pack/plugins/security_solution/jest.config.dev.js index 1810adc42e362..1aaace56c5f88 100644 --- a/x-pack/plugins/security_solution/jest.config.dev.js +++ b/x-pack/plugins/security_solution/jest.config.dev.js @@ -12,5 +12,6 @@ module.exports = { '/x-pack/plugins/security_solution/common/*/jest.config.js', '/x-pack/plugins/security_solution/server/*/jest.config.js', '/x-pack/plugins/security_solution/public/*/jest.config.js', + '/x-pack/plugins/security_solution/scripts/junit_transformer/*/jest.config.js', ], }; diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 01419bb09e470..a564416154176 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -25,9 +25,10 @@ "cypress:dw:endpoint:open": "node ./scripts/start_cypress_parallel open --config-file ./public/management/cypress_endpoint.config.ts ts --ftr-config-file ../../../../../../x-pack/test/defend_workflows_cypress/endpoint_config", "cypress:investigations:run": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/investigations/**/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", "cypress:explore:run": "yarn cypress:run:reporter --browser chrome --spec './cypress/e2e/explore/**/*.cy.ts' --ftr-config-file ../../../../../../x-pack/test/security_solution_cypress/cli_config; status=$?; yarn junit:merge && exit $status", - "junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/", + "junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && yarn junit:transform && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/", "test:generate": "node scripts/endpoint/resolver_generator", "mappings:generate": "node scripts/mappings/mappings_generator", - "mappings:load": "node scripts/mappings/mappings_loader" + "mappings:load": "node scripts/mappings/mappings_loader", + "junit:transform": "node scripts/junit_transformer --pathPattern '../../../target/kibana-security-solution/cypress/results/*.xml' --rootDirectory ../../../ --reportName 'Security Solution Cypress' --writeInPlace" } } diff --git a/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx b/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx index f8859706bd433..9643efcb8b0b6 100644 --- a/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx +++ b/x-pack/plugins/security_solution/public/app/home/template_wrapper/index.tsx @@ -11,8 +11,7 @@ import { EuiThemeProvider, useEuiTheme } from '@elastic/eui'; import { IS_DRAGGING_CLASS_NAME } from '@kbn/securitysolution-t-grid'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import type { KibanaPageTemplateProps } from '@kbn/shared-ux-page-kibana-template'; -import { ExpandableFlyout, ExpandableFlyoutProvider } from '@kbn/expandable-flyout'; -import { expandableFlyoutDocumentsPanels } from '../../../flyout'; +import { SecuritySolutionFlyout, SecuritySolutionFlyoutContextProvider } from '../../../flyout'; import { useSecuritySolutionNavigation } from '../../../common/components/navigation/use_security_solution_navigation'; import { TimelineId } from '../../../../common/types/timeline'; import { getTimelineShowStatusByIdSelector } from '../../../timelines/components/flyout/selectors'; @@ -24,7 +23,6 @@ import { SecuritySolutionBottomBarProps, } from './bottom_bar'; import { useShowTimeline } from '../../../common/utils/timeline/use_show_timeline'; -import { useSyncFlyoutStateWithUrl } from '../../../flyout/url/use_sync_flyout_state_with_url'; /** * Need to apply the styles via a className to effect the containing bottom bar @@ -69,8 +67,6 @@ export const SecuritySolutionTemplateWrapper: React.FC + )} - + - + ); }); diff --git a/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/mock_data.ts b/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/mock_data.ts index 85cd90cc5226e..a0320edf2842b 100644 --- a/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/mock_data.ts +++ b/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/mock_data.ts @@ -19,8 +19,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '100', + fields: { + 'kibana.alert.rule.uuid': ['100'], }, }, ], @@ -34,8 +34,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '200', + fields: { + 'kibana.alert.rule.uuid': ['200'], }, }, ], @@ -49,8 +49,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '300', + fields: { + 'kibana.alert.rule.uuid': ['300'], }, }, ], @@ -64,8 +64,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '400', + fields: { + 'kibana.alert.rule.uuid': ['400'], }, }, ], @@ -79,8 +79,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '500', + fields: { + 'kibana.alert.rule.uuid': ['500'], }, }, ], @@ -94,8 +94,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '600', + fields: { + 'kibana.alert.rule.uuid': ['600'], }, }, ], @@ -109,8 +109,8 @@ export const mockAlertCountByRuleResult = { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': '700', + fields: { + 'kibana.alert.rule.uuid': ['700'], }, }, ], diff --git a/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/use_alert_count_by_rule_by_status.ts b/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/use_alert_count_by_rule_by_status.ts index c49fdb19310af..9c1b3ae525ac6 100644 --- a/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/use_alert_count_by_rule_by_status.ts +++ b/x-pack/plugins/security_solution/public/common/components/alert_count_by_status/use_alert_count_by_rule_by_status.ts @@ -117,6 +117,8 @@ export const useAlertCountByRuleByStatus: UseAlertCountByRuleByStatus = ({ return { items, isLoading, updatedAt }; }; +export const KIBANA_RULE_ID = 'kibana.alert.rule.uuid'; + export const buildRuleAlertsByEntityQuery = ({ additionalFilters = [], from, @@ -133,6 +135,8 @@ export const buildRuleAlertsByEntityQuery = ({ value: string; }) => ({ size: 0, + _source: false, + fields: [KIBANA_RULE_ID], query: { bool: { filter: [ @@ -145,11 +149,15 @@ export const buildRuleAlertsByEntityQuery = ({ }, }, }, - { - terms: { - 'kibana.alert.workflow_status': statuses, - }, - }, + ...(statuses?.length > 0 + ? [ + { + terms: { + 'kibana.alert.workflow_status': statuses, + }, + }, + ] + : []), { term: { [field]: value, @@ -167,7 +175,8 @@ export const buildRuleAlertsByEntityQuery = ({ aggs: { ruleUuid: { top_hits: { - _source: ['kibana.alert.rule.uuid'], + _source: false, + fields: [KIBANA_RULE_ID], size: 1, }, }, @@ -181,8 +190,8 @@ interface RuleUuidData extends GenericBuckets { hits: { hits: [ { - _source: { - 'kibana.alert.rule.uuid': string; + fields: { + 'kibana.alert.rule.uuid': string[]; }; } ]; @@ -201,7 +210,8 @@ const parseAlertCountByRuleItems = ( ): AlertCountByRuleByStatusItem[] => { const buckets = aggregations?.[ALERTS_BY_RULE_AGG].buckets ?? []; return buckets.map((bucket) => { - const uuid = bucket.ruleUuid.hits?.hits[0]?._source['kibana.alert.rule.uuid'] || ''; + const uuid = + firstNonNullValue(bucket.ruleUuid.hits?.hits[0]?.fields['kibana.alert.rule.uuid']) ?? ''; return { ruleName: firstNonNullValue(bucket.key) ?? '-', count: bucket.doc_count, diff --git a/x-pack/plugins/security_solution/public/common/components/ml/anomaly/use_anomalies_search.ts b/x-pack/plugins/security_solution/public/common/components/ml/anomaly/use_anomalies_search.ts index 9a5314d0a0d0b..d21e7a8087cbc 100644 --- a/x-pack/plugins/security_solution/public/common/components/ml/anomaly/use_anomalies_search.ts +++ b/x-pack/plugins/security_solution/public/common/components/ml/anomaly/use_anomalies_search.ts @@ -125,7 +125,7 @@ function formatResultData( ): AnomaliesCount[] { const unsortedAnomalies: AnomaliesCount[] = anomaliesJobs.map((job) => { const bucket = buckets.find(({ key }) => key === job?.id); - const hasUserName = has("entity.hits.hits[0]._source['user.name']", bucket); + const hasUserName = has("entity.hits.hits[0].fields['user.name']", bucket); return { name: job?.customSettings?.security_app_display_name ?? job.id, diff --git a/x-pack/plugins/security_solution/public/common/containers/tags/__mocks__/api.ts b/x-pack/plugins/security_solution/public/common/containers/tags/__mocks__/api.ts index 6f87ede894dd1..d7401ff19d916 100644 --- a/x-pack/plugins/security_solution/public/common/containers/tags/__mocks__/api.ts +++ b/x-pack/plugins/security_solution/public/common/containers/tags/__mocks__/api.ts @@ -6,11 +6,23 @@ */ export const MOCK_TAG_ID = 'securityTagId'; +export const MOCK_TAG_NAME = 'test tag'; export const DEFAULT_TAGS_RESPONSE = [ { id: MOCK_TAG_ID, - name: 'test tag', + attributes: { + name: MOCK_TAG_NAME, + description: 'test tag description', + color: '#2c7b82', + }, + }, +]; + +export const DEFAULT_CREATE_TAGS_RESPONSE = [ + { + id: MOCK_TAG_ID, + name: MOCK_TAG_NAME, description: 'test tag description', color: '#2c7b82', }, @@ -21,4 +33,4 @@ export const getTagsByName = jest .mockImplementation(() => Promise.resolve(DEFAULT_TAGS_RESPONSE)); export const createTag = jest .fn() - .mockImplementation(() => Promise.resolve(DEFAULT_TAGS_RESPONSE[0])); + .mockImplementation(() => Promise.resolve(DEFAULT_CREATE_TAGS_RESPONSE[0])); diff --git a/x-pack/plugins/security_solution/public/common/containers/tags/api.ts b/x-pack/plugins/security_solution/public/common/containers/tags/api.ts index 57b27318103fc..479ae07cc4eb7 100644 --- a/x-pack/plugins/security_solution/public/common/containers/tags/api.ts +++ b/x-pack/plugins/security_solution/public/common/containers/tags/api.ts @@ -6,20 +6,29 @@ */ import type { HttpSetup } from '@kbn/core/public'; -import type { Tag } from '@kbn/saved-objects-tagging-plugin/public'; -import type { TagAttributes } from '@kbn/saved-objects-tagging-plugin/common'; +import type { + ITagsClient, + TagAttributes, + Tag as TagResponse, +} from '@kbn/saved-objects-tagging-plugin/common'; import { INTERNAL_TAGS_URL } from '../../../../common/constants'; +export interface Tag { + id: string; + attributes: TagAttributes; +} + export const getTagsByName = ( { http, tagName }: { http: HttpSetup; tagName: string }, abortSignal?: AbortSignal ): Promise => http.get(INTERNAL_TAGS_URL, { query: { name: tagName }, signal: abortSignal }); -export const createTag = ( - { http, tag }: { http: HttpSetup; tag: Omit & { color?: string } }, - abortSignal?: AbortSignal -): Promise => - http.put(INTERNAL_TAGS_URL, { - body: JSON.stringify(tag), - signal: abortSignal, - }); +// Dashboard listing needs savedObjectsTaggingClient to work correctly with cache. +// https://github.com/elastic/kibana/issues/160723#issuecomment-1641904984 +export const createTag = ({ + savedObjectsTaggingClient, + tag, +}: { + savedObjectsTaggingClient: ITagsClient; + tag: TagAttributes; +}): Promise => savedObjectsTaggingClient.create(tag); diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/eql_search_response.mock.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/eql_search_response.mock.ts deleted file mode 100644 index 833fbf22a7259..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/eql_search_response.mock.ts +++ /dev/null @@ -1,259 +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 { EqlSearchStrategyResponse } from '@kbn/data-plugin/common'; -import type { Source } from './types'; -import type { EqlSearchResponse } from '../../../../common/detection_engine/types'; -import type { Connection } from '@elastic/elasticsearch'; - -export const getMockEqlResponse = (): EqlSearchStrategyResponse> => ({ - id: 'some-id', - rawResponse: { - body: { - hits: { - events: [ - { - _index: 'index', - _id: '1', - _source: { - '@timestamp': '2020-10-04T15:16:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '2', - _source: { - '@timestamp': '2020-10-04T15:50:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '3', - _source: { - '@timestamp': '2020-10-04T15:06:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '4', - _source: { - '@timestamp': '2020-10-04T15:15:54.368707900Z', - }, - }, - ], - total: { - value: 4, - relation: '', - }, - }, - is_partial: false, - is_running: false, - took: 300, - timed_out: false, - }, - headers: {}, - warnings: [], - meta: { - aborted: false, - attempts: 0, - context: null, - name: 'elasticsearch-js', - connection: {} as Connection, - request: { - params: { - body: JSON.stringify({ - filter: { - range: { - '@timestamp': { - gte: '2020-10-07T00:46:12.414Z', - lte: '2020-10-07T01:46:12.414Z', - format: 'strict_date_optional_time', - }, - }, - }, - }), - method: 'GET', - path: '/_eql/search/', - querystring: 'some query string', - }, - options: {}, - id: '', - }, - }, - statusCode: 200, - }, -}); - -export const getMockEndgameEqlResponse = (): EqlSearchStrategyResponse< - EqlSearchResponse -> => ({ - id: 'some-id', - rawResponse: { - body: { - hits: { - events: [ - { - _index: 'index', - _id: '1', - _source: { - '@timestamp': 1601824614000, - }, - }, - { - _index: 'index', - _id: '2', - _source: { - '@timestamp': 1601826654368, - }, - }, - { - _index: 'index', - _id: '3', - _source: { - '@timestamp': 1601824014368, - }, - }, - { - _index: 'index', - _id: '4', - _source: { - '@timestamp': 1601824554368, - }, - }, - ], - total: { - value: 4, - relation: '', - }, - }, - is_partial: false, - is_running: false, - took: 300, - timed_out: false, - }, - headers: {}, - warnings: [], - meta: { - aborted: false, - attempts: 0, - context: null, - name: 'elasticsearch-js', - connection: {} as Connection, - request: { - params: { - body: JSON.stringify({ - filter: { - range: { - '@timestamp': { - gte: '2020-10-07T00:46:12.414Z', - lte: '2020-10-07T01:46:12.414Z', - format: 'strict_date_optional_time', - }, - }, - }, - }), - method: 'GET', - path: '/_eql/search/', - querystring: 'some query string', - }, - options: {}, - id: '', - }, - }, - statusCode: 200, - }, -}); - -export const getMockEqlSequenceResponse = (): EqlSearchStrategyResponse< - EqlSearchResponse -> => ({ - id: 'some-id', - rawResponse: { - body: { - hits: { - sequences: [ - { - join_keys: [], - events: [ - { - _index: 'index', - _id: '1', - _source: { - '@timestamp': '2020-10-04T15:16:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '2', - _source: { - '@timestamp': '2020-10-04T15:50:54.368707900Z', - }, - }, - ], - }, - { - join_keys: [], - events: [ - { - _index: 'index', - _id: '3', - _source: { - '@timestamp': '2020-10-04T15:06:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '4', - _source: { - '@timestamp': '2020-10-04T15:15:54.368707900Z', - }, - }, - ], - }, - ], - total: { - value: 4, - relation: '', - }, - }, - is_partial: false, - is_running: false, - took: 300, - timed_out: false, - }, - headers: {}, - warnings: [], - meta: { - aborted: false, - attempts: 0, - context: null, - name: 'elasticsearch-js', - connection: {} as Connection, - request: { - params: { - body: JSON.stringify({ - filter: { - range: { - '@timestamp': { - gte: '2020-10-07T00:46:12.414Z', - lte: '2020-10-07T01:46:12.414Z', - format: 'strict_date_optional_time', - }, - }, - }, - }), - method: 'GET', - path: '/_eql/search/', - querystring: 'some query string', - }, - options: {}, - id: '', - }, - }, - statusCode: 200, - }, -}); diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/helpers.test.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/helpers.test.ts deleted file mode 100644 index a93a71f8382a1..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/helpers.test.ts +++ /dev/null @@ -1,781 +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 moment from 'moment'; - -import type { EqlSearchStrategyResponse } from '@kbn/data-plugin/common'; -import type { Source } from './types'; -import type { EqlSearchResponse } from '../../../../common/detection_engine/types'; -import type { inputsModel } from '../../store'; - -import { - calculateBucketForHour, - calculateBucketForDay, - getEqlAggsData, - createIntervalArray, - getInterval, - formatInspect, - getEventsToBucket, -} from './helpers'; -import { - getMockEndgameEqlResponse, - getMockEqlResponse, - getMockEqlSequenceResponse, -} from './eql_search_response.mock'; - -describe('eql/helpers', () => { - describe('calculateBucketForHour', () => { - test('returns 2 if the difference in times is 2 minutes', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T05:56:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(2); - }); - - test('returns 10 if the difference in times is 8-10 minutes', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T05:48:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(10); - }); - - test('returns 16 if the difference in times is 10-15 minutes', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T05:42:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(16); - }); - - test('returns 60 if the difference in times is 58-60 minutes', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T04:58:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(60); - }); - - test('returns exact time difference if it is a multiple of 2', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T05:37:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(20); - }); - - test('returns 0 if times are equal', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T05:57:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(0); - }); - - test('returns 2 if the difference in times is 2 minutes but arguments are flipped', () => { - const diff = calculateBucketForHour( - Date.parse('2020-02-20T05:57:54.037Z'), - Date.parse('2020-02-20T05:56:54.037Z') - ); - - expect(diff).toEqual(2); - }); - }); - - describe('calculateBucketForDay', () => { - test('returns 0 if two dates are equivalent', () => { - const diff = calculateBucketForDay( - Date.parse('2020-02-20T05:57:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(0); - }); - - test('returns 1 if the difference in times is 60 minutes', () => { - const diff = calculateBucketForDay( - Date.parse('2020-02-20T05:17:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(1); - }); - - test('returns 2 if the difference in times is 60-120 minutes', () => { - const diff = calculateBucketForDay( - Date.parse('2020-02-20T03:57:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(2); - }); - - test('returns 3 if the difference in times is 120-180 minutes', () => { - const diff = calculateBucketForDay( - Date.parse('2020-02-20T03:56:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(3); - }); - - test('returns 4 if the difference in times is 180-240 minutes', () => { - const diff = calculateBucketForDay( - Date.parse('2020-02-20T02:15:54.037Z'), - Date.parse('2020-02-20T05:57:54.037Z') - ); - - expect(diff).toEqual(4); - }); - - test('returns 2 if the difference in times is 60-120 minutes but arguments are flipped', () => { - const diff = calculateBucketForDay( - Date.parse('2020-02-20T05:57:54.037Z'), - Date.parse('2020-02-20T03:59:54.037Z') - ); - - expect(diff).toEqual(2); - }); - }); - - describe('getEqlAggsData', () => { - describe('non-sequence', () => { - // NOTE: We previously expected @timestamp to be a string, however, - // date can also be a number (like for endgame-*) - test('it works when @timestamp is a number', () => { - const mockResponse = getMockEndgameEqlResponse(); - - const aggs = getEqlAggsData( - mockResponse, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - false - ); - - const date1 = moment(aggs.data[0].x); - const date2 = moment(aggs.data[1].x); - // This will be in ms - const diff = date1.diff(date2); - - expect(diff).toEqual(120000); - expect(aggs.data).toHaveLength(31); - expect(aggs.data).toEqual([ - { g: 'hits', x: 1601827200368, y: 0 }, - { g: 'hits', x: 1601827080368, y: 0 }, - { g: 'hits', x: 1601826960368, y: 0 }, - { g: 'hits', x: 1601826840368, y: 0 }, - { g: 'hits', x: 1601826720368, y: 0 }, - { g: 'hits', x: 1601826600368, y: 1 }, - { g: 'hits', x: 1601826480368, y: 0 }, - { g: 'hits', x: 1601826360368, y: 0 }, - { g: 'hits', x: 1601826240368, y: 0 }, - { g: 'hits', x: 1601826120368, y: 0 }, - { g: 'hits', x: 1601826000368, y: 0 }, - { g: 'hits', x: 1601825880368, y: 0 }, - { g: 'hits', x: 1601825760368, y: 0 }, - { g: 'hits', x: 1601825640368, y: 0 }, - { g: 'hits', x: 1601825520368, y: 0 }, - { g: 'hits', x: 1601825400368, y: 0 }, - { g: 'hits', x: 1601825280368, y: 0 }, - { g: 'hits', x: 1601825160368, y: 0 }, - { g: 'hits', x: 1601825040368, y: 0 }, - { g: 'hits', x: 1601824920368, y: 0 }, - { g: 'hits', x: 1601824800368, y: 0 }, - { g: 'hits', x: 1601824680368, y: 0 }, - { g: 'hits', x: 1601824560368, y: 2 }, - { g: 'hits', x: 1601824440368, y: 0 }, - { g: 'hits', x: 1601824320368, y: 0 }, - { g: 'hits', x: 1601824200368, y: 0 }, - { g: 'hits', x: 1601824080368, y: 0 }, - { g: 'hits', x: 1601823960368, y: 1 }, - { g: 'hits', x: 1601823840368, y: 0 }, - { g: 'hits', x: 1601823720368, y: 0 }, - { g: 'hits', x: 1601823600368, y: 0 }, - ]); - }); - - test('it returns results bucketed into 2 min intervals when range is "h"', () => { - const mockResponse = getMockEqlResponse(); - - const aggs = getEqlAggsData( - mockResponse, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - false - ); - - const date1 = moment(aggs.data[0].x); - const date2 = moment(aggs.data[1].x); - // This will be in ms - const diff = date1.diff(date2); - - expect(diff).toEqual(120000); - expect(aggs.data).toHaveLength(31); - expect(aggs.data).toEqual([ - { g: 'hits', x: 1601827200368, y: 0 }, - { g: 'hits', x: 1601827080368, y: 0 }, - { g: 'hits', x: 1601826960368, y: 0 }, - { g: 'hits', x: 1601826840368, y: 0 }, - { g: 'hits', x: 1601826720368, y: 0 }, - { g: 'hits', x: 1601826600368, y: 1 }, - { g: 'hits', x: 1601826480368, y: 0 }, - { g: 'hits', x: 1601826360368, y: 0 }, - { g: 'hits', x: 1601826240368, y: 0 }, - { g: 'hits', x: 1601826120368, y: 0 }, - { g: 'hits', x: 1601826000368, y: 0 }, - { g: 'hits', x: 1601825880368, y: 0 }, - { g: 'hits', x: 1601825760368, y: 0 }, - { g: 'hits', x: 1601825640368, y: 0 }, - { g: 'hits', x: 1601825520368, y: 0 }, - { g: 'hits', x: 1601825400368, y: 0 }, - { g: 'hits', x: 1601825280368, y: 0 }, - { g: 'hits', x: 1601825160368, y: 0 }, - { g: 'hits', x: 1601825040368, y: 0 }, - { g: 'hits', x: 1601824920368, y: 0 }, - { g: 'hits', x: 1601824800368, y: 0 }, - { g: 'hits', x: 1601824680368, y: 0 }, - { g: 'hits', x: 1601824560368, y: 2 }, - { g: 'hits', x: 1601824440368, y: 0 }, - { g: 'hits', x: 1601824320368, y: 0 }, - { g: 'hits', x: 1601824200368, y: 0 }, - { g: 'hits', x: 1601824080368, y: 0 }, - { g: 'hits', x: 1601823960368, y: 1 }, - { g: 'hits', x: 1601823840368, y: 0 }, - { g: 'hits', x: 1601823720368, y: 0 }, - { g: 'hits', x: 1601823600368, y: 0 }, - ]); - }); - - test('it returns results bucketed into 1 hour intervals when range is "d"', () => { - const mockResponse = getMockEqlResponse(); - const response: EqlSearchStrategyResponse> = { - ...mockResponse, - rawResponse: { - ...mockResponse.rawResponse, - body: { - is_partial: false, - is_running: false, - timed_out: false, - took: 15, - hits: { - events: [ - { - _index: 'index', - _id: '1', - _source: { - '@timestamp': '2020-10-04T15:16:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '2', - _source: { - '@timestamp': '2020-10-04T05:50:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '3', - _source: { - '@timestamp': '2020-10-04T18:06:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '4', - _source: { - '@timestamp': '2020-10-04T23:15:54.368707900Z', - }, - }, - ], - total: { - value: 4, - relation: '', - }, - }, - }, - }, - }; - - const aggs = getEqlAggsData( - response, - 'd', - '2020-10-04T23:50:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - false - ); - const date1 = moment(aggs.data[0].x); - const date2 = moment(aggs.data[1].x); - // This'll be in ms - const diff = date1.diff(date2); - - expect(diff).toEqual(3600000); - expect(aggs.data).toHaveLength(25); - expect(aggs.data).toEqual([ - { g: 'hits', x: 1601855400368, y: 0 }, - { g: 'hits', x: 1601851800368, y: 1 }, - { g: 'hits', x: 1601848200368, y: 0 }, - { g: 'hits', x: 1601844600368, y: 0 }, - { g: 'hits', x: 1601841000368, y: 0 }, - { g: 'hits', x: 1601837400368, y: 0 }, - { g: 'hits', x: 1601833800368, y: 1 }, - { g: 'hits', x: 1601830200368, y: 0 }, - { g: 'hits', x: 1601826600368, y: 0 }, - { g: 'hits', x: 1601823000368, y: 1 }, - { g: 'hits', x: 1601819400368, y: 0 }, - { g: 'hits', x: 1601815800368, y: 0 }, - { g: 'hits', x: 1601812200368, y: 0 }, - { g: 'hits', x: 1601808600368, y: 0 }, - { g: 'hits', x: 1601805000368, y: 0 }, - { g: 'hits', x: 1601801400368, y: 0 }, - { g: 'hits', x: 1601797800368, y: 0 }, - { g: 'hits', x: 1601794200368, y: 0 }, - { g: 'hits', x: 1601790600368, y: 1 }, - { g: 'hits', x: 1601787000368, y: 0 }, - { g: 'hits', x: 1601783400368, y: 0 }, - { g: 'hits', x: 1601779800368, y: 0 }, - { g: 'hits', x: 1601776200368, y: 0 }, - { g: 'hits', x: 1601772600368, y: 0 }, - { g: 'hits', x: 1601769000368, y: 0 }, - ]); - }); - - test('it correctly returns total hits', () => { - const mockResponse = getMockEqlResponse(); - - const aggs = getEqlAggsData( - mockResponse, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - false - ); - - expect(aggs.totalCount).toEqual(4); - }); - - test('it returns array with each item having a "total" of 0 if response returns no hits', () => { - const mockResponse = getMockEqlResponse(); - const response: EqlSearchStrategyResponse> = { - ...mockResponse, - rawResponse: { - ...mockResponse.rawResponse, - body: { - is_partial: false, - is_running: false, - timed_out: false, - took: 15, - hits: { - total: { - value: 0, - relation: '', - }, - }, - }, - }, - }; - - const aggs = getEqlAggsData( - response, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - false - ); - - expect(aggs.data.every(({ y }) => y === 0)).toBeTruthy(); - expect(aggs.totalCount).toEqual(0); - }); - }); - - describe('sequence', () => { - test('it returns results bucketed into 2 min intervals when range is "h"', () => { - const mockResponse = getMockEqlSequenceResponse(); - - const aggs = getEqlAggsData( - mockResponse, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - true - ); - - const date1 = moment(aggs.data[0].x); - const date2 = moment(aggs.data[1].x); - // This will be in ms - const diff = date1.diff(date2); - - expect(diff).toEqual(120000); - expect(aggs.data).toHaveLength(31); - expect(aggs.data).toEqual([ - { g: 'hits', x: 1601827200368, y: 0 }, - { g: 'hits', x: 1601827080368, y: 0 }, - { g: 'hits', x: 1601826960368, y: 0 }, - { g: 'hits', x: 1601826840368, y: 0 }, - { g: 'hits', x: 1601826720368, y: 0 }, - { g: 'hits', x: 1601826600368, y: 1 }, - { g: 'hits', x: 1601826480368, y: 0 }, - { g: 'hits', x: 1601826360368, y: 0 }, - { g: 'hits', x: 1601826240368, y: 0 }, - { g: 'hits', x: 1601826120368, y: 0 }, - { g: 'hits', x: 1601826000368, y: 0 }, - { g: 'hits', x: 1601825880368, y: 0 }, - { g: 'hits', x: 1601825760368, y: 0 }, - { g: 'hits', x: 1601825640368, y: 0 }, - { g: 'hits', x: 1601825520368, y: 0 }, - { g: 'hits', x: 1601825400368, y: 0 }, - { g: 'hits', x: 1601825280368, y: 0 }, - { g: 'hits', x: 1601825160368, y: 0 }, - { g: 'hits', x: 1601825040368, y: 0 }, - { g: 'hits', x: 1601824920368, y: 0 }, - { g: 'hits', x: 1601824800368, y: 0 }, - { g: 'hits', x: 1601824680368, y: 0 }, - { g: 'hits', x: 1601824560368, y: 1 }, - { g: 'hits', x: 1601824440368, y: 0 }, - { g: 'hits', x: 1601824320368, y: 0 }, - { g: 'hits', x: 1601824200368, y: 0 }, - { g: 'hits', x: 1601824080368, y: 0 }, - { g: 'hits', x: 1601823960368, y: 0 }, - { g: 'hits', x: 1601823840368, y: 0 }, - { g: 'hits', x: 1601823720368, y: 0 }, - { g: 'hits', x: 1601823600368, y: 0 }, - ]); - }); - - test('it returns results bucketed into 1 hour intervals when range is "d"', () => { - const mockResponse = getMockEqlSequenceResponse(); - const response: EqlSearchStrategyResponse> = { - ...mockResponse, - rawResponse: { - ...mockResponse.rawResponse, - body: { - is_partial: false, - is_running: false, - timed_out: false, - took: 15, - hits: { - sequences: [ - { - join_keys: [], - events: [ - { - _index: 'index', - _id: '1', - _source: { - '@timestamp': '2020-10-04T15:16:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '2', - _source: { - '@timestamp': '2020-10-04T05:50:54.368707900Z', - }, - }, - ], - }, - { - join_keys: [], - events: [ - { - _index: 'index', - _id: '3', - _source: { - '@timestamp': '2020-10-04T18:06:54.368707900Z', - }, - }, - { - _index: 'index', - _id: '4', - _source: { - '@timestamp': '2020-10-04T23:15:54.368707900Z', - }, - }, - ], - }, - ], - total: { - value: 4, - relation: '', - }, - }, - }, - }, - }; - - const aggs = getEqlAggsData( - response, - 'd', - '2020-10-04T23:50:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - true - ); - const date1 = moment(aggs.data[0].x); - const date2 = moment(aggs.data[1].x); - // This'll be in ms - const diff = date1.diff(date2); - - expect(diff).toEqual(3600000); - expect(aggs.data).toHaveLength(25); - expect(aggs.data).toEqual([ - { g: 'hits', x: 1601855400368, y: 0 }, - { g: 'hits', x: 1601851800368, y: 1 }, - { g: 'hits', x: 1601848200368, y: 0 }, - { g: 'hits', x: 1601844600368, y: 0 }, - { g: 'hits', x: 1601841000368, y: 0 }, - { g: 'hits', x: 1601837400368, y: 0 }, - { g: 'hits', x: 1601833800368, y: 0 }, - { g: 'hits', x: 1601830200368, y: 0 }, - { g: 'hits', x: 1601826600368, y: 0 }, - { g: 'hits', x: 1601823000368, y: 0 }, - { g: 'hits', x: 1601819400368, y: 0 }, - { g: 'hits', x: 1601815800368, y: 0 }, - { g: 'hits', x: 1601812200368, y: 0 }, - { g: 'hits', x: 1601808600368, y: 0 }, - { g: 'hits', x: 1601805000368, y: 0 }, - { g: 'hits', x: 1601801400368, y: 0 }, - { g: 'hits', x: 1601797800368, y: 0 }, - { g: 'hits', x: 1601794200368, y: 0 }, - { g: 'hits', x: 1601790600368, y: 1 }, - { g: 'hits', x: 1601787000368, y: 0 }, - { g: 'hits', x: 1601783400368, y: 0 }, - { g: 'hits', x: 1601779800368, y: 0 }, - { g: 'hits', x: 1601776200368, y: 0 }, - { g: 'hits', x: 1601772600368, y: 0 }, - { g: 'hits', x: 1601769000368, y: 0 }, - ]); - }); - - test('it correctly returns total hits', () => { - const mockResponse = getMockEqlSequenceResponse(); - - const aggs = getEqlAggsData( - mockResponse, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - true - ); - - expect(aggs.totalCount).toEqual(4); - }); - - test('it returns array with each item having a "total" of 0 if response returns no hits', () => { - const mockResponse = getMockEqlSequenceResponse(); - const response: EqlSearchStrategyResponse> = { - ...mockResponse, - rawResponse: { - ...mockResponse.rawResponse, - body: { - is_partial: false, - is_running: false, - timed_out: false, - took: 15, - hits: { - total: { - value: 0, - relation: '', - }, - }, - }, - }, - }; - - const aggs = getEqlAggsData( - response, - 'h', - '2020-10-04T16:00:00.368707900Z', - jest.fn() as inputsModel.Refetch, - ['foo-*'], - true - ); - - expect(aggs.data.every(({ y }) => y === 0)).toBeTruthy(); - expect(aggs.totalCount).toEqual(0); - }); - }); - }); - - describe('createIntervalArray', () => { - test('returns array of 12 numbers from 0 to 60 by 5', () => { - const arrayOfNumbers = createIntervalArray(0, 12, 5); - expect(arrayOfNumbers).toEqual([0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60]); - }); - - test('returns array of 5 numbers from 0 to 10 by 2', () => { - const arrayOfNumbers = createIntervalArray(0, 5, 2); - expect(arrayOfNumbers).toEqual([0, 2, 4, 6, 8, 10]); - }); - - test('returns array of numbers from start param to end param if multiplier is 1', () => { - const arrayOfNumbers = createIntervalArray(0, 12, 1); - expect(arrayOfNumbers).toEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); - }); - }); - - describe('getInterval', () => { - test('returns object with 2 minute interval timestamps if range is "h"', () => { - const intervals = getInterval('h', 1601856270140); - - const allAre2MinApart = Object.keys(intervals).every((int) => { - const interval1 = intervals[int]; - const interval2 = intervals[`${Number(int) + 2}`]; - if (interval1 != null && interval2 != null) { - const date1 = moment(Number(interval1.timestamp)); - const date2 = moment(Number(interval2.timestamp)); - // This'll be in ms - const diff = date1.diff(date2); - - return diff === 120000; - } - - return true; - }); - - expect(allAre2MinApart).toBeTruthy(); - }); - - test('returns object with 1 hour interval timestamps if range is "d"', () => { - const intervals = getInterval('d', 1601856270140); - - const allAre1HourApart = Object.keys(intervals).every((int) => { - const interval1 = intervals[int]; - const interval2 = intervals[`${Number(int) + 1}`]; - if (interval1 != null && interval2 != null) { - const date1 = moment(Number(interval1.timestamp)); - const date2 = moment(Number(interval2.timestamp)); - // This'll be in ms - const diff = date1.diff(date2); - - return diff === 3600000; - } - - return true; - }); - - expect(allAre1HourApart).toBeTruthy(); - }); - - test('returns error if range is anything other than "h" or "d"', () => { - expect(() => getInterval('m', 1601856270140)).toThrow(); - }); - }); - - describe('formatInspect', () => { - test('it should return "dsl" with response params and index info', () => { - const { dsl } = formatInspect(getMockEqlResponse(), ['foo-*']); - - expect(JSON.parse(dsl[0])).toEqual({ - body: { - filter: { - range: { - '@timestamp': { - format: 'strict_date_optional_time', - gte: '2020-10-07T00:46:12.414Z', - lte: '2020-10-07T01:46:12.414Z', - }, - }, - }, - }, - index: ['foo-*'], - method: 'GET', - path: '/_eql/search/', - querystring: 'some query string', - }); - }); - - test('it should return "response"', () => { - const mockResponse = getMockEqlResponse(); - const { response } = formatInspect(mockResponse, ['foo-*']); - - expect(JSON.parse(response[0])).toEqual(mockResponse.rawResponse.body); - }); - }); - - describe('getEventsToBucket', () => { - test('returns events for non-sequence queries', () => { - const events = getEventsToBucket(false, getMockEqlResponse()); - - expect(events).toEqual([ - { _id: '1', _index: 'index', _source: { '@timestamp': '2020-10-04T15:16:54.368707900Z' } }, - { _id: '2', _index: 'index', _source: { '@timestamp': '2020-10-04T15:50:54.368707900Z' } }, - { _id: '3', _index: 'index', _source: { '@timestamp': '2020-10-04T15:06:54.368707900Z' } }, - { _id: '4', _index: 'index', _source: { '@timestamp': '2020-10-04T15:15:54.368707900Z' } }, - ]); - }); - - test('returns empty array if no hits', () => { - const resp = getMockEqlResponse(); - const mockResponse: EqlSearchStrategyResponse> = { - ...resp, - rawResponse: { - ...resp.rawResponse, - body: { - ...resp.rawResponse.body, - hits: { - total: { - value: 0, - relation: '', - }, - }, - }, - }, - }; - const events = getEventsToBucket(false, mockResponse); - - expect(events).toEqual([]); - }); - - test('returns events for sequence queries', () => { - const events = getEventsToBucket(true, getMockEqlSequenceResponse()); - - expect(events).toEqual([ - { _id: '2', _index: 'index', _source: { '@timestamp': '2020-10-04T15:50:54.368707900Z' } }, - { _id: '4', _index: 'index', _source: { '@timestamp': '2020-10-04T15:15:54.368707900Z' } }, - ]); - }); - - test('returns empty array if no sequences', () => { - const resp = getMockEqlSequenceResponse(); - const mockResponse: EqlSearchStrategyResponse> = { - ...resp, - rawResponse: { - ...resp.rawResponse, - body: { - ...resp.rawResponse.body, - hits: { - total: { - value: 0, - relation: '', - }, - }, - }, - }, - }; - const events = getEventsToBucket(true, mockResponse); - - expect(events).toEqual([]); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/helpers.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/helpers.ts deleted file mode 100644 index 87150062c3682..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/helpers.ts +++ /dev/null @@ -1,183 +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 moment from 'moment'; -import type { Unit } from '@kbn/datemath'; -import type { EqlSearchStrategyResponse } from '@kbn/data-plugin/common'; -import type { inputsModel } from '../../store'; - -import type { InspectResponse } from '../../../types'; -import type { EqlPreviewResponse, Source } from './types'; -import type { BaseHit, EqlSearchResponse } from '../../../../common/detection_engine/types'; - -type EqlAggBuckets = Record; - -/** - * Calculates which 2 min bucket segment, event should be sorted into - * @param eventTimestamp The event to be bucketed timestamp - * @param relativeNow The timestamp we are using to calculate how far from 'now' event occurred - */ -export const calculateBucketForHour = (eventTimestamp: number, relativeNow: number): number => { - const diff = Math.abs(relativeNow - eventTimestamp); - const minutes = Math.floor(diff / 60000); - return Math.ceil(minutes / 2) * 2; -}; - -/** - * Calculates which 1 hour bucket segment, event should be sorted into - * @param eventTimestamp The event to be bucketed timestamp - * @param relativeNow The timestamp we are using to calculate how far from 'now' event occurred - */ -export const calculateBucketForDay = (eventTimestamp: number, relativeNow: number): number => { - const diff = Math.abs(relativeNow - eventTimestamp); - const minutes = Math.floor(diff / 60000); - return Math.ceil(minutes / 60); -}; - -/** - * Formats the response for the UI inspect modal - * @param response The query search response - * @param indices The indices the query searched - * TODO: Update eql search strategy to return index in it's meta - * params info, currently not being returned, but expected for - * inspect modal display - */ -export const formatInspect = ( - response: EqlSearchStrategyResponse>, - indices: string[] -): InspectResponse => { - const body = response.rawResponse.meta.request.params.body; - const bodyParse: Record | undefined = - typeof body === 'string' ? JSON.parse(body) : body; - return { - dsl: [ - JSON.stringify( - { ...response.rawResponse.meta.request.params, index: indices, body: bodyParse }, - null, - 2 - ), - ], - response: [JSON.stringify(response.rawResponse.body, null, 2)], - }; -}; - -/** - * Gets the events out of the response based on type of query - * @param isSequence Is the eql query a sequence query - * @param response The query search response - */ -export const getEventsToBucket = ( - isSequence: boolean, - response: EqlSearchStrategyResponse> -): Array> => { - const hits = response.rawResponse.body.hits ?? []; - if (isSequence) { - return ( - hits.sequences?.map((seq) => { - return seq.events[seq.events.length - 1]; - }) ?? [] - ); - } else { - return hits.events ?? []; - } -}; - -/** - * Eql does not support aggregations, this is an in-memory - * hand-spun aggregation for the events to give the user a visual - * representation of their query results - * @param response The query search response - * @param range User chosen timeframe (last hour, day) - * @param to Based on range chosen - * @param refetch Callback used in inspect button, ref just passed through - * @param indices Indices searched by query - * @param isSequence Is the eql query a sequence query - */ -export const getEqlAggsData = ( - response: EqlSearchStrategyResponse>, - range: Unit, - to: string, - refetch: inputsModel.Refetch, - indices: string[], - isSequence: boolean -): EqlPreviewResponse => { - const { dsl, response: inspectResponse } = formatInspect(response, indices); - const relativeNow = Date.parse(to); - const accumulator = getInterval(range, relativeNow); - const events = getEventsToBucket(isSequence, response); - const totalCount = response.rawResponse.body.hits.total.value; - - const buckets = events.reduce((acc, hit) => { - const timestamp = hit._source['@timestamp']; - if (timestamp == null) { - return acc; - } - const eventDate = new Date(timestamp).toISOString(); - const eventTimestamp = Date.parse(eventDate); - const bucket = - range === 'h' - ? calculateBucketForHour(eventTimestamp, relativeNow) - : calculateBucketForDay(eventTimestamp, relativeNow); - if (acc[bucket] != null) { - acc[bucket].total += 1; - } - return acc; - }, accumulator); - const data = Object.keys(buckets).map((key) => { - return { x: Number(buckets[key].timestamp), y: buckets[key].total, g: 'hits' }; - }); - - const isAllZeros = data.every(({ y }) => y === 0); - - return { - data, - totalCount: isAllZeros ? 0 : totalCount, - inspect: { - dsl, - response: inspectResponse, - }, - refetch, - }; -}; - -/** - * Helper method to create an array to be used for calculating bucket intervals - * @param start - * @param end - * @param multiplier - */ -export const createIntervalArray = (start: number, end: number, multiplier: number): number[] => { - return Array(end - start + 1) - .fill(0) - .map((_, idx) => start + idx * multiplier); -}; - -/** - * Helper method to create an array to be used for calculating bucket intervals - * @param range User chosen timeframe (last hour, day) - * @param relativeNow Based on range chosen - */ -export const getInterval = (range: Unit, relativeNow: number): EqlAggBuckets => { - switch (range) { - case 'h': - return createIntervalArray(0, 30, 2).reduce((acc, int) => { - return { - ...acc, - [int]: { timestamp: moment(relativeNow).subtract(int, 'm').format('x'), total: 0 }, - }; - }, {}); - case 'd': - return createIntervalArray(0, 24, 1).reduce((acc, int) => { - return { - ...acc, - [int]: { timestamp: moment(relativeNow).subtract(int, 'h').format('x'), total: 0 }, - }; - }, {}); - default: - throw new RangeError('Invalid time range selected. Must be "Last hour" or "Last day".'); - } -}; diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/types.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/types.ts deleted file mode 100644 index d46f79c286a74..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/types.ts +++ /dev/null @@ -1,31 +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 { Unit } from '@kbn/datemath'; - -import type { InspectResponse } from '../../../types'; -import type { ChartData } from '../../components/charts/common'; -import type { inputsModel } from '../../store'; - -export interface EqlPreviewRequest { - to: string; - from: string; - interval: Unit; - query: string; - index: string[]; -} - -export interface EqlPreviewResponse { - data: ChartData[]; - totalCount: number; - inspect: InspectResponse; - refetch: inputsModel.Refetch; -} - -export interface Source { - '@timestamp': string | number; -} diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/use_eql_preview.test.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/use_eql_preview.test.ts deleted file mode 100644 index 166d89560e4d0..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/use_eql_preview.test.ts +++ /dev/null @@ -1,203 +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 { Unit } from '@kbn/datemath'; -import { renderHook, act } from '@testing-library/react-hooks'; -import { of, throwError } from 'rxjs'; -import { delay } from 'rxjs/operators'; - -import * as i18n from '../translations'; -import type { EqlSearchStrategyResponse } from '@kbn/data-plugin/common'; -import type { Source } from './types'; -import type { EqlSearchResponse } from '../../../../common/detection_engine/types'; -import { useKibana } from '../../lib/kibana'; -import { useEqlPreview } from '.'; -import { getMockEqlResponse } from './eql_search_response.mock'; -import { useAppToasts } from '../use_app_toasts'; - -jest.mock('../../lib/kibana'); -jest.mock('../use_app_toasts'); - -describe('useEqlPreview', () => { - const params = { - to: '2020-10-04T16:00:54.368707900Z', - query: 'file where true', - index: ['foo-*', 'bar-*'], - interval: 'h' as Unit, - from: '2020-10-04T15:00:54.368707900Z', - }; - - let addErrorMock: jest.Mock; - let addSuccessMock: jest.Mock; - let addWarningMock: jest.Mock; - - beforeEach(() => { - addErrorMock = jest.fn(); - addSuccessMock = jest.fn(); - addWarningMock = jest.fn(); - (useAppToasts as jest.Mock).mockImplementation(() => ({ - addError: addErrorMock, - addWarning: addWarningMock, - addSuccess: addSuccessMock, - })); - - (useKibana().services.data.search.search as jest.Mock).mockReturnValue( - of(getMockEqlResponse()) - ); - }); - - it('should initiate hook', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useEqlPreview()); - await waitForNextUpdate(); - - expect(result.current[0]).toBeFalsy(); - expect(typeof result.current[1]).toEqual('function'); - expect(result.current[2]).toEqual({ - data: [], - inspect: { dsl: [], response: [] }, - refetch: result.current[2].refetch, - totalCount: 0, - }); - }); - }); - - it('should invoke search with passed in params', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useEqlPreview()); - - await waitForNextUpdate(); - - result.current[1](params); - - const mockCalls = (useKibana().services.data.search.search as jest.Mock).mock.calls; - - expect(mockCalls.length).toEqual(1); - expect(mockCalls[0][0].params.body.query).toEqual('file where true'); - expect(mockCalls[0][0].params.body.filter).toEqual({ - range: { - '@timestamp': { - format: 'strict_date_optional_time', - gte: '2020-10-04T15:00:54.368707900Z', - lte: '2020-10-04T16:00:54.368707900Z', - }, - }, - }); - expect(mockCalls[0][0].params.index).toBe('foo-*,bar-*'); - }); - }); - - it('should resolve values after search is invoked', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useEqlPreview()); - - await waitForNextUpdate(); - - result.current[1](params); - - expect(result.current[0]).toBeFalsy(); - expect(typeof result.current[1]).toEqual('function'); - expect(result.current[2].totalCount).toEqual(4); - expect(result.current[2].data.length).toBeGreaterThan(0); - expect(result.current[2].inspect.dsl.length).toBeGreaterThan(0); - expect(result.current[2].inspect.response.length).toBeGreaterThan(0); - }); - }); - - it('should not resolve values after search is invoked if component unmounted', async () => { - await act(async () => { - (useKibana().services.data.search.search as jest.Mock).mockReturnValue( - of(getMockEqlResponse()).pipe(delay(5000)) - ); - const { result, waitForNextUpdate, unmount } = renderHook(() => useEqlPreview()); - - await waitForNextUpdate(); - - result.current[1](params); - - unmount(); - - expect(result.current[0]).toBeTruthy(); - expect(result.current[2].totalCount).toEqual(0); - expect(result.current[2].data.length).toEqual(0); - expect(result.current[2].inspect.dsl.length).toEqual(0); - expect(result.current[2].inspect.response.length).toEqual(0); - }); - }); - - it('should not resolve new values on search if response is error response', async () => { - await act(async () => { - (useKibana().services.data.search.search as jest.Mock).mockReturnValue( - of>>({ - ...getMockEqlResponse(), - isRunning: false, - isPartial: true, - }) - ); - - const { result, waitForNextUpdate } = renderHook(() => useEqlPreview()); - - await waitForNextUpdate(); - - result.current[1](params); - - expect(result.current[0]).toBeFalsy(); - expect(addWarningMock.mock.calls[0][0]).toEqual(i18n.EQL_PREVIEW_FETCH_FAILURE); - }); - }); - - // TODO: Determine why eql search strategy returns null for meta.params.body - // in complete responses, but not in partial responses - it('should update inspect information on partial response', async () => { - const mockResponse = getMockEqlResponse(); - await act(async () => { - (useKibana().services.data.search.search as jest.Mock).mockReturnValue( - of>>({ - isRunning: true, - isPartial: true, - rawResponse: mockResponse.rawResponse, - }) - ); - - const { result, waitForNextUpdate } = renderHook(() => useEqlPreview()); - - await waitForNextUpdate(); - - result.current[1](params); - - expect(result.current[2].inspect.dsl.length).toEqual(1); - expect(result.current[2].inspect.response.length).toEqual(1); - }); - }); - - it('should add error toast if search throws', async () => { - await act(async () => { - (useKibana().services.data.search.search as jest.Mock).mockReturnValue( - throwError('This is an error!') - ); - - const { result, waitForNextUpdate } = renderHook(() => useEqlPreview()); - - await waitForNextUpdate(); - - result.current[1](params); - - expect(result.current[0]).toBeFalsy(); - expect(addErrorMock.mock.calls[0][0]).toEqual('This is an error!'); - }); - }); - - it('returns a memoized value', async () => { - const { result, rerender } = renderHook(() => useEqlPreview()); - - const result1 = result.current[1]; - act(() => rerender()); - const result2 = result.current[1]; - - expect(result1).toBe(result2); - }); -}); diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/use_eql_preview.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/use_eql_preview.ts deleted file mode 100644 index bd04056509b8d..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/use_eql_preview.ts +++ /dev/null @@ -1,183 +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 { useCallback, useEffect, useRef, useState } from 'react'; -import { noop } from 'lodash/fp'; -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; - -import { parseScheduleDates } from '@kbn/securitysolution-io-ts-utils'; -import type { EqlSearchStrategyRequest, EqlSearchStrategyResponse } from '@kbn/data-plugin/common'; -import { - isCompleteResponse, - isErrorResponse, - isPartialResponse, - EQL_SEARCH_STRATEGY, -} from '@kbn/data-plugin/common'; -import { AbortError } from '@kbn/kibana-utils-plugin/common'; -import * as i18n from '../translations'; -import { useKibana } from '../../lib/kibana'; -import { formatInspect, getEqlAggsData } from './helpers'; -import type { EqlPreviewResponse, EqlPreviewRequest, Source } from './types'; -import { hasEqlSequenceQuery } from '../../../../common/detection_engine/utils'; -import type { EqlSearchResponse } from '../../../../common/detection_engine/types'; -import type { inputsModel } from '../../store'; -import { useAppToasts } from '../use_app_toasts'; - -export const useEqlPreview = (): [ - boolean, - (arg: EqlPreviewRequest) => void, - EqlPreviewResponse -] => { - const { data } = useKibana().services; - const refetch = useRef(noop); - const abortCtrl = useRef(new AbortController()); - const unsubscribeStream = useRef(new Subject()); - const [loading, setLoading] = useState(false); - const didCancel = useRef(false); - const { addError, addWarning } = useAppToasts(); - - const [response, setResponse] = useState({ - data: [], - inspect: { - dsl: [], - response: [], - }, - refetch: refetch.current, - totalCount: 0, - }); - - const searchEql = useCallback( - ({ from, to, query, index, interval }: EqlPreviewRequest) => { - if (parseScheduleDates(to) == null || parseScheduleDates(from) == null) { - addWarning(i18n.EQL_TIME_INTERVAL_NOT_DEFINED); - return; - } - - const asyncSearch = async () => { - abortCtrl.current = new AbortController(); - setLoading(true); - setResponse((prevResponse) => ({ - ...prevResponse, - data: [], - inspect: { - dsl: [], - response: [], - }, - totalCount: 0, - })); - - data.search - .search>>( - { - params: { - index: index.join(), - body: { - filter: { - range: { - '@timestamp': { - gte: from, - lte: to, - format: 'strict_date_optional_time', - }, - }, - }, - query, - // EQL requires a cap, otherwise it defaults to 10 - // It also sorts on ascending order, capping it at - // something smaller like 20, made it so that some of - // the more recent events weren't returned - size: 100, - }, - }, - }, - { - strategy: EQL_SEARCH_STRATEGY, - abortSignal: abortCtrl.current.signal, - } - ) - .pipe(takeUntil(unsubscribeStream.current)) - .subscribe({ - next: (res) => { - if (isCompleteResponse(res)) { - if (!didCancel.current) { - setLoading(false); - - setResponse((prev) => { - const { inspect, ...rest } = getEqlAggsData( - res, - interval, - to, - refetch.current, - index, - hasEqlSequenceQuery(query) - ); - const inspectDsl = prev.inspect.dsl[0] ? prev.inspect.dsl : inspect.dsl; - const inspectResp = prev.inspect.response[0] - ? prev.inspect.response - : inspect.response; - - return { - ...prev, - ...rest, - inspect: { - dsl: inspectDsl, - response: inspectResp, - }, - }; - }); - } - - unsubscribeStream.current.next(); - } else if (isPartialResponse(res)) { - // TODO: Eql search strategy partial responses return a value under meta.params.body - // but the final/complete response does not, that's why the inspect values are set here - setResponse((prev) => ({ ...prev, inspect: formatInspect(res, index) })); - } else if (isErrorResponse(res)) { - setLoading(false); - addWarning(i18n.EQL_PREVIEW_FETCH_FAILURE); - unsubscribeStream.current.next(); - } - }, - error: (err) => { - if (!(err instanceof AbortError)) { - setLoading(false); - setResponse({ - data: [], - inspect: { - dsl: [], - response: [], - }, - refetch: refetch.current, - totalCount: 0, - }); - addError(err, { - title: i18n.EQL_PREVIEW_FETCH_FAILURE, - }); - } - }, - }); - }; - - abortCtrl.current.abort(); - asyncSearch(); - refetch.current = asyncSearch; - }, - [data.search, addError, addWarning] - ); - - useEffect((): (() => void) => { - return (): void => { - didCancel.current = true; - abortCtrl.current.abort(); - // eslint-disable-next-line react-hooks/exhaustive-deps - unsubscribeStream.current.complete(); - }; - }, []); - - return [loading, searchEql, response]; -}; diff --git a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts index 6041df888dfcb..4cf79cf4ce10b 100644 --- a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts +++ b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts @@ -14,13 +14,18 @@ import { } from '../../../common/constants'; import { useKibana } from '../../common/lib/kibana'; import { useFetchSecurityTags } from './use_fetch_security_tags'; +import { DEFAULT_TAGS_RESPONSE } from '../../common/containers/tags/__mocks__/api'; +import type { ITagsClient } from '@kbn/saved-objects-tagging-plugin/common'; +import type { SavedObjectsTaggingApi } from '@kbn/saved-objects-tagging-oss-plugin/public'; jest.mock('../../common/lib/kibana'); +jest.mock('../../../common/utils/get_ramdom_color', () => ({ + getRandomColor: jest.fn().mockReturnValue('#FFFFFF'), +})); const mockGet = jest.fn(); -const mockPut = jest.fn(); const mockAbortSignal = {} as unknown as AbortSignal; - +const mockCreateTag = jest.fn(); const renderUseCreateSecurityDashboardLink = () => renderHook(() => useFetchSecurityTags(), {}); const asyncRenderUseCreateSecurityDashboardLink = async () => { @@ -33,8 +38,10 @@ const asyncRenderUseCreateSecurityDashboardLink = async () => { describe('useFetchSecurityTags', () => { beforeAll(() => { - useKibana().services.http = { get: mockGet, put: mockPut } as unknown as HttpStart; - + useKibana().services.http = { get: mockGet } as unknown as HttpStart; + useKibana().services.savedObjectsTagging = { + client: { create: mockCreateTag } as unknown as ITagsClient, + } as unknown as SavedObjectsTaggingApi; global.AbortController = jest.fn().mockReturnValue({ abort: jest.fn(), signal: mockAbortSignal, @@ -59,18 +66,24 @@ describe('useFetchSecurityTags', () => { mockGet.mockResolvedValue([]); await asyncRenderUseCreateSecurityDashboardLink(); - expect(mockPut).toHaveBeenCalledWith(INTERNAL_TAGS_URL, { - body: JSON.stringify({ name: SECURITY_TAG_NAME, description: SECURITY_TAG_DESCRIPTION }), - signal: mockAbortSignal, + expect(mockCreateTag).toHaveBeenCalledWith({ + name: SECURITY_TAG_NAME, + description: SECURITY_TAG_DESCRIPTION, + color: '#FFFFFF', }); }); test('should return Security Solution tags', async () => { - const mockFoundTags = [{ id: 'tagId', name: 'Security Solution', description: '', color: '' }]; - mockGet.mockResolvedValue(mockFoundTags); + mockGet.mockResolvedValue(DEFAULT_TAGS_RESPONSE); + + const expected = DEFAULT_TAGS_RESPONSE.map((tag) => ({ + id: tag.id, + type: 'tag', + ...tag.attributes, + })); const { result } = await asyncRenderUseCreateSecurityDashboardLink(); - expect(mockPut).not.toHaveBeenCalled(); - expect(result.current.tags).toEqual(expect.objectContaining(mockFoundTags)); + expect(mockCreateTag).not.toHaveBeenCalled(); + expect(result.current.tags).toEqual(expect.objectContaining(expected)); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.ts b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.ts index a91daf7be16eb..9bdb3f891f596 100644 --- a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.ts +++ b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.ts @@ -10,9 +10,10 @@ import { useKibana } from '../../common/lib/kibana'; import { createTag, getTagsByName } from '../../common/containers/tags/api'; import { REQUEST_NAMES, useFetch } from '../../common/hooks/use_fetch'; import { SECURITY_TAG_DESCRIPTION, SECURITY_TAG_NAME } from '../../../common/constants'; +import { getRandomColor } from '../../../common/utils/get_ramdom_color'; export const useFetchSecurityTags = () => { - const { http } = useKibana().services; + const { http, savedObjectsTagging } = useKibana().services; const tagCreated = useRef(false); const { @@ -31,20 +32,31 @@ export const useFetchSecurityTags = () => { } = useFetch(REQUEST_NAMES.SECURITY_CREATE_TAG, createTag); useEffect(() => { - if (!isLoadingTags && !errorFetchTags && tags && tags.length === 0 && !tagCreated.current) { + if ( + savedObjectsTagging && + !isLoadingTags && + !errorFetchTags && + tags && + tags.length === 0 && + !tagCreated.current + ) { tagCreated.current = true; fetchCreateTag({ - http, - tag: { name: SECURITY_TAG_NAME, description: SECURITY_TAG_DESCRIPTION }, + savedObjectsTaggingClient: savedObjectsTagging.client, + tag: { + name: SECURITY_TAG_NAME, + description: SECURITY_TAG_DESCRIPTION, + color: getRandomColor(), + }, }); } - }, [errorFetchTags, fetchCreateTag, http, isLoadingTags, tags]); + }, [errorFetchTags, fetchCreateTag, savedObjectsTagging, isLoadingTags, tags]); const tagsResult = useMemo(() => { if (tags?.length) { - return tags; + return tags.map((t) => ({ id: t.id, type: 'tag', ...t.attributes })); } - return tag ? [tag] : undefined; + return tag ? [{ type: 'tag', ...tag }] : undefined; }, [tags, tag]); return { diff --git a/x-pack/plugins/security_solution/public/dashboards/context/dashboard_context.tsx b/x-pack/plugins/security_solution/public/dashboards/context/dashboard_context.tsx index 32aea030e0632..cb8b40b1c0907 100644 --- a/x-pack/plugins/security_solution/public/dashboards/context/dashboard_context.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/context/dashboard_context.tsx @@ -9,8 +9,11 @@ import React from 'react'; import type { Tag } from '@kbn/saved-objects-tagging-plugin/common'; import { useFetchSecurityTags } from '../containers/use_fetch_security_tags'; +export interface TagReference extends Tag { + type: string; +} export interface DashboardContextType { - securityTags: Tag[] | null; + securityTags: TagReference[] | null; } const DashboardContext = React.createContext({ securityTags: null }); diff --git a/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.test.tsx b/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.test.tsx index 46c243eebb7ca..357cf5d21670b 100644 --- a/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.test.tsx @@ -5,20 +5,29 @@ * 2.0. */ -import { render } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import React from 'react'; import { SecurityPageName } from '../../../app/types'; import { TestProviders } from '../../../common/mock'; import { DashboardsLandingPage } from '.'; -import type { NavigationLink } from '../../../common/links'; import { useCapabilities } from '../../../common/lib/kibana'; import * as telemetry from '../../../common/lib/telemetry'; +import { DashboardListingTable } from '@kbn/dashboard-plugin/public'; +import { MOCK_TAG_NAME } from '../../../common/containers/tags/__mocks__/api'; +import { DashboardContextProvider } from '../../context/dashboard_context'; +import { act } from 'react-dom/test-utils'; +import type { NavigationLink } from '../../../common/links/types'; +jest.mock('../../../common/containers/tags/api'); jest.mock('../../../common/lib/kibana'); jest.mock('../../../common/utils/route/spy_routes', () => ({ SpyRoute: () => null })); -jest.mock('../../components/dashboards_table', () => ({ - DashboardsTable: () => , -})); +jest.mock('@kbn/dashboard-plugin/public', () => { + const actual = jest.requireActual('@kbn/dashboard-plugin/public'); + return { + ...actual, + DashboardListingTable: jest.fn().mockReturnValue(), + }; +}); const DEFAULT_DASHBOARD_CAPABILITIES = { show: true, createNew: true }; const mockUseCapabilities = useCapabilities as jest.Mock; @@ -63,97 +72,122 @@ jest.mock('../../hooks/use_create_security_dashboard_link', () => { }; }); -const renderDashboardLanding = () => render(, { wrapper: TestProviders }); +const TestComponent = () => ( + + + + + +); + +const renderDashboardLanding = async () => { + await act(async () => { + render(); + }); +}; describe('Dashboards landing', () => { + beforeEach(() => { + mockUseCapabilities.mockReturnValue(DEFAULT_DASHBOARD_CAPABILITIES); + mockUseCreateSecurityDashboard.mockReturnValue(CREATE_DASHBOARD_LINK); + }); + describe('Dashboards default links', () => { - it('should render items', () => { - const { queryByText } = renderDashboardLanding(); + it('should render items', async () => { + await renderDashboardLanding(); - expect(queryByText(OVERVIEW_ITEM_LABEL)).toBeInTheDocument(); - expect(queryByText(DETECTION_RESPONSE_ITEM_LABEL)).toBeInTheDocument(); + expect(screen.queryByText(OVERVIEW_ITEM_LABEL)).toBeInTheDocument(); + expect(screen.queryByText(DETECTION_RESPONSE_ITEM_LABEL)).toBeInTheDocument(); }); - it('should render items in the same order as defined', () => { + it('should render items in the same order as defined', async () => { mockAppManageLink.mockReturnValueOnce({ ...APP_DASHBOARD_LINKS, }); - const { queryAllByTestId } = renderDashboardLanding(); + await renderDashboardLanding(); - const renderedItems = queryAllByTestId('LandingImageCard-item'); + const renderedItems = screen.queryAllByTestId('LandingImageCard-item'); expect(renderedItems[0]).toHaveTextContent(OVERVIEW_ITEM_LABEL); expect(renderedItems[1]).toHaveTextContent(DETECTION_RESPONSE_ITEM_LABEL); }); - it('should not render items if all items filtered', () => { - mockAppManageLink.mockReturnValueOnce({ + it('should not render items if all items filtered', async () => { + mockAppManageLink.mockReturnValue({ ...APP_DASHBOARD_LINKS, links: [], }); - const { queryByText } = renderDashboardLanding(); + await renderDashboardLanding(); - expect(queryByText(OVERVIEW_ITEM_LABEL)).not.toBeInTheDocument(); - expect(queryByText(DETECTION_RESPONSE_ITEM_LABEL)).not.toBeInTheDocument(); + expect(screen.queryByText(OVERVIEW_ITEM_LABEL)).not.toBeInTheDocument(); + expect(screen.queryByText(DETECTION_RESPONSE_ITEM_LABEL)).not.toBeInTheDocument(); }); }); describe('Security Dashboards', () => { - it('should render dashboards table', () => { - const result = renderDashboardLanding(); + it('should render dashboards table', async () => { + await renderDashboardLanding(); + + expect(screen.getByTestId('dashboardsTable')).toBeInTheDocument(); + }); + + it('should call DashboardListingTable with correct initialFilter', async () => { + await renderDashboardLanding(); - expect(result.getByTestId('dashboardsTable')).toBeInTheDocument(); + expect((DashboardListingTable as jest.Mock).mock.calls[0][0].initialFilter).toEqual( + `tag:("${MOCK_TAG_NAME}")` + ); }); - it('should not render dashboards table if no read capability', () => { - mockUseCapabilities.mockReturnValueOnce({ + it('should not render dashboards table if no read capability', async () => { + mockUseCapabilities.mockReturnValue({ ...DEFAULT_DASHBOARD_CAPABILITIES, show: false, }); - const result = renderDashboardLanding(); + await renderDashboardLanding(); - expect(result.queryByTestId('dashboardsTable')).not.toBeInTheDocument(); + expect(screen.queryByTestId('dashboardsTable')).not.toBeInTheDocument(); }); describe('Create Security Dashboard button', () => { - it('should render', () => { - const result = renderDashboardLanding(); + it('should render', async () => { + await renderDashboardLanding(); - expect(result.getByTestId('createDashboardButton')).toBeInTheDocument(); + expect(screen.getByTestId('createDashboardButton')).toBeInTheDocument(); }); - it('should not render if no write capability', () => { - mockUseCapabilities.mockReturnValueOnce({ + it('should not render if no write capability', async () => { + mockUseCapabilities.mockReturnValue({ ...DEFAULT_DASHBOARD_CAPABILITIES, createNew: false, }); - const result = renderDashboardLanding(); + await renderDashboardLanding(); - expect(result.queryByTestId('createDashboardButton')).not.toBeInTheDocument(); + expect(screen.queryByTestId('createDashboardButton')).not.toBeInTheDocument(); }); - it('should be enabled when link loaded', () => { - const result = renderDashboardLanding(); + it('should be enabled when link loaded', async () => { + await renderDashboardLanding(); - expect(result.getByTestId('createDashboardButton')).not.toHaveAttribute('disabled'); + expect(screen.getByTestId('createDashboardButton')).not.toHaveAttribute('disabled'); }); - it('should be disabled when link is not loaded', () => { - mockUseCreateSecurityDashboard.mockReturnValueOnce({ isLoading: true, url: '' }); - const result = renderDashboardLanding(); + it('should be disabled when link is not loaded', async () => { + mockUseCreateSecurityDashboard.mockReturnValue({ isLoading: true, url: '' }); + await renderDashboardLanding(); - expect(result.getByTestId('createDashboardButton')).toHaveAttribute('disabled'); + expect(screen.getByTestId('createDashboardButton')).toHaveAttribute('disabled'); }); - it('should link to correct href', () => { - const result = renderDashboardLanding(); + it('should link to correct href', async () => { + await renderDashboardLanding(); - expect(result.getByTestId('createDashboardButton')).toHaveAttribute('href', URL); + expect(screen.getByTestId('createDashboardButton')).toHaveAttribute('href', URL); }); - it('should send telemetry', () => { - const result = renderDashboardLanding(); - result.getByTestId('createDashboardButton').click(); + it('should send telemetry', async () => { + await renderDashboardLanding(); + screen.getByTestId('createDashboardButton').click(); expect(spyTrack).toHaveBeenCalledWith( telemetry.METRIC_TYPE.CLICK, telemetry.TELEMETRY_EVENT.CREATE_DASHBOARD diff --git a/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.tsx b/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.tsx index 513ad89c482c2..6da70442a1e3f 100644 --- a/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/pages/landing_page/index.tsx @@ -4,10 +4,18 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiSpacer, EuiTitle } from '@elastic/eui'; -import React from 'react'; +import { + EuiEmptyPrompt, + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiLoadingSpinner, + EuiSpacer, + EuiTitle, +} from '@elastic/eui'; +import React, { useCallback, useMemo } from 'react'; import type { DashboardCapabilities } from '@kbn/dashboard-plugin/common/types'; -import { LEGACY_DASHBOARD_APP_ID } from '@kbn/dashboard-plugin/public'; +import { DashboardListingTable, LEGACY_DASHBOARD_APP_ID } from '@kbn/dashboard-plugin/public'; import { SecuritySolutionPageWrapper } from '../../../common/components/page_wrapper'; import { SpyRoute } from '../../../common/utils/route/spy_routes'; import { LandingImageCards } from '../../../common/components/landing_links/landing_links_images'; @@ -20,7 +28,25 @@ import * as i18n from './translations'; import { METRIC_TYPE, TELEMETRY_EVENT, track } from '../../../common/lib/telemetry'; import { DASHBOARDS_PAGE_TITLE } from '../translations'; import { useCreateSecurityDashboardLink } from '../../hooks/use_create_security_dashboard_link'; -import { DashboardsTable } from '../../components/dashboards_table'; +import { useGetSecuritySolutionUrl } from '../../../common/components/link_to'; +import type { TagReference } from '../../context/dashboard_context'; +import { useSecurityTags } from '../../context/dashboard_context'; + +const getInitialFilterString = (securityTags: TagReference[] | null | undefined) => { + if (!securityTags) { + return; + } + const uniqueQuerySet = securityTags?.reduce>((acc, { name }) => { + const nameString = `"${name}"`; + if (name && !acc.has(nameString)) { + acc.add(nameString); + } + return acc; + }, new Set()); + + const query = [...uniqueQuerySet].join(' or'); + return `tag:(${query})`; +}; const Header: React.FC<{ canCreateDashboard: boolean }> = ({ canCreateDashboard }) => { const { isLoading, url } = useCreateSecurityDashboardLink(); @@ -57,7 +83,36 @@ export const DashboardsLandingPage = () => { const dashboardLinks = useRootNavLink(SecurityPageName.dashboards)?.links ?? []; const { show: canReadDashboard, createNew: canCreateDashboard } = useCapabilities(LEGACY_DASHBOARD_APP_ID); + const { navigateTo } = useNavigateTo(); + const getSecuritySolutionUrl = useGetSecuritySolutionUrl(); + const getSecuritySolutionDashboardUrl = useCallback( + (id: string) => + `${getSecuritySolutionUrl({ + deepLinkId: SecurityPageName.dashboards, + path: id, + })}`, + [getSecuritySolutionUrl] + ); + const { isLoading: loadingCreateDashboardUrl, url: createDashboardUrl } = + useCreateSecurityDashboardLink(); + const getHref = useCallback( + (id: string | undefined) => (id ? getSecuritySolutionDashboardUrl(id) : createDashboardUrl), + [createDashboardUrl, getSecuritySolutionDashboardUrl] + ); + + const goToDashboard = useCallback( + (dashboardId: string | undefined) => { + track(METRIC_TYPE.CLICK, TELEMETRY_EVENT.DASHBOARD); + navigateTo({ url: getHref(dashboardId) }); + }, + [getHref, navigateTo] + ); + + const securityTags = useSecurityTags(); + const securityTagsExist = securityTags && securityTags?.length > 0; + + const initialFilter = useMemo(() => getInitialFilterString(securityTags), [securityTags]); return (
@@ -68,17 +123,26 @@ export const DashboardsLandingPage = () => { - + - {canReadDashboard && ( + {canReadDashboard && securityTagsExist && initialFilter ? ( <> - -

{i18n.DASHBOARDS_PAGE_SECTION_CUSTOM}

-
- - - + + +

{i18n.DASHBOARDS_PAGE_SECTION_CUSTOM}

+
+ + +
+ ) : ( + } /> )} diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/description_step/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/description_step/index.tsx index 4b505408b7763..7e8a1b12b1715 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/description_step/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/description_step/index.tsx @@ -48,6 +48,7 @@ import { buildAlertSuppressionWindowDescription, buildAlertSuppressionMissingFieldsDescription, } from './helpers'; +import * as i18n from './translations'; import { buildMlJobsDescription } from './build_ml_jobs_description'; import { buildActionsDescription } from './actions_description'; import { buildThrottleDescription } from './throttle_description'; @@ -292,6 +293,10 @@ export const getDescriptionItem = ( if (get('dataViewId', data)) { return []; } + } else if (field === 'isBuildingBlock') { + return get('isBuildingBlock', data) + ? [{ title: i18n.BUILDING_BLOCK_LABEL, description: i18n.BUILDING_BLOCK_DESCRIPTION }] + : []; } const description: string = get(field, data); diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/description_step/translations.ts b/x-pack/plugins/security_solution/public/detections/components/rules/description_step/translations.ts index f67bcbb2d5d07..e27db32ddd03a 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/description_step/translations.ts +++ b/x-pack/plugins/security_solution/public/detections/components/rules/description_step/translations.ts @@ -161,3 +161,17 @@ export const ALERT_SUPPRESSION_DO_NOT_SUPPRESS_ON_MISSING_FIELDS = i18n.translat defaultMessage: 'Do not suppress alerts for events with missing fields', } ); + +export const BUILDING_BLOCK_LABEL = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleDescription.buildingBlockLabel', + { + defaultMessage: 'Building block', + } +); + +export const BUILDING_BLOCK_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.detectionEngine.ruleDescription.buildingBlockDescription', + { + defaultMessage: 'All generated alerts will be marked as "building block" alerts', + } +); diff --git a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx index c423fc2eac6df..0786b4cdf3824 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/alerts/alert_details_redirect.tsx @@ -19,7 +19,7 @@ import { inputsSelectors } from '../../../common/store'; import { formatPageFilterSearchParam } from '../../../../common/utils/format_page_filter_search_param'; import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; import { resolveFlyoutParams } from './utils'; -import { FLYOUT_URL_PARAM } from '../../../flyout/url/use_sync_flyout_state_with_url'; +import { FLYOUT_URL_PARAM } from '../../../flyout/shared/hooks/url/use_sync_flyout_state_with_url'; export const AlertDetailsRedirect = () => { const { alertId } = useParams<{ alertId: string }>(); diff --git a/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts b/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts index db1250b4e6cae..c08f6fd6ac4ee 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts +++ b/x-pack/plugins/security_solution/public/detections/pages/alerts/utils.ts @@ -6,7 +6,7 @@ */ import { encode } from '@kbn/rison'; -import { expandableFlyoutStateFromEventMeta } from '../../../flyout/url/expandable_flyout_state_from_event_meta'; +import { expandableFlyoutStateFromEventMeta } from '../../../flyout/shared/hooks/url/expandable_flyout_state_from_event_meta'; export interface ResolveFlyoutParamsConfig { index: string; diff --git a/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx b/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx index 5d0ff73569bdc..26f7eb6a8af1c 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx @@ -67,7 +67,7 @@ import { AlertCountByRuleByStatus } from '../../../../common/components/alert_co import { useLicense } from '../../../../common/hooks/use_license'; import { ResponderActionButton } from '../../../../detections/components/endpoint_responder/responder_action_button'; -const ES_HOST_FIELD = 'host.hostname'; +const ES_HOST_FIELD = 'host.name'; const HostOverviewManage = manageQuery(HostOverview); const HostDetailsComponent: React.FC = ({ detailName, hostDetailsPagePath }) => { diff --git a/x-pack/plugins/security_solution/public/flyout/index.tsx b/x-pack/plugins/security_solution/public/flyout/index.tsx index c69deac1030e6..81ae4ca0e1e61 100644 --- a/x-pack/plugins/security_solution/public/flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/index.tsx @@ -5,20 +5,28 @@ * 2.0. */ -import React from 'react'; -import type { ExpandableFlyoutProps } from '@kbn/expandable-flyout'; +import React, { memo, type FC } from 'react'; +import { + ExpandableFlyout, + type ExpandableFlyoutProps, + ExpandableFlyoutProvider, +} from '@kbn/expandable-flyout'; import type { RightPanelProps } from './right'; import { RightPanel, RightPanelKey } from './right'; import { RightPanelProvider } from './right/context'; import type { LeftPanelProps } from './left'; import { LeftPanel, LeftPanelKey } from './left'; import { LeftPanelProvider } from './left/context'; +import { + SecuritySolutionFlyoutUrlSyncProvider, + useSecurityFlyoutUrlSync, +} from './shared/context/url_sync'; /** * List of all panels that will be used within the document details expandable flyout. * This needs to be passed to the expandable flyout registeredPanels property. */ -export const expandableFlyoutDocumentsPanels: ExpandableFlyoutProps['registeredPanels'] = [ +const expandableFlyoutDocumentsPanels: ExpandableFlyoutProps['registeredPanels'] = [ { key: RightPanelKey, component: (props) => ( @@ -36,3 +44,42 @@ export const expandableFlyoutDocumentsPanels: ExpandableFlyoutProps['registeredP ), }, ]; + +const OuterProviders: FC = ({ children }) => { + return {children}; +}; + +const InnerProviders: FC = ({ children }) => { + const [flyoutRef, handleFlyoutChangedOrClosed] = useSecurityFlyoutUrlSync(); + + return ( + + {children} + + ); +}; + +export const SecuritySolutionFlyoutContextProvider: FC = ({ children }) => ( + + {children} + +); + +SecuritySolutionFlyoutContextProvider.displayName = 'SecuritySolutionFlyoutContextProvider'; + +export const SecuritySolutionFlyout = memo(() => { + const [_flyoutRef, handleFlyoutChangedOrClosed] = useSecurityFlyoutUrlSync(); + + return ( + + ); +}); + +SecuritySolutionFlyout.displayName = 'SecuritySolutionFlyout'; diff --git a/x-pack/plugins/security_solution/public/flyout/left/index.tsx b/x-pack/plugins/security_solution/public/flyout/left/index.tsx index 8c77babd483df..fbba35ae43b57 100644 --- a/x-pack/plugins/security_solution/public/flyout/left/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/left/index.tsx @@ -9,7 +9,7 @@ import type { FC } from 'react'; import React, { memo, useMemo } from 'react'; import { useEuiBackgroundColor } from '@elastic/eui'; import { css } from '@emotion/react'; -import type { FlyoutPanel } from '@kbn/expandable-flyout'; +import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { PanelHeader } from './header'; import { PanelContent } from './content'; @@ -24,7 +24,7 @@ export const LeftPanelVisualizeTabPath: LeftPanelProps['path'] = ['visualize']; export const LeftPanelInsightsTabPath: LeftPanelProps['path'] = ['insights']; export const LeftPanelInvestigationTabPath: LeftPanelProps['path'] = ['investigation']; -export interface LeftPanelProps extends FlyoutPanel { +export interface LeftPanelProps extends FlyoutPanelProps { key: 'document-details-left'; path?: LeftPanelPaths[]; params?: { diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx index 891bdfacbf171..00b757541d587 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.test.tsx @@ -9,8 +9,8 @@ import { render, screen, fireEvent } from '@testing-library/react'; import { copyToClipboard } from '@elastic/eui'; import { ShareButton } from './share_button'; import React from 'react'; -import { FLYOUT_URL_PARAM } from '../../url/use_sync_flyout_state_with_url'; import { FLYOUT_HEADER_SHARE_BUTTON_TEST_ID } from './test_ids'; +import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; jest.mock('@elastic/eui', () => ({ ...jest.requireActual('@elastic/eui'), diff --git a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx index 18a8d71459d26..04405e9b7a31a 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/components/share_button.tsx @@ -8,7 +8,7 @@ import { copyToClipboard, EuiButtonEmpty, EuiCopy } from '@elastic/eui'; import type { FC } from 'react'; import React from 'react'; -import { FLYOUT_URL_PARAM } from '../../url/use_sync_flyout_state_with_url'; +import { FLYOUT_URL_PARAM } from '../../shared/hooks/url/use_sync_flyout_state_with_url'; import { FLYOUT_HEADER_SHARE_BUTTON_TEST_ID } from './test_ids'; import { SHARE } from './translations'; diff --git a/x-pack/plugins/security_solution/public/flyout/right/index.tsx b/x-pack/plugins/security_solution/public/flyout/right/index.tsx index e6f96725412e5..f779a2fd98c08 100644 --- a/x-pack/plugins/security_solution/public/flyout/right/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/right/index.tsx @@ -7,7 +7,7 @@ import type { FC } from 'react'; import React, { memo, useMemo } from 'react'; -import type { FlyoutPanel } from '@kbn/expandable-flyout'; +import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; import { useExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { useRightPanelContext } from './context'; import { PanelHeader } from './header'; @@ -21,7 +21,7 @@ export type RightPanelPaths = 'overview' | 'table' | 'json'; export const RightPanelKey: RightPanelProps['key'] = 'document-details-right'; export const RightPanelTableTabPath: RightPanelProps['path'] = ['table']; -export interface RightPanelProps extends FlyoutPanel { +export interface RightPanelProps extends FlyoutPanelProps { key: 'document-details-right'; path?: RightPanelPaths[]; params?: { diff --git a/x-pack/plugins/security_solution/public/flyout/shared/context/url_sync.tsx b/x-pack/plugins/security_solution/public/flyout/shared/context/url_sync.tsx new file mode 100644 index 0000000000000..29b7019fa7196 --- /dev/null +++ b/x-pack/plugins/security_solution/public/flyout/shared/context/url_sync.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { createContext, useContext, useMemo, type FC } from 'react'; +import { useSyncFlyoutStateWithUrl } from '../hooks/url/use_sync_flyout_state_with_url'; + +export type SecuritySolutionFlyoutCloseContextValue = ReturnType; + +export const SecuritySolutionFlyoutCloseContext = createContext< + SecuritySolutionFlyoutCloseContextValue | undefined +>(undefined); + +/** + * Exposes the flyout close context value (returned from syncUrl) as a hook. + */ +export const useSecurityFlyoutUrlSync = () => { + const contextValue = useContext(SecuritySolutionFlyoutCloseContext); + + if (!contextValue) { + throw new Error('useSecurityFlyoutUrlSync can only be used inside respective provider'); + } + + return contextValue; +}; + +/** + * Provides urlSync hook return value as a context value, for reuse in other components. + * Main goal here is to avoid calling useSyncFlyoutStateWithUrl multiple times. + */ +export const SecuritySolutionFlyoutUrlSyncProvider: FC = ({ children }) => { + const [flyoutRef, handleFlyoutChangedOrClosed] = useSyncFlyoutStateWithUrl(); + + const value: SecuritySolutionFlyoutCloseContextValue = useMemo( + () => [flyoutRef, handleFlyoutChangedOrClosed], + [flyoutRef, handleFlyoutChangedOrClosed] + ); + + return ( + + {children} + + ); +}; diff --git a/x-pack/plugins/security_solution/public/flyout/url/expandable_flyout_state_from_event_meta.ts b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/expandable_flyout_state_from_event_meta.ts similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/url/expandable_flyout_state_from_event_meta.ts rename to x-pack/plugins/security_solution/public/flyout/shared/hooks/url/expandable_flyout_state_from_event_meta.ts index 1f9a18962092d..95e5c509f96d6 100644 --- a/x-pack/plugins/security_solution/public/flyout/url/expandable_flyout_state_from_event_meta.ts +++ b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/expandable_flyout_state_from_event_meta.ts @@ -6,7 +6,7 @@ */ import type { ExpandableFlyoutContext } from '@kbn/expandable-flyout'; -import { RightPanelKey } from '../right'; +import { RightPanelKey } from '../../../right'; interface RedirectParams { index: string; diff --git a/x-pack/plugins/security_solution/public/flyout/url/use_sync_flyout_state_with_url.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.test.tsx similarity index 100% rename from x-pack/plugins/security_solution/public/flyout/url/use_sync_flyout_state_with_url.test.tsx rename to x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.test.tsx diff --git a/x-pack/plugins/security_solution/public/flyout/url/use_sync_flyout_state_with_url.tsx b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx similarity index 95% rename from x-pack/plugins/security_solution/public/flyout/url/use_sync_flyout_state_with_url.tsx rename to x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx index 5eaa8e6f1e2cc..554cf1d417994 100644 --- a/x-pack/plugins/security_solution/public/flyout/url/use_sync_flyout_state_with_url.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/hooks/url/use_sync_flyout_state_with_url.tsx @@ -9,7 +9,7 @@ import { useCallback, useRef } from 'react'; import type { ExpandableFlyoutApi, ExpandableFlyoutContext } from '@kbn/expandable-flyout'; import { useSyncToUrl } from '@kbn/url-state'; import last from 'lodash/last'; -import { URL_PARAM_KEY } from '../../common/hooks/use_url_state'; +import { URL_PARAM_KEY } from '../../../../common/hooks/use_url_state'; export const FLYOUT_URL_PARAM = URL_PARAM_KEY.eventFlyout; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts index 036ed835b46cf..9076c0daa7da6 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts @@ -77,7 +77,7 @@ describe('useCaseItems', () => { from: '2020-07-07T08:20:18.966Z', to: '2020-07-08T08:20:18.966Z', owner: 'securitySolution', - sortField: 'create_at', + sortField: 'createdAt', sortOrder: 'desc', page: 1, perPage: 4, diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.ts index bd8c4eb15a654..a872172feba0b 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.ts @@ -57,7 +57,7 @@ export const useCaseItems: UseCaseItems = ({ skip }) => { from, to, owner: APP_ID, - sortField: 'create_at', + sortField: 'createdAt', sortOrder: 'desc', page: 1, perPage: 4, diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts index 3c5ad1f244b6e..27fa20461be1a 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/mock_data.ts @@ -6,12 +6,20 @@ */ import type { RuleAlertsItem, SeverityRuleAlertsAggsResponse } from './use_rule_alerts_items'; +import { + KIBANA_ALERT_SEVERITY, + KIBANA_RULE_ID, + KIBANA_RULE_NAME, + TIMESTAMP, +} from './use_rule_alerts_items'; export const from = '2022-04-05T12:00:00.000Z'; export const to = '2022-04-08T12:00:00.000Z'; export const severityRuleAlertsQuery = { size: 0, + _source: false, + fields: [KIBANA_RULE_NAME, KIBANA_RULE_ID, KIBANA_ALERT_SEVERITY, TIMESTAMP], query: { bool: { filter: [ @@ -62,11 +70,11 @@ export const mockSeverityRuleAlertsResponse: { aggregations: SeverityRuleAlertsA }, hits: [ { - _source: { - 'kibana.alert.rule.name': 'RULE_1', - 'kibana.alert.rule.uuid': '79ec0270-b4c5-11ec-970e-8f7c5a7144f7', - '@timestamp': '2022-04-05T15:58:35.079Z', - 'kibana.alert.severity': 'critical', + fields: { + 'kibana.alert.rule.name': ['RULE_1'], + 'kibana.alert.rule.uuid': ['79ec0270-b4c5-11ec-970e-8f7c5a7144f7'], + '@timestamp': ['2022-04-05T15:58:35.079Z'], + 'kibana.alert.severity': ['critical'], }, }, ], @@ -83,11 +91,11 @@ export const mockSeverityRuleAlertsResponse: { aggregations: SeverityRuleAlertsA }, hits: [ { - _source: { - 'kibana.alert.rule.uuid': '955c79d0-b403-11ec-b5a7-6dc1ed01bdd7', - 'kibana.alert.rule.name': 'RULE_2', - '@timestamp': '2022-04-05T15:58:47.164Z', - 'kibana.alert.severity': 'high', + fields: { + 'kibana.alert.rule.uuid': ['955c79d0-b403-11ec-b5a7-6dc1ed01bdd7'], + 'kibana.alert.rule.name': ['RULE_2'], + '@timestamp': ['2022-04-05T15:58:47.164Z'], + 'kibana.alert.severity': ['high'], }, }, ], @@ -104,11 +112,11 @@ export const mockSeverityRuleAlertsResponse: { aggregations: SeverityRuleAlertsA }, hits: [ { - _source: { - 'kibana.alert.rule.name': 'RULE_3', - 'kibana.alert.rule.uuid': '13bc7bc0-b1d6-11ec-a799-67811b37527a', - '@timestamp': '2022-04-05T15:56:16.606Z', - 'kibana.alert.severity': 'low', + fields: { + 'kibana.alert.rule.name': ['RULE_3'], + 'kibana.alert.rule.uuid': ['13bc7bc0-b1d6-11ec-a799-67811b37527a'], + '@timestamp': ['2022-04-05T15:56:16.606Z'], + 'kibana.alert.severity': ['low'], }, }, ], diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts index 1340297f241ef..169ba33790eee 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.ts @@ -12,6 +12,7 @@ import { useQueryAlerts } from '../../../../detections/containers/detection_engi import { ALERTS_QUERY_NAMES } from '../../../../detections/containers/detection_engine/alerts/constants'; import { useQueryInspector } from '../../../../common/components/page/manage_query'; import type { ESBoolQuery } from '../../../../../common/typed_json'; +import { firstNonNullValue } from '../../../../../common/endpoint/models/ecs_safety_helpers'; // Formatted item result export interface RuleAlertsItem { @@ -35,11 +36,11 @@ export interface SeverityRuleAlertsAggsResponse { }; hits: [ { - _source: { - '@timestamp': string; - 'kibana.alert.rule.name': string; - 'kibana.alert.rule.uuid': string; - 'kibana.alert.severity': Severity; + fields: { + '@timestamp': string[]; + 'kibana.alert.rule.name': string[]; + 'kibana.alert.rule.uuid': string[]; + 'kibana.alert.severity': Severity[]; }; } ]; @@ -48,6 +49,10 @@ export interface SeverityRuleAlertsAggsResponse { }>; }; } +export const KIBANA_RULE_NAME = 'kibana.alert.rule.name'; +export const KIBANA_RULE_ID = 'kibana.alert.rule.uuid'; +export const KIBANA_ALERT_SEVERITY = 'kibana.alert.severity'; +export const TIMESTAMP = '@timestamp'; const getSeverityRuleAlertsQuery = ({ from, @@ -58,6 +63,8 @@ const getSeverityRuleAlertsQuery = ({ to: string; filterQuery?: ESBoolQuery; }) => ({ + _source: false, + fields: [KIBANA_RULE_NAME, KIBANA_RULE_ID, KIBANA_ALERT_SEVERITY, TIMESTAMP], size: 0, query: { bool: { @@ -101,14 +108,13 @@ const getRuleAlertsItemsFromAggs = ( ): RuleAlertsItem[] => { const buckets = aggregations?.alertsByRule.buckets ?? []; return buckets.map((bucket) => { - const lastAlert = bucket.lastRuleAlert.hits.hits[0]._source; - + const lastAlert = bucket.lastRuleAlert.hits.hits[0].fields; return { - id: lastAlert['kibana.alert.rule.uuid'], + id: firstNonNullValue(lastAlert[KIBANA_RULE_ID]) ?? '', alert_count: bucket.lastRuleAlert.hits.total.value, - name: lastAlert['kibana.alert.rule.name'], - last_alert_at: lastAlert['@timestamp'], - severity: lastAlert['kibana.alert.severity'], + name: firstNonNullValue(lastAlert[KIBANA_RULE_NAME]) ?? '', + last_alert_at: firstNonNullValue(lastAlert[TIMESTAMP]) ?? '', + severity: firstNonNullValue(lastAlert[KIBANA_ALERT_SEVERITY]) ?? 'low', }; }); }; diff --git a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/anomalies/query/index.ts b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/anomalies/query/index.ts index a73f025878df5..c21048fdcfd84 100644 --- a/x-pack/plugins/security_solution/public/overview/components/entity_analytics/anomalies/query/index.ts +++ b/x-pack/plugins/security_solution/public/overview/components/entity_analytics/anomalies/query/index.ts @@ -59,9 +59,8 @@ export const getAggregatedAnomaliesQuery = ({ aggs: { entity: { top_hits: { - _source: { - includes: ['host.name', 'user.name'], - }, + _source: false, + fields: ['host.name', 'user.name'], size: 1, }, }, diff --git a/x-pack/plugins/security_solution/scripts/jest.config.js b/x-pack/plugins/security_solution/scripts/jest.config.js new file mode 100644 index 0000000000000..dba0d6bc5bade --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/jest.config.js @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/plugins/security_solution/scripts'], + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/plugins/security_solution/scripts', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/plugins/security_solution/scripts/**/*.{ts,tsx}'], +}; diff --git a/x-pack/plugins/security_solution/scripts/junit_transformer/README.md b/x-pack/plugins/security_solution/scripts/junit_transformer/README.md new file mode 100644 index 0000000000000..6e8a834da756b --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/README.md @@ -0,0 +1,9 @@ +The failed test reporter creates github issues based on junit reports. Github workflows, and kibanamachine workflows, allow the Kibana Operations team to track and triage flaky tests. These workflows rely on those github issues, specifically their titles, to work. The titles of the github issues contain an encoded version of the file path that contains the failing test. + +This process is facilitated by custom mocha/junit reporters written for the functional test runner and jest. These reporters encode the file name of each spec file and include it in an attribute on elements in the junit report. + +There is no such custom mocha reporter for Cypress, and due to the architecture of Cypress, reusing the existing custom mocha reports, or any of their existing code, is not feasible. Cypress runs in its own process, with its own version of node, and that environment is incompatible with running babel-register. This means we cannot easily interpret the code that implements the existing custom mocha reporters from within Cypress. + +We could compile a library using the code from those custom junit reporters, but there is no established pattern or tooling for doing that. + +For there reasons, our approach is to transform the junit report created by Cypress into a format consumable by the failed test reporter and the kibana operations triage scripts. This script does that. diff --git a/x-pack/plugins/security_solution/scripts/junit_transformer/__snapshots__/junit_transformer.test.ts.snap b/x-pack/plugins/security_solution/scripts/junit_transformer/__snapshots__/junit_transformer.test.ts.snap new file mode 100644 index 0000000000000..1474bf9e60c77 --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/__snapshots__/junit_transformer.test.ts.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`junit_transformer updates the file in place, applying the expected transformation 1`] = ` +" + + + + + + + + AssertionError: Timed out retrying after 150000ms: expected 'http://localhost:5647/app/security/rules/create' to include 'app/security/rules/create1' + at Context.eval (webpack:///./e2e/urls/compatibility.cy.ts:65:13) + + + + + + +" +`; diff --git a/x-pack/plugins/security_solution/scripts/junit_transformer/fixtures/suite_with_failing_test.xml b/x-pack/plugins/security_solution/scripts/junit_transformer/fixtures/suite_with_failing_test.xml new file mode 100644 index 0000000000000..9c803eb829eed --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/fixtures/suite_with_failing_test.xml @@ -0,0 +1,17 @@ + + + + + + + + + AssertionError: Timed out retrying after 150000ms: expected 'http://localhost:5647/app/security/rules/create' to include 'app/security/rules/create1' + at Context.eval (webpack:///./e2e/urls/compatibility.cy.ts:65:13) + + + + + + + \ No newline at end of file diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/index.ts b/x-pack/plugins/security_solution/scripts/junit_transformer/index.js similarity index 76% rename from x-pack/plugins/security_solution/public/common/hooks/eql/index.ts rename to x-pack/plugins/security_solution/scripts/junit_transformer/index.js index 55b0d5dfb2965..f1b0280c4ede8 100644 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/index.ts +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/index.js @@ -5,4 +5,5 @@ * 2.0. */ -export { useEqlPreview } from './use_eql_preview'; +require('../../../../../src/setup_node_env'); +require('./junit_transformer'); diff --git a/x-pack/plugins/security_solution/scripts/junit_transformer/junit_transformer.test.ts b/x-pack/plugins/security_solution/scripts/junit_transformer/junit_transformer.test.ts new file mode 100644 index 0000000000000..e25a349b394ac --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/junit_transformer.test.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { promises as fs } from 'fs'; +import { mkdtemp } from 'fs/promises'; +import { tmpdir } from 'os'; +import { join } from 'path'; +import type { CommandArgs } from './lib'; +import { command } from './lib'; + +describe('junit_transformer', () => { + const junitFileName = 'junit.xml'; + let pathPattern: string; + let path: string; + let mockCommandArgs: CommandArgs; + + beforeEach(async () => { + // get a temporary directory + const directory = await mkdtemp(join(tmpdir(), 'junit-transformer-test-')); + + // define a glob pattern that will match the fixture + pathPattern = `${directory}/*`; + + // determine the path for the fixture + path = join(directory, junitFileName); + + // read the fixture and write it to the temporary file + await fs.writeFile( + path, + await fs.readFile(join(__dirname, './fixtures/suite_with_failing_test.xml'), { + encoding: 'utf8', + }) + ); + + mockCommandArgs = { + // define the flags that will be passed to the command + flags: { + pathPattern, + // use the directory as the root directory. This lets us test the relative file path functionality without having a tree of temp files. + rootDirectory: directory, + reportName: 'Test', + writeInPlace: true, + }, + + log: { + info: jest.fn(), + write: jest.fn(), + error: jest.fn(), + success: jest.fn(), + warning: jest.fn(), + }, + }; + }); + it('updates the file in place, applying the expected transformation', async () => { + await command(mockCommandArgs); + expect(await fs.readFile(path, { encoding: 'utf8' })).toMatchSnapshot(); + }); +}); diff --git a/x-pack/plugins/security_solution/scripts/junit_transformer/junit_transformer.ts b/x-pack/plugins/security_solution/scripts/junit_transformer/junit_transformer.ts new file mode 100644 index 0000000000000..1eb29ce1b7ddd --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/junit_transformer.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { run } from '@kbn/dev-cli-runner'; +import { command } from './lib'; + +/** + * This script processes all junit reports matching a glob pattern. It reads each report, parses it into json, validates that it is a report from Cypress, then transforms the report to a form that can be processed by Kibana Operations workflows and the failed-test-reporter, it then optionally writes the report back, in xml format, to the original file path. + */ +run(command, { + description: ` + Transform junit reports to match the style required by the Kibana Operations flaky test triage workflows such as '/skip'. + `, + flags: { + string: ['pathPattern', 'rootDirectory', 'reportName'], + boolean: ['writeInPlace'], + help: ` + --pathPattern Required, glob passed to globby to select files to operate on + --rootDirectory Required, path of the kibana repo. Used to calcuate the file path of each spec file relative to the Kibana repo + --reportName Required, used as a prefix for the classname. Eventually shows up in the title of flaky test Github issues + --writeInPlace Defaults to false. If passed, rewrite the file in place with transformations. If false, the script will pass the transformed XML as a string to stdout + + If an error is encountered when processing one file, the script will still attempt to process other files. + `, + }, +}); diff --git a/x-pack/plugins/security_solution/scripts/junit_transformer/lib.ts b/x-pack/plugins/security_solution/scripts/junit_transformer/lib.ts new file mode 100644 index 0000000000000..d9033c75d485b --- /dev/null +++ b/x-pack/plugins/security_solution/scripts/junit_transformer/lib.ts @@ -0,0 +1,254 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* eslint-disable no-continue */ + +import { createFlagError } from '@kbn/dev-cli-errors'; +import type { RunContext } from '@kbn/dev-cli-runner'; +import { Builder, parseStringPromise } from 'xml2js'; +import { promises as fs } from 'fs'; +import { relative } from 'path'; +import * as t from 'io-ts'; +import { isLeft } from 'fp-ts/lib/Either'; +import { PathReporter } from 'io-ts/lib/PathReporter'; +import globby from 'globby'; + +/** + * Updates the `name` and `classname` attributes of each testcase. + * `name` will have the value of `classname` appended to it. This makes sense because they each contain part of the bdd spec. + * `classname` is replaced with the file path, relative to the kibana project directory, and encoded (by replacing periods with a non-ascii character.) This is the format expected by the failed test reporter and the Kibana Operations flaky test triage workflows. + */ +async function transformedReport({ + reportJson, + specFilePath, + rootDirectory, + reportName, +}: { + reportJson: CypressJunitReport; + specFilePath: string; + rootDirectory: string; + reportName: string; +}): Promise { + for (const testsuite of reportJson.testsuites.testsuite) { + if (!testsuite.testcase) { + // If there are no testcases for this testsuite, skip it + continue; + } + for (const testcase of testsuite.testcase) { + // append the `classname` attribute to the `name` attribute + testcase.$.name = `${testcase.$.name} ${testcase.$.classname}`; + + // calculate the path of the spec file relative to the kibana project directory + const projectRelativePath = relative(rootDirectory, specFilePath); + + // encode the path by relacing dots with a non-ascii character + const encodedPath = projectRelativePath.replace(/\./g, '·'); + + // prepend the encoded path with a report name. This is for display purposes and shows up in the github issue. It is required. Store the value in the `classname` attribute. + testcase.$.classname = `${reportName}.${encodedPath}`; + } + } + + const builder = new Builder(); + // Return the report in an xml string + return builder.buildObject(reportJson); +} + +/** + * Test cases have a name, which is populated with part of the BDD test name, and classname, which is also populated with part of the BDD test name. + */ +const CypressJunitTestCase = t.type({ + $: t.type({ + name: t.string, + classname: t.string, + }), +}); + +/** + * Standard testsuites contain testcase elements, each representing a specific test execution. + */ +const CypressJunitTestSuite = t.intersection([ + t.partial({ + testcase: t.array(CypressJunitTestCase), + }), + t.type({ + $: t.intersection([ + t.type({ + name: t.string, + }), + /* `file` is only found on some suites, namely the 'Root Suite' */ + t.partial({ + file: t.string, + }), + ]), + }), +]); + +const CypressJunitReport = t.type({ + testsuites: t.type({ + testsuite: t.array(CypressJunitTestSuite), + }), +}); + +/** + * This type represents the Cypress-specific flavor of junit report. + **/ +type CypressJunitReport = t.TypeOf; + +/** + * Encapsulate either a successful result, or a recoverable error. This module only throws unrecoverable errors. + */ +type Result = { result: T } | { error: string }; + +/* + * This checks if the junit report contains '·' characters in the classname. This character is used by the kibana operations triage scripts, and the failed test reporter, to replace `.` characters in a path as part of its encoding scheme. If this character is found, we assume that the encoding has already taken place. + */ +function isReportAlreadyProcessed( + report: CypressJunitReport +): { processed: boolean; hadTestCases: true } | { processed: undefined; hadTestCases: false } { + for (const testsuite of report.testsuites.testsuite) { + if (!testsuite.testcase) { + // If there are no testcases for this testsuite, skip it + continue; + } + for (const testcase of testsuite.testcase) { + if (testcase.$.classname.indexOf('·') !== -1) { + return { processed: true, hadTestCases: true }; + } else { + return { processed: false, hadTestCases: true }; + } + } + } + return { processed: undefined, hadTestCases: false }; +} + +/** + * Validate the JSON representation of the Junit XML. + * If there are no errors, this returns `{ result: 'successs' }`, otherwise it returns an error, wrapped in `{ error: string }`. + * + */ +function validatedCypressJunitReport(parsedReport: unknown): Result { + const decoded = CypressJunitReport.decode(parsedReport); + + if (isLeft(decoded)) { + return { + error: `Could not validate data: ${PathReporter.report(decoded).join('\n')}. +`, + }; + } + return { result: decoded.right }; +} + +/** + * Iterate over the test suites and find the root suite, which Cypress populates with the path to the spec file. Return the path. + */ +function findSpecFilePathFromRootSuite(reportJson: CypressJunitReport): Result { + for (const testsuite of reportJson.testsuites.testsuite) { + if (testsuite.$.name === 'Root Suite' && testsuite.$.file) { + return { result: testsuite.$.file }; + } + } + return { + error: "No Root Suite containing a 'file' attribute was found.", + }; +} + +/** + * The CLI command, exported for the sake of automated tests. + */ +export async function command({ flags, log }: CommandArgs) { + if (typeof flags.pathPattern !== 'string' || flags.pathPattern.length === 0) { + throw createFlagError('please provide a single --pathPattern flag'); + } + + if (typeof flags.rootDirectory !== 'string' || flags.rootDirectory.length === 0) { + throw createFlagError('please provide a single --rootDirectory flag'); + } + + if (typeof flags.reportName !== 'string' || flags.reportName.length === 0) { + throw createFlagError('please provide a single --reportName flag'); + } + + for (const path of await globby(flags.pathPattern)) { + // Read the file + const source: string = await fs.readFile(path, 'utf8'); + + // Parse it from XML to json + const unvalidatedReportJson: unknown = await parseStringPromise(source); + + // Apply validation and return the validated report, or an error message + const maybeValidationResult: Result = + validatedCypressJunitReport(unvalidatedReportJson); + + const boilerplate = `This script validates each Junit report to ensure that it was produced by Cypress and that it has not already been processed by this script +This script relies on various assumptions. If your junit report is valid, then you must enhance this script in order to have support for it. If you are not trying to transform a Cypress junit report into a report that is compatible with Kibana Operations workflows, then you are running this script in error.`; + + const logError = (error: string) => { + log.error(`Error while validating ${path}: ${error} +${boilerplate} +`); + }; + + if ('error' in maybeValidationResult) { + logError(maybeValidationResult.error); + // If there is an error, continue trying to process other files. + continue; + } + + const reportJson: CypressJunitReport = maybeValidationResult.result; + + const { processed, hadTestCases } = isReportAlreadyProcessed(reportJson); + if (hadTestCases === false) { + log.warning(`${path} had no test cases. Skipping it. +${boilerplate} +`); + // If there is an error, continue trying to process other files. + continue; + } + + if (processed) { + logError( + "This report appears to have already been transformed because a '·' character was found in the classname. If your test intentionally includes this character as part of its name, remove it. This character is reserved for encoding file paths in the classname attribute." + ); + // If there is an error, continue trying to process other files. + continue; + } + + const maybeSpecFilePath: Result = findSpecFilePathFromRootSuite(reportJson); + + if ('error' in maybeSpecFilePath) { + logError(maybeSpecFilePath.error); + // If there is an error, continue trying to process other files. + continue; + } + + const reportString: string = await transformedReport({ + reportJson, + specFilePath: maybeSpecFilePath.result, + reportName: flags.reportName, + rootDirectory: flags.rootDirectory, + }); + + // If the writeInPlace flag was passed, overwrite the original file, otherwise log the output to stdout + if (flags.writeInPlace) { + log.info(`Wrote transformed junit report to ${path}`); + await fs.writeFile(path, reportString); + } else { + log.write(reportString); + } + } + log.success('task complete'); +} + +/** + * The args passed to our command. These are a subset of RunContext. By using a subset, we make mocking easier. + */ +export interface CommandArgs { + flags: { [index: string]: string | boolean | string[] | undefined }; + /** just pick the parts of `log` that we use. This makes mocking much easier. */ + log: Pick; +} diff --git a/x-pack/plugins/security_solution/server/lib/tags/saved_objects/create_tag.ts b/x-pack/plugins/security_solution/server/lib/tags/saved_objects/create_tag.ts index 5cd1715fb4b9c..fac8e22737f12 100644 --- a/x-pack/plugins/security_solution/server/lib/tags/saved_objects/create_tag.ts +++ b/x-pack/plugins/security_solution/server/lib/tags/saved_objects/create_tag.ts @@ -11,6 +11,7 @@ import type { SavedObjectsClientContract, } from '@kbn/core/server'; import type { TagAttributes } from '@kbn/saved-objects-tagging-plugin/common'; +import { getRandomColor } from '../../../../common/utils/get_ramdom_color'; interface CreateTagParams { savedObjectsClient: SavedObjectsClientContract; @@ -20,13 +21,6 @@ interface CreateTagParams { references?: SavedObjectReference[]; } -/** - * Returns the hex representation of a random color (e.g `#F1B7E2`) - */ -const getRandomColor = (): string => { - return `#${String(Math.floor(Math.random() * 16777215).toString(16)).padStart(6, '0')}`; -}; - export const createTag = async ({ savedObjectsClient, tagName, diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index f7a7db93ad6e8..95c959e473681 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -4001,6 +4001,16 @@ "type": "long" } } + }, + "environments": { + "properties": { + "1d": { + "type": "long", + "_meta": { + "description": "Total number of unique environments within the last day" + } + } + } } } }, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 5ebf9915d7469..a0aee9941fdb2 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -11645,7 +11645,6 @@ "xpack.csp.vulnerabilityTable.column.version": "Version", "xpack.csp.vulnerabilityTable.column.vulnerability": "Vulnérabilité", "xpack.csp.vulnerabilityTable.panel.buttonText": "Afficher toutes les vulnérabilités", - "xpack.csp.vulnerabilityTable.panel.tooltipText": "Explorer dans les résultats", "xpack.csp.vulnMgmtIntegration.awsOption.nameTitle": "Amazon Web Services", "xpack.csp.vulnMgmtIntegration.azureOption.nameTitle": "Azure", "xpack.csp.vulnMgmtIntegration.azureOption.tooltipContent": "Bientôt disponible", @@ -16372,8 +16371,6 @@ "xpack.fleet.deletePackagePolicy.failureSingleNotificationTitle": "Erreur lors de la suppression de l'intégration \"{id}\"", "xpack.fleet.deletePackagePolicy.fatalErrorNotificationTitle": "Erreur lors de la suppression de l'intégration", "xpack.fleet.deletePackagePolicy.successSingleNotificationTitle": "L'intégration \"{id}\" a été supprimée", - "xpack.fleet.disabledSecurityDescription": "Vous devez activer Security dans Kibana et Elasticsearch pour utiliser Elastic Fleet.", - "xpack.fleet.disabledSecurityTitle": "La fonctionnalité Security n'est pas activée", "xpack.fleet.editAgentPolicy.cancelButtonText": "Annuler", "xpack.fleet.editAgentPolicy.devtoolsRequestDescription": "Cette requête Kibana met à jour une politique d'agent.", "xpack.fleet.editAgentPolicy.errorNotificationTitle": "Impossible de mettre à jour la stratégie d'agent", @@ -16666,8 +16663,6 @@ "xpack.fleet.integrations.updatePackage.upgradePoliciesCheckboxLabel": "Mettre à niveau les stratégies d'intégration", "xpack.fleet.integrationsAppTitle": "Intégrations", "xpack.fleet.integrationsHeaderTitle": "Intégrations", - "xpack.fleet.invalidLicenseDescription": "Votre licence actuelle a expiré. Les agents Beats enregistrés continuent à fonctionner, mais vous avez besoin d'une licence valide pour accéder à l'interface d'Elastic Fleet.", - "xpack.fleet.invalidLicenseTitle": "Licence expirée", "xpack.fleet.multiRowInput.addAnotherUrl": "Ajouter une autre URL", "xpack.fleet.multiRowInput.addRow": "Ajouter une ligne", "xpack.fleet.multiRowInput.deleteButton": "Supprimer la ligne", @@ -27334,7 +27329,6 @@ "xpack.observability.apmEnableServiceMetricsDescription": "{betaLabel} Permet l'utilisation d'indicateurs de transaction de service. Il s'agit d'indicateurs à faible cardinalité qui peuvent être utilisés par certaines vues, comme l'inventaire de service, pour accélérer le chargement.", "xpack.observability.apmProgressiveLoadingDescription": "{technicalPreviewLabel} S'il faut charger les données de façon progressive pour les vues APM. Les données peuvent être demandées d'abord avec un taux d'échantillonnage inférieur, avec une précision plus faible mais des temps de réponse plus rapides, pendant que les données non échantillonnées se chargent en arrière-plan", "xpack.observability.apmServiceInventoryOptimizedSortingDescription": "{technicalPreviewLabel} Les pages par défaut de l'inventaire des services APM et de l'explorateur de stockage sont triées par nom de service (pour les services sans apprentissage automatique).", - "xpack.observability.apmTraceExplorerTabDescription": "{technicalPreviewLabel} Activer la fonctionnalité \"explorateur de traces APM\" qui vous permet de rechercher et d’inspecter les traces avec KQL ou EQL.", "xpack.observability.enableAgentExplorerDescription": "{betaLabel} Active la vue d'explorateur d'agent.", "xpack.observability.enableAwsLambdaMetricsDescription": "{technicalPreviewLabel} Affichez les indicateurs Amazon Lambda dans l’onglet d’indicateurs de service.", "xpack.observability.enableCriticalPathDescription": "{technicalPreviewLabel} Affichez de façon optionnelle le chemin critique d'une trace.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 33585d7d45ab2..ef740e51567b1 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -11659,7 +11659,6 @@ "xpack.csp.vulnerabilityTable.column.version": "バージョン", "xpack.csp.vulnerabilityTable.column.vulnerability": "脆弱性", "xpack.csp.vulnerabilityTable.panel.buttonText": "すべての脆弱性を表示", - "xpack.csp.vulnerabilityTable.panel.tooltipText": "調査結果を探索", "xpack.csp.vulnMgmtIntegration.awsOption.nameTitle": "Amazon Web Services", "xpack.csp.vulnMgmtIntegration.azureOption.nameTitle": "Azure", "xpack.csp.vulnMgmtIntegration.azureOption.tooltipContent": "まもなくリリース", @@ -16385,8 +16384,6 @@ "xpack.fleet.deletePackagePolicy.failureSingleNotificationTitle": "統合「{id}」の削除エラー", "xpack.fleet.deletePackagePolicy.fatalErrorNotificationTitle": "統合の削除エラー", "xpack.fleet.deletePackagePolicy.successSingleNotificationTitle": "統合「{id}」を削除しました", - "xpack.fleet.disabledSecurityDescription": "Elastic Fleet を使用するには、Kibana と Elasticsearch でセキュリティを有効にする必要があります。", - "xpack.fleet.disabledSecurityTitle": "セキュリティが有効ではありません", "xpack.fleet.editAgentPolicy.cancelButtonText": "キャンセル", "xpack.fleet.editAgentPolicy.devtoolsRequestDescription": "このKibanaリクエストにより、エージェントポリシーが更新されます。", "xpack.fleet.editAgentPolicy.errorNotificationTitle": "エージェントポリシーを更新できません", @@ -16679,8 +16676,6 @@ "xpack.fleet.integrations.updatePackage.upgradePoliciesCheckboxLabel": "統合ポリシーのアップグレード", "xpack.fleet.integrationsAppTitle": "統合", "xpack.fleet.integrationsHeaderTitle": "統合", - "xpack.fleet.invalidLicenseDescription": "現在のライセンスは期限切れです。登録されたビートエージェントは引き続き動作しますが、Elastic Fleetインターフェースにアクセスするには有効なライセンスが必要です。", - "xpack.fleet.invalidLicenseTitle": "ライセンスの期限切れ", "xpack.fleet.multiRowInput.addAnotherUrl": "別のURLを追加", "xpack.fleet.multiRowInput.addRow": "行の追加", "xpack.fleet.multiRowInput.deleteButton": "行の削除", @@ -27333,7 +27328,6 @@ "xpack.observability.apmEnableServiceMetricsDescription": "{betaLabel}サービストランザクションメトリックの使用を有効にします。これは、サービスインベントリなどの特定のビューで使用できる低カーディナリティのメトリックで、読み込み時間を短縮します。", "xpack.observability.apmProgressiveLoadingDescription": "{technicalPreviewLabel} APMビューでデータのプログレッシブ読み込みを行うかどうか。サンプリングされていないデータをバックグラウンドで読み込みながら、最初は低いサンプリングレート、低い精度、高速の応答時間でデータを要求できます", "xpack.observability.apmServiceInventoryOptimizedSortingDescription": "{technicalPreviewLabel}サービス名によるデフォルトAPMサービスインベントリおよびストレージエクスプローラーページの並べ替え(機械学習が適用されていないサービス)。", - "xpack.observability.apmTraceExplorerTabDescription": "{technicalPreviewLabel} APMトレースエクスプローラー機能を有効にし、KQLまたはEQLでトレースを検索、検査できます。", "xpack.observability.enableAgentExplorerDescription": "{betaLabel}エージェントエクスプローラー表示を有効にします。", "xpack.observability.enableAwsLambdaMetricsDescription": "{technicalPreviewLabel} [サービスメトリック]タブにAmazon Lambdaメトリックを表示します。", "xpack.observability.enableCriticalPathDescription": "{technicalPreviewLabel} 任意で、トレースのクリティカルパスを表示します。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b6e40ad916dec..6144058cfd197 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -11659,7 +11659,6 @@ "xpack.csp.vulnerabilityTable.column.version": "版本", "xpack.csp.vulnerabilityTable.column.vulnerability": "漏洞", "xpack.csp.vulnerabilityTable.panel.buttonText": "查看所有漏洞", - "xpack.csp.vulnerabilityTable.panel.tooltipText": "在结果中浏览", "xpack.csp.vulnMgmtIntegration.awsOption.nameTitle": "Amazon Web Services", "xpack.csp.vulnMgmtIntegration.azureOption.nameTitle": "Azure", "xpack.csp.vulnMgmtIntegration.azureOption.tooltipContent": "即将推出", @@ -16385,8 +16384,6 @@ "xpack.fleet.deletePackagePolicy.failureSingleNotificationTitle": "删除集成“{id}”时出错", "xpack.fleet.deletePackagePolicy.fatalErrorNotificationTitle": "删除集成时出错", "xpack.fleet.deletePackagePolicy.successSingleNotificationTitle": "已删除集成“{id}”", - "xpack.fleet.disabledSecurityDescription": "必须在 Kibana 和 Elasticsearch 启用安全性,才能使用 Elastic Fleet。", - "xpack.fleet.disabledSecurityTitle": "安全性未启用", "xpack.fleet.editAgentPolicy.cancelButtonText": "取消", "xpack.fleet.editAgentPolicy.devtoolsRequestDescription": "此 Kibana 请求将更新代理策略。", "xpack.fleet.editAgentPolicy.errorNotificationTitle": "无法更新代理策略", @@ -16679,8 +16676,6 @@ "xpack.fleet.integrations.updatePackage.upgradePoliciesCheckboxLabel": "升级集成策略", "xpack.fleet.integrationsAppTitle": "集成", "xpack.fleet.integrationsHeaderTitle": "集成", - "xpack.fleet.invalidLicenseDescription": "您当前的许可证已过期。已注册 Beats 代理将继续工作,但您需要有效的许可证,才能访问 Elastic Fleet 界面。", - "xpack.fleet.invalidLicenseTitle": "已过期许可证", "xpack.fleet.multiRowInput.addAnotherUrl": "添加另一个 URL", "xpack.fleet.multiRowInput.addRow": "添加行", "xpack.fleet.multiRowInput.deleteButton": "删除行", @@ -27331,7 +27326,6 @@ "xpack.observability.apmEnableServiceMetricsDescription": "{betaLabel} 启用服务事务指标,这种是低基数指标,可供某些视图(如服务库存)使用来加快加载速度。", "xpack.observability.apmProgressiveLoadingDescription": "{technicalPreviewLabel} 是否以渐进方式为 APM 视图加载数据。可以先以较低的采样速率请求数据,这样的准确性较低,但响应时间更快,同时在后台加载未采样数据", "xpack.observability.apmServiceInventoryOptimizedSortingDescription": "{technicalPreviewLabel} 默认 APM 服务库存和 Storage Explorer 页面排序(对于未应用 Machine Learning 的服务)将按服务名称排序。", - "xpack.observability.apmTraceExplorerTabDescription": "{technicalPreviewLabel} 启用 APM Trace Explorer 功能,它允许您通过 KQL 或 EQL 搜索和检查跟踪。", "xpack.observability.enableAgentExplorerDescription": "{betaLabel} 启用代理浏览器视图。", "xpack.observability.enableAwsLambdaMetricsDescription": "{technicalPreviewLabel} 在服务指标选项卡中显示 Amazon Lambda 指标。", "xpack.observability.enableCriticalPathDescription": "{technicalPreviewLabel}(可选)显示跟踪的关键路径。", diff --git a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts index f4c044415190f..a5b8bc5617f94 100644 --- a/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts +++ b/x-pack/test/cases_api_integration/security_and_spaces/tests/common/cases/find_cases.ts @@ -394,7 +394,7 @@ export default ({ getService }: FtrProviderContext): void => { expect(cases.cases[0].title).to.equal(uuid); }); - it('should successfully find a case with a valid uuid in title', async () => { + it('should successfully find a case with a valid uuid in description', async () => { const uuid = uuidv1(); await createCase(supertest, { ...postCaseReq, description: uuid }); @@ -459,6 +459,38 @@ export default ({ getService }: FtrProviderContext): void => { }); } + it('400s when trying to fetch with invalid searchField', async () => { + await findCases({ + supertest, + query: { searchFields: 'closed_by.username', search: 'some search string*' }, + expectedHttpCode: 400, + }); + }); + + it('400s when trying to fetch with invalid array of searchFields', async () => { + await findCases({ + supertest, + query: { searchFields: ['closed_by.username', 'title'], search: 'some search string*' }, + expectedHttpCode: 400, + }); + }); + + it('400s when trying to fetch with invalid sortField', async () => { + await findCases({ + supertest, + query: { sortField: 'foobar', search: 'some search string*' }, + expectedHttpCode: 400, + }); + }); + + it('400s when trying to fetch with rootSearchFields', async () => { + await findCases({ + supertest, + query: { rootSearchFields: ['_id'], search: 'some search string*' }, + expectedHttpCode: 400, + }); + }); + it(`400s when perPage > ${MAX_CASES_PER_PAGE} supplied`, async () => { await findCases({ supertest, diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts index e7a6a68f75185..47d3f93fd8ddf 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts @@ -21,6 +21,64 @@ export default function (providerContext: FtrProviderContext) { describe('fleet_agent_policies', () => { skipIfNoDockerRegistry(providerContext); + + describe('GET /api/fleet/agent_policies', () => { + before(async () => { + await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await kibanaServer.savedObjects.cleanStandardList(); + }); + setupFleetAndAgents(providerContext); + + it('should get list agent policies', async () => { + await supertest.get(`/api/fleet/agent_policies`).expect(200); + }); + + it('should get a list of agent policies by kuery', async () => { + await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'TEST', + namespace: 'default', + }) + .expect(200); + const { body: responseBody } = await supertest + .get(`/api/fleet/agent_policies?kuery=ingest-agent-policies.name:TEST`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + expect(responseBody.items.length).to.eql(1); + }); + + it('should return 200 even if the passed kuery does not have prefix ingest-agent-policies', async () => { + await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'TEST-1', + namespace: 'default', + }) + .expect(200); + await supertest + .get(`/api/fleet/agent_policies?kuery=name:TEST-1`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + + it('should return 400 if passed kuery is not correct', async () => { + await supertest + .get(`/api/fleet/agent_policies?kuery=ingest-agent-policies.non_existent_parameter:test`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return 400 if passed kuery is invalid', async () => { + await supertest + .get(`/api/fleet/agent_policies?kuery='test%3A'`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + }); + describe('POST /api/fleet/agent_policies', () => { let systemPkgVersion: string; before(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/agents/list.ts b/x-pack/test/fleet_api_integration/apis/agents/list.ts index d051cf677437a..328e4a240e77c 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/list.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/list.ts @@ -72,15 +72,29 @@ export default function ({ getService }: FtrProviderContext) { expect(apiResponse.total).to.eql(4); }); - it('should return a 400 when given an invalid "kuery" value', async () => { - await supertest.get(`/api/fleet/agents?kuery=.test%3A`).expect(400); + it('should return 200 if the passed kuery is valid', async () => { + await supertest + .get(`/api/fleet/agent_status?kuery=fleet-agents.local_metadata.host.hostname:test`) + .set('kbn-xsrf', 'xxxx') + .expect(200); }); - it('should return a 200 and an empty list when given a "kuery" value with a missing saved object type', async () => { - const { body: apiResponse } = await supertest - .get(`/api/fleet/agents?kuery=m`) // missing saved object type + it('should return 200 also if the passed kuery does not have prefix fleet-agents', async () => { + await supertest + .get(`/api/fleet/agent_status?kuery=local_metadata.host.hostname:test`) + .set('kbn-xsrf', 'xxxx') .expect(200); - expect(apiResponse.total).to.eql(0); + }); + + it('should return a 400 when given an invalid "kuery" value', async () => { + await supertest.get(`/api/fleet/agents?kuery='test%3A'`).expect(400); + }); + + it('should return 400 if passed kuery has non existing parameters', async () => { + await supertest + .get(`/api/fleet/agents?kuery=fleet-agents.non_existent_parameter:healthy`) + .set('kbn-xsrf', 'xxxx') + .expect(400); }); it('should accept a valid "kuery" value', async () => { diff --git a/x-pack/test/fleet_api_integration/apis/agents/status.ts b/x-pack/test/fleet_api_integration/apis/agents/status.ts index 4dbd144493c46..498fbe7c42bce 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/status.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/status.ts @@ -307,5 +307,37 @@ export default function ({ getService }: FtrProviderContext) { }, }); }); + + it('should get a list of agent policies by kuery', async () => { + await supertest + .get(`/api/fleet/agent_status?kuery=fleet-agents.status:healthy`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'TEST', + namespace: 'default', + }) + .expect(200); + }); + + it('should return 200 also if the kuery does not have prefix fleet-agents', async () => { + await supertest + .get(`/api/fleet/agent_status?kuery=status:unhealthy`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + + it('should return 400 if passed kuery has non existing parameters', async () => { + await supertest + .get(`/api/fleet/agent_status?kuery=fleet-agents.non_existent_parameter:healthy`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return 400 if passed kuery is not correct', async () => { + await supertest + .get(`/api/fleet/agent_status?kuery='test%3A'`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); }); } diff --git a/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts b/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts index 05c1a1f8ae6c7..197e4da7429bf 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts @@ -111,7 +111,7 @@ export default function (providerContext: FtrProviderContext) { const verifyActionResult = async () => { const { body } = await supertest - .get(`/api/fleet/agents?kuery=tags:newTag`) + .get(`/api/fleet/agents?kuery=fleet-agents.tags:newTag`) .set('kbn-xsrf', 'xxx'); expect(body.total).to.eql(4); }; @@ -134,7 +134,7 @@ export default function (providerContext: FtrProviderContext) { const verifyActionResult = async () => { const { body } = await supertest - .get(`/api/fleet/agents?kuery=tags:existingTag`) + .get(`/api/fleet/agents?kuery=fleet-agents.tags:existingTag`) .set('kbn-xsrf', 'xxx'); expect(body.total).to.eql(0); }; @@ -142,7 +142,35 @@ export default function (providerContext: FtrProviderContext) { await pollResult(actionId, 2, verifyActionResult); }); - it('should return a 403 if user lacks fleet all permissions', async () => { + it('should return 200 also if the kuery is valid', async () => { + await supertest + .get(`/api/fleet/agents?kuery=tags:fleet-agents.existingTag`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + + it('should return 200 also if the kuery does not have prefix fleet-agents', async () => { + await supertest + .get(`/api/fleet/agents?kuery=tags:existingTag`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + + it('should return 400 if the passed kuery is not correct', async () => { + await supertest + .get(`/api/fleet/agents?kuery=fleet-agents.non_existent_parameter:existingTag`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return 400 if the passed kuery is invalid', async () => { + await supertest + .get(`/api/fleet/agents?kuery='test%3A'`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return a 403 if user lacks "fleet all" permissions', async () => { await supertestWithoutAuth .post(`/api/fleet/agents/bulk_update_agent_tags`) .auth(testUsers.fleet_no_access.username, testUsers.fleet_no_access.password) diff --git a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts index 703621dc7f9d4..d717c6e285c04 100644 --- a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts @@ -58,6 +58,36 @@ export default function (providerContext: FtrProviderContext) { .auth(testUsers.integr_all_only.username, testUsers.integr_all_only.password) .expect(403); }); + + it('should return 200 if the passed kuery is correct', async () => { + await supertest + .get(`/api/fleet/enrollment_api_keys?kuery=fleet-enrollment-api-keys.policy_id:policy1`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + + it('should return 200 if the passed kuery does not have prefix fleet-enrollment-api-keys', async () => { + await supertest + .get(`/api/fleet/enrollment_api_keys?kuery=policy_id:policy1`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + }); + + it('should return 400 if the passed kuery is not correct', async () => { + await supertest + .get( + `/api/fleet/enrollment_api_keys?kuery=fleet-enrollment-api-keys.non_existent_parameter:test` + ) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return 400 if the passed kuery is invalid', async () => { + await supertest + .get(`/api/fleet/enrollment_api_keys?kuery='test%3A'`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); }); describe('GET /fleet/enrollment_api_keys/{id}', async () => { diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/get.ts b/x-pack/test/fleet_api_integration/apis/package_policy/get.ts index 06d356c03b37e..ce0a7a1f219c6 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/get.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/get.ts @@ -426,5 +426,94 @@ export default function (providerContext: FtrProviderContext) { expect(response.body.items[0].id).to.eql(packagePolicyId); }); }); + + describe('get by kuery', async function () { + let agentPolicyId: string; + let endpointPackagePolicyId: string; + + before(async function () { + if (!server.enabled) { + return; + } + + const { body: agentPolicyResponse } = await supertest + .post(`/api/fleet/agent_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Test policy', + namespace: 'default', + }); + agentPolicyId = agentPolicyResponse.item.id; + + const { body: endpointPackagePolicyResponse } = await supertest + .post(`/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'endpoint-1', + description: '', + namespace: 'default', + policy_id: agentPolicyId, + enabled: true, + inputs: [], + force: true, + package: { + name: 'endpoint', + title: 'Elastic Defend', + version: '8.6.1', + }, + }); + endpointPackagePolicyId = endpointPackagePolicyResponse.item.id; + }); + + after(async function () { + if (!server.enabled) { + return; + } + + await supertest + .post(`/api/fleet/package_policies/delete`) + .set('kbn-xsrf', 'xxxx') + .send({ packagePolicyIds: [endpointPackagePolicyId] }) + .expect(200); + + // uninstall endpoint package + await supertest + .delete(`/api/fleet/epm/packages/endpoint-8.6.1`) + .set('kbn-xsrf', 'xxxx') + .send({ force: true }) + .expect(200); + }); + + it('should return 200 if the passed kuery is correct', async () => { + const { body: packagePolicyResponse } = await supertest + .get(`/api/fleet/package_policies?kuery=ingest-package-policies.package.name:endpoint`) + .set('kbn-xsrf', 'xxxx') + .expect(200); + + expect(packagePolicyResponse.items[0].id).to.eql(endpointPackagePolicyId); + }); + it('should return 400 if the passed kuery does not have prefix ingest-package-policies', async () => { + await supertest + .get(`/api/fleet/package_policies?kuery=package.name:endpoint`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return 400 if the passed kuery is not correct', async () => { + await supertest + .get( + `/api/fleet/package_policies?kuery=ingest-package-policies.non_existent_parameter:test` + ) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + + it('should return 400 if the passed kuery is invalid', async () => { + await supertest + .get(`/api/fleet/package_policies?kuery='test%3A'`) + .set('kbn-xsrf', 'xxxx') + .expect(400); + }); + }); }); } diff --git a/x-pack/test/functional/apps/lens/group2/field_formatters.ts b/x-pack/test/functional/apps/lens/group2/field_formatters.ts index 4116de53e4985..4b66436fc1c2c 100644 --- a/x-pack/test/functional/apps/lens/group2/field_formatters.ts +++ b/x-pack/test/functional/apps/lens/group2/field_formatters.ts @@ -36,7 +36,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await fieldEditor.confirmDelete(); await PageObjects.lens.waitForFieldMissing('runtimefield'); }); - it('should display url formatter correctly', async () => { await retry.try(async () => { await PageObjects.lens.clickAddField(); @@ -196,5 +195,43 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('572,732.21%'); }); }); + describe('formatter order', () => { + before(async () => { + await PageObjects.visualize.navigateToNewVisualization(); + await PageObjects.visualize.clickVisType('lens'); + await PageObjects.lens.goToTimeRange(); + await PageObjects.lens.switchToVisualization('lnsDatatable'); + }); + + after(async () => { + await PageObjects.lens.clickField('runtimefield'); + await PageObjects.lens.removeField('runtimefield'); + await fieldEditor.confirmDelete(); + await PageObjects.lens.waitForFieldMissing('runtimefield'); + }); + it('should be overridden by Lens formatter', async () => { + await retry.try(async () => { + await PageObjects.lens.clickAddField(); + await fieldEditor.setName('runtimefield'); + await fieldEditor.setFieldType('long'); + await fieldEditor.enableValue(); + await fieldEditor.typeScript("emit(doc['bytes'].value)"); + await fieldEditor.setFormat(FIELD_FORMAT_IDS.BYTES); + await fieldEditor.save(); + await fieldEditor.waitUntilClosed(); + await PageObjects.header.waitUntilLoadingHasFinished(); + }); + await PageObjects.lens.configureDimension({ + dimension: 'lnsDatatable_metrics > lns-empty-dimension', + operation: 'average', + field: 'runtimefield', + keepOpen: true, + }); + await PageObjects.lens.editDimensionFormat('Bits (1000)', { decimals: 3, prefix: 'blah' }); + await PageObjects.lens.closeDimensionEditor(); + await PageObjects.lens.waitForVisualization(); + expect(await PageObjects.lens.getDatatableCellText(0, 0)).to.eql('5.727kbitblah'); + }); + }); }); } diff --git a/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts b/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts index 9e3538d036cd9..648f7f8ccc044 100644 --- a/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts +++ b/x-pack/test/functional/apps/transform/creation/index_pattern/continuous_transform.ts @@ -224,7 +224,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]; for (const testData of testDataList) { - describe(`${testData.suiteTitle}`, function () { + // FLAKY: https://github.com/elastic/kibana/issues/158612 + describe.skip(`${testData.suiteTitle}`, function () { after(async () => { await transform.api.deleteIndices(testData.destinationIndex); await transform.testResources.deleteIndexPatternByTitle(testData.destinationIndex); diff --git a/yarn.lock b/yarn.lock index fc33b1e2ffba4..37f05126527f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1469,10 +1469,10 @@ dependencies: object-hash "^1.3.0" -"@elastic/charts@59.0.0": - version "59.0.0" - resolved "https://registry.yarnpkg.com/@elastic/charts/-/charts-59.0.0.tgz#c81a82c389011f52ac79e7c59b0551439a0e90b2" - integrity sha512-itEam7dpyHxMNl8eNnZbQa/7M6D741/qsZWjDnXXlirvRsMzpRwhuB0WGxGNXxCuuW/GqWXNlhsqXgKqERS4yw== +"@elastic/charts@59.1.0": + version "59.1.0" + resolved "https://registry.yarnpkg.com/@elastic/charts/-/charts-59.1.0.tgz#d6b70501f8eec95cc981966713ce5a89028f8fcb" + integrity sha512-qQyDaGEbo/2p+K/hnlobfADmit055kLJbWEkf+rK+uezloNvyBuHETvsoUnrWYG+O5QznHU+wzjSpz7tj1GL3w== dependencies: "@popperjs/core" "^2.4.0" bezier-easing "^2.1.0"