diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index 301670605a0d..bc564624f8a5 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -352,6 +352,7 @@ enabled: - x-pack/performance/journeys_e2e/promotion_tracking_dashboard.ts - x-pack/performance/journeys_e2e/web_logs_dashboard.ts - x-pack/performance/journeys_e2e/web_logs_dashboard_esql.ts + - x-pack/performance/journeys_e2e/web_logs_dashboard_dataview.ts - x-pack/performance/journeys_e2e/data_stress_test_lens.ts - x-pack/performance/journeys_e2e/ecommerce_dashboard_saved_search_only.ts - x-pack/performance/journeys_e2e/ecommerce_dashboard_tsvb_gauge_only.ts diff --git a/.github/workflows/on-merge.yml b/.github/workflows/on-merge.yml index 14f94571d551..b41d04bf8517 100644 --- a/.github/workflows/on-merge.yml +++ b/.github/workflows/on-merge.yml @@ -10,21 +10,23 @@ jobs: name: 'Label and Backport' runs-on: ubuntu-latest if: | - github.event.pull_request.merged == true - && ( - ( - github.event.action == 'labeled' && ( - github.event.label.name == 'backport:prev-minor' - || github.event.label.name == 'backport:prev-major' - || github.event.label.name == 'backport:current-major' - || github.event.label.name == 'backport:all-open' - || github.event.label.name == 'backport:version' - || github.event.label.name == 'auto-backport' - ) - ) - || (github.event.action == 'unlabeled' && github.event.label.name == 'backport:skip') - || (github.event.action == 'closed') - ) + github.event.pull_request.merged == true && + (github.event.action == 'closed' || + (github.event.action == 'labeled' && + (github.event.label.name == 'backport:prev-minor' || + github.event.label.name == 'backport:prev-major' || + github.event.label.name == 'backport:current-major' || + github.event.label.name == 'backport:all-open' || + github.event.label.name == 'backport:version' || + github.event.label.name == 'auto-backport')) || + (github.event.action == 'unlabeled' && + github.event.label.name == 'backport:skip' && + (contains(github.event.pull_request.labels.*.name, 'backport:prev-minor') || + contains(github.event.pull_request.labels.*.name, 'backport:prev-major') || + contains(github.event.pull_request.labels.*.name, 'backport:current-major') || + contains(github.event.pull_request.labels.*.name, 'backport:all-open') || + contains(github.event.pull_request.labels.*.name, 'backport:version') || + contains(github.event.pull_request.labels.*.name, 'auto-backport')))) steps: - name: Checkout Actions uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index c49a38e55f71..2cd67eb0b68a 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index ab189d97aa8f..a5093803bed9 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index d058008962ab..4f3ed60969f8 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index ffec8dab60e9..0271fc5bbc87 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index b847d4bf6cbf..b1ec6b903eab 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3639,20 +3639,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorOptions.maintenanceWindowIds", - "type": "Array", - "tags": [], - "label": "maintenanceWindowIds", - "description": [], - "signature": [ - "string[] | undefined" - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "alerting", "id": "def-server.RuleExecutorOptions.getTimeRange", @@ -3712,59 +3698,16 @@ "children": [ { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.savedObjectsClient", - "type": "Object", + "id": "def-server.RuleExecutorServices.alertsClient", + "type": "CompoundType", "tags": [], - "label": "savedObjectsClient", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-saved-objects-api-server", - "scope": "server", - "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", - "section": "def-server.SavedObjectsClientContract", - "text": "SavedObjectsClientContract" - } + "label": "alertsClient", + "description": [ + "\nOnly available when framework alerts are enabled and rule\ntype has registered alert context with the framework with shouldWrite set to true" ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.uiSettingsClient", - "type": "Object", - "tags": [], - "label": "uiSettingsClient", - "description": [], "signature": [ - { - "pluginId": "@kbn/core-ui-settings-server", - "scope": "server", - "docId": "kibKbnCoreUiSettingsServerPluginApi", - "section": "def-server.IUiSettingsClient", - "text": "IUiSettingsClient" - } - ], - "path": "x-pack/plugins/alerting/server/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.scopedClusterClient", - "type": "Object", - "tags": [], - "label": "scopedClusterClient", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-elasticsearch-server", - "scope": "server", - "docId": "kibKbnCoreElasticsearchServerPluginApi", - "section": "def-server.IScopedClusterClient", - "text": "IScopedClusterClient" - } + "PublicAlertsClient", + " | null" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -3818,30 +3761,37 @@ }, { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.alertsClient", - "type": "CompoundType", + "id": "def-server.RuleExecutorServices.getDataViews", + "type": "Function", "tags": [], - "label": "alertsClient", - "description": [ - "\nOnly available when framework alerts are enabled and rule\ntype has registered alert context with the framework with shouldWrite set to true" - ], + "label": "getDataViews", + "description": [], "signature": [ - "PublicAlertsClient", - " | null" + "() => Promise<", + { + "pluginId": "dataViews", + "scope": "common", + "docId": "kibDataViewsPluginApi", + "section": "def-common.DataViewsContract", + "text": "DataViewsContract" + }, + ">" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [], + "returnComment": [] }, { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.shouldWriteAlerts", + "id": "def-server.RuleExecutorServices.getMaintenanceWindowIds", "type": "Function", "tags": [], - "label": "shouldWriteAlerts", + "label": "getMaintenanceWindowIds", "description": [], "signature": [ - "() => boolean" + "() => Promise" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -3851,13 +3801,21 @@ }, { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.shouldStopExecution", + "id": "def-server.RuleExecutorServices.getSearchSourceClient", "type": "Function", "tags": [], - "label": "shouldStopExecution", + "label": "getSearchSourceClient", "description": [], "signature": [ - "() => boolean" + "() => Promise<", + { + "pluginId": "data", + "scope": "common", + "docId": "kibDataSearchPluginApi", + "section": "def-common.ISearchStartSearchSource", + "text": "ISearchStartSearchSource" + }, + ">" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -3880,6 +3838,61 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "alerting", + "id": "def-server.RuleExecutorServices.ruleResultService", + "type": "Object", + "tags": [], + "label": "ruleResultService", + "description": [], + "signature": [ + "PublicLastRunSetters", + " | undefined" + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.RuleExecutorServices.savedObjectsClient", + "type": "Object", + "tags": [], + "label": "savedObjectsClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "server", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-server.SavedObjectsClientContract", + "text": "SavedObjectsClientContract" + } + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "alerting", + "id": "def-server.RuleExecutorServices.scopedClusterClient", + "type": "Object", + "tags": [], + "label": "scopedClusterClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-elasticsearch-server", + "scope": "server", + "docId": "kibKbnCoreElasticsearchServerPluginApi", + "section": "def-server.IScopedClusterClient", + "text": "IScopedClusterClient" + } + ], + "path": "x-pack/plugins/alerting/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "alerting", "id": "def-server.RuleExecutorServices.share", @@ -3902,36 +3915,29 @@ }, { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.ruleResultService", - "type": "Object", + "id": "def-server.RuleExecutorServices.shouldStopExecution", + "type": "Function", "tags": [], - "label": "ruleResultService", + "label": "shouldStopExecution", "description": [], "signature": [ - "PublicLastRunSetters", - " | undefined" + "() => boolean" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [], + "returnComment": [] }, { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.getDataViews", + "id": "def-server.RuleExecutorServices.shouldWriteAlerts", "type": "Function", "tags": [], - "label": "getDataViews", + "label": "shouldWriteAlerts", "description": [], "signature": [ - "() => Promise<", - { - "pluginId": "dataViews", - "scope": "common", - "docId": "kibDataViewsPluginApi", - "section": "def-common.DataViewsContract", - "text": "DataViewsContract" - }, - ">" + "() => boolean" ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, @@ -3941,27 +3947,23 @@ }, { "parentPluginId": "alerting", - "id": "def-server.RuleExecutorServices.getSearchSourceClient", - "type": "Function", + "id": "def-server.RuleExecutorServices.uiSettingsClient", + "type": "Object", "tags": [], - "label": "getSearchSourceClient", + "label": "uiSettingsClient", "description": [], "signature": [ - "() => Promise<", { - "pluginId": "data", - "scope": "common", - "docId": "kibDataSearchPluginApi", - "section": "def-common.ISearchStartSearchSource", - "text": "ISearchStartSearchSource" - }, - ">" + "pluginId": "@kbn/core-ui-settings-server", + "scope": "server", + "docId": "kibKbnCoreUiSettingsServerPluginApi", + "section": "def-server.IUiSettingsClient", + "text": "IUiSettingsClient" + } ], "path": "x-pack/plugins/alerting/server/types.ts", "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index c75d2ffac811..98b7d68df1cd 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-09-26 +date: 2024-09-27 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 57ec5a7724ef..f67786c90cb2 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 689fe2c8cc36..807791235484 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 83e7e6f4cbab..57d9ba0a86c5 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-09-26 +date: 2024-09-27 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 52563b1dd9b6..94f403066c1c 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-09-26 +date: 2024-09-27 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 a491599a9721..9db28329b6ee 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-09-26 +date: 2024-09-27 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 3946062cc552..1a8b9c6d1a49 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-09-26 +date: 2024-09-27 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 371c004ac67b..f23006cf8569 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-09-26 +date: 2024-09-27 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 44922dead249..ab37ccf49648 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 1040a0c44212..27f769653d9f 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-09-26 +date: 2024-09-27 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 013f3328224a..28af6ae5ceea 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 4ffee542cf80..b6a5307ea175 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-09-26 +date: 2024-09-27 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 16fce763f1bf..3694ebf48b79 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-09-26 +date: 2024-09-27 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 dbad2164113c..72dd08c1f542 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-09-26 +date: 2024-09-27 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 5ddb63cbd837..73d561ccd685 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-09-26 +date: 2024-09-27 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 d2bb1cb32f84..e563b6f47672 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index 0a0720d46b3b..02d0be68081f 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -726,6 +726,60 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "dashboard", + "id": "def-public.SearchDashboardsResponse", + "type": "Interface", + "tags": [], + "label": "SearchDashboardsResponse", + "description": [], + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dashboard", + "id": "def-public.SearchDashboardsResponse.total", + "type": "number", + "tags": [], + "label": "total", + "description": [], + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "dashboard", + "id": "def-public.SearchDashboardsResponse.hits", + "type": "Array", + "tags": [], + "label": "hits", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-utils", + "scope": "server", + "docId": "kibKbnContentManagementUtilsPluginApi", + "section": "def-server.SOWithMetadata", + "text": "SOWithMetadata" + }, + "<", + { + "pluginId": "dashboard", + "scope": "common", + "docId": "kibDashboardPluginApi", + "section": "def-common.DashboardAttributes", + "text": "DashboardAttributes" + }, + ">[]" + ], + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "enums": [ diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index ed3f81384505..9bde296dbb59 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 128 | 0 | 123 | 15 | +| 131 | 0 | 126 | 15 | ## Client diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 3d39eb4778f1..6bd58f424253 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 0b93972adc2f..86bd1404dda0 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -11788,14 +11788,6 @@ "deprecated": true, "trackAdoption": false, "references": [ - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/data/types.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/data/data_service.ts" - }, { "plugin": "dataVisualizer", "path": "x-pack/plugins/data_visualizer/public/application/common/components/stats_table/components/field_data_row/document_stats.tsx" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 07767c4f7562..37f7144aa4b8 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 062183834e82..bc8f5ebe3011 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 15be73ed7557..184f98fe45f1 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-09-26 +date: 2024-09-27 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 989d0c6d40d7..c90c0befb5f6 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 01f100272fa8..1133104305ef 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 50abb7501f30..04490258ce93 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-09-26 +date: 2024-09-27 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 21b742b16172..31c77a44c02c 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-09-26 +date: 2024-09-27 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 9413d9873e64..e57fc46cd761 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-09-26 +date: 2024-09-27 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 4703562c52fd..6528a0e2ede6 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-09-26 +date: 2024-09-27 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 ab4680c535c8..eb010f240d32 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 3c074ad4adeb..f245bd4b1b70 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 3a4f0b53b0a7..76e18fc5d8e8 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -25,7 +25,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, taskManager, spaces, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, savedSearch, canvas, fleet, cloudSecurityPosture, ml, logsShared, graph, lists, maps, visualizations, infra, apmDataAccess, securitySolution, apm, slo, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | graph, stackAlerts, inputControlVis, securitySolution | - | -| | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | +| | dataVisualizer, stackAlerts, expressionPartitionVis | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | triggersActionsUi | - | | | triggersActionsUi | - | @@ -50,6 +50,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, @kbn/core, actions, @kbn/alerting-types, alerting, savedSearch, canvas, enterpriseSearch, securitySolution, taskManager, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - | | | @kbn/core-saved-objects-api-browser, @kbn/core-saved-objects-browser-internal, @kbn/core-saved-objects-api-server, @kbn/core, home, savedObjectsTagging, canvas, savedObjects, @kbn/core-saved-objects-browser-mocks, @kbn/core-saved-objects-import-export-server-internal, savedObjectsTaggingOss, lists, securitySolution, upgradeAssistant, savedObjectsManagement, @kbn/core-ui-settings-server-internal | - | | | @kbn/core-saved-objects-migration-server-internal, actions, dataViews, data, alerting, lens, cases, savedSearch, canvas, savedObjectsTagging, graph, lists, maps, visualizations, securitySolution, dashboard, @kbn/core-test-helpers-so-type-serializer | - | +| | @kbn/esql-utils, @kbn/securitysolution-utils, securitySolution | - | | | security, securitySolution, cloudLinks, cases | - | | | security, cases, searchPlayground, securitySolution | - | | | lists, securitySolution, @kbn/securitysolution-io-ts-list-types | - | @@ -109,13 +110,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | graph, visTypeTimeseries, dataViewManagement | - | | | visualizations, graph | - | | | kubernetesSecurity, osquery, threatIntelligence | - | -| | lens, dashboard, canvas | - | -| | lens, dashboard | - | -| | lens, dashboard, investigateApp | - | -| | canvas, dashboard | - | -| | dashboard | - | -| | embeddable, dashboard | - | -| | dashboard, maps | - | | | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, home, unifiedSearch, visualizations, fileUpload, dashboardEnhanced, transform, discover, dataVisualizer | - | | | dataViews, maps | - | | | dataViews, dataViewManagement | - | @@ -125,14 +119,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | dataViews, dataViewManagement | - | | | maps | - | | | maps | - | +| | dashboard, maps | - | | | dataViewManagement | - | | | dataViewManagement | - | | | data, discover, imageEmbeddable, embeddable | - | | | spaces, savedObjectsManagement | - | | | unifiedSearch | - | | | unifiedSearch | - | +| | lens, dashboard, canvas | - | | | lens | - | +| | lens, dashboard | - | +| | lens, dashboard, investigateApp | - | | | @kbn/core, lens, savedObjects | - | +| | canvas | - | | | canvas | - | | | canvas | - | | | canvas | - | @@ -145,6 +144,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | canvas | - | | | enterpriseSearch | - | | | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, enterpriseSearch, observabilityOnboarding, console | - | +| | dashboard | - | +| | embeddable, dashboard | - | | | embeddableEnhanced | - | | | embeddableEnhanced | - | | | uiActionsEnhanced | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 3e8e0a479422..5847a11f91b5 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -339,6 +339,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/esql-utils + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [query_parsing_helpers.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts#:~:text=ast), [query_parsing_helpers.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts#:~:text=ast), [query_parsing_helpers.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts#:~:text=ast), [query_parsing_helpers.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts#:~:text=ast), [query_parsing_helpers.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts#:~:text=ast), [query_parsing_helpers.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts#:~:text=ast), [get_esql_with_safe_limit.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.ts#:~:text=ast), [append_to_query.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-esql-utils/src/utils/append_to_query.ts#:~:text=ast) | - | + + + ## @kbn/esql-validation-autocomplete | Deprecated API | Reference location(s) | Remove By | @@ -465,6 +473,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/securitysolution-utils + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [compute_if_esql_query_aggregating.ts](https://github.com/elastic/kibana/tree/main/packages/kbn-securitysolution-utils/src/esql/compute_if_esql_query_aggregating.ts#:~:text=ast) | - | + + + ## @kbn/unified-field-list | Deprecated API | Reference location(s) | Remove By | @@ -640,11 +656,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/types.ts#:~:text=fieldFormats), [data_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/data/data_service.ts#:~:text=fieldFormats) | - | | | [dashboard_grid_item.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx#:~:text=EmbeddablePanel), [dashboard_grid_item.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx#:~:text=EmbeddablePanel) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/plugin.tsx#:~:text=registerEmbeddableFactory) | - | -| | [migrate_dashboard_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_renderer.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx#:~:text=getEmbeddableFactory), [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory)+ 2 more | - | -| | [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactories), [embeddable.stub.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts#:~:text=getEmbeddableFactories) | - | +| | [migrate_dashboard_input.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.ts#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_container.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx#:~:text=getEmbeddableFactory), [dashboard_renderer.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [create_dashboard.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory), [migrate_dashboard_input.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts#:~:text=getEmbeddableFactory)+ 2 more | - | | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | | [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference), [types.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/common/bwc/types.ts#:~:text=SavedObjectReference) | - | | | [dashboard_saved_object.ts](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts#:~:text=migrations) | - | @@ -1363,6 +1377,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=SavedObject), [host_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/host_risk_score_dashboards.ts#:~:text=SavedObject), [user_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/user_risk_score_dashboards.ts#:~:text=SavedObject), [user_risk_score_dashboards.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_saved_objects/saved_object/user_risk_score_dashboards.ts#:~:text=SavedObject) | - | | | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=migrations), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=migrations), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=migrations), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=migrations), [saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/endpoint/lib/artifacts/saved_object_mappings.ts#:~:text=migrations) | - | | | [timelines.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts#:~:text=convertToMultiNamespaceTypeVersion), [notes.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/notes.ts#:~:text=convertToMultiNamespaceTypeVersion), [pinned_events.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/pinned_events.ts#:~:text=convertToMultiNamespaceTypeVersion), [legacy_saved_object_mappings.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_saved_object_mappings.ts#:~:text=convertToMultiNamespaceTypeVersion) | - | +| | [esql_validator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.ts#:~:text=ast), [esql_validator.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.test.ts#:~:text=ast) | - | | | [links.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/management/links.ts#:~:text=authc), [hooks.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/lib/kibana/hooks.ts#:~:text=authc) | - | | | [use_bulk_get_user_profiles.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/user_profiles/use_bulk_get_user_profiles.tsx#:~:text=userProfiles), [use_get_current_user_profile.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/common/components/user_profiles/use_get_current_user_profile.tsx#:~:text=userProfiles), [overlay.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/assistant/overlay.tsx#:~:text=userProfiles), [management_settings.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/public/assistant/stack_management/management_settings.tsx#:~:text=userProfiles) | - | | | [request_context_factory.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/request_context_factory.ts#:~:text=audit), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security_solution/server/plugin.ts#:~:text=audit) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 1ab18ba32137..817e77f041bc 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -61,7 +61,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| dashboard | | [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [saved_object_save_modal_dashboard.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [saved_object_save_modal_dashboard.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [attribute_service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/attribute_service/attribute_service.tsx#:~:text=SavedObjectSaveModal), [attribute_service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/attribute_service/attribute_service.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | +| presentationUtil | | [saved_object_save_modal_dashboard.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [saved_object_save_modal_dashboard.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/presentation_util/public/components/saved_object_save_modal_dashboard.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [save_modal.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [add_to_library_action.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx#:~:text=SavedObjectSaveModal), [attribute_service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/attribute_service/attribute_service.tsx#:~:text=SavedObjectSaveModal), [attribute_service.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/embeddable/public/lib/attribute_service/attribute_service.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal), [save_to_library.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/links/public/content_management/save_to_library.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | | mapsEms | | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/maps_ems/server/plugin.ts#:~:text=license%24) | 8.8.0 | | mapsEms | | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/maps_ems/server/plugin.ts#:~:text=refresh) | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 8a2634f08fd0..02f8b660f7a0 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 71c95cfa85b9..8154b716a51a 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-09-26 +date: 2024-09-27 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 7b9bf6054c10..3e41a98ed96a 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index bd1c622f2754..779e079e6e14 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index dbe62abd84dd..6ce420647152 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 5534dc4dbb6f..d68594a4dbdc 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index c0489ce48f62..0c3410b6da91 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -14876,7 +14876,7 @@ }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts" + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.ts" }, { "plugin": "dashboard", @@ -14896,7 +14896,7 @@ }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts" + "path": "src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts" }, { "plugin": "dashboard", @@ -14908,23 +14908,23 @@ }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts" + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts" }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts" }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts" }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts" + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts" }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts" + "path": "src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts" } ], "children": [ @@ -15025,14 +15025,6 @@ { "plugin": "canvas", "path": "x-pack/plugins/canvas/public/services/kibana/embeddables.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts" } ], "children": [], diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index a51d7ba9a0c6..46fe9c389bf1 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-09-26 +date: 2024-09-27 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 8951245ed248..166f0a0af90a 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-09-26 +date: 2024-09-27 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 98e576b5d52e..f0aa97fbe411 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-09-26 +date: 2024-09-27 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 0bac018fe48a..df1d0d0d3889 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 66224362cfa7..57c26f952b6f 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index d3e4e2ee681c..70802a1bf70b 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 78d42be80776..a2ab8beced3d 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 5df7f804e064..517e7082bce0 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 417af78a29ff..1d3a9559c2e8 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index b7100c348d2f..b09a5b0bf23f 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 5f4bcc9fffdf..b285be13ad72 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index a85de64f54d7..76a59331fa7f 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-09-26 +date: 2024-09-27 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 e777491ccda3..e9e2e97427d3 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-09-26 +date: 2024-09-27 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 01dbbb28b51c..89ff3a54f17f 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-09-26 +date: 2024-09-27 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 8e0993e7f0de..7c268147f017 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-09-26 +date: 2024-09-27 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 ac3f8fad3830..acd870182f7b 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-09-26 +date: 2024-09-27 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 83655beeb40e..3cff221df8d8 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-09-26 +date: 2024-09-27 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 c59bb12fd8d8..bd1a27345a95 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-09-26 +date: 2024-09-27 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 e9b03140a703..aaef372036f8 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-09-26 +date: 2024-09-27 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 f689bfa7c885..8279a31e87d8 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-09-26 +date: 2024-09-27 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 9516895ec7b8..82a4f236f5d6 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-09-26 +date: 2024-09-27 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 ad5bfac445f0..aa2000e7a7cf 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-09-26 +date: 2024-09-27 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 d379b7af4f96..96917483cb56 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-09-26 +date: 2024-09-27 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 927d92bdab82..c48c4d7f222a 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-09-26 +date: 2024-09-27 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 9d59b779c0ef..041417918034 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-09-26 +date: 2024-09-27 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 683e39efc5a5..ca62bff82ee4 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-09-26 +date: 2024-09-27 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 da65f7b85004..87c93e778867 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-09-26 +date: 2024-09-27 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 e1573a6dbc0b..6267f1b32ad4 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-09-26 +date: 2024-09-27 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 fe06a57ec59c..04b2ef9f7075 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 39eb5de7b1e7..2811ee1145ca 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index da1b4e0c5a82..515f012936cf 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-09-26 +date: 2024-09-27 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 61469c1a51e4..788fcb2f1638 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-09-26 +date: 2024-09-27 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 99429d9d28d4..5cb2edc5f022 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index 18135489b76c..00011f0eeb6f 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -11729,7 +11729,7 @@ "section": "def-server.ElasticsearchClient", "text": "ElasticsearchClient" }, - ", outputId: string) => Promise" + ", outputId: string, options?: { force?: boolean | undefined; } | undefined) => Promise" ], "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", "deprecated": false, @@ -11770,6 +11770,33 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.removeOutputFromAll.$3", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.removeOutputFromAll.$3.force", + "type": "CompoundType", + "tags": [], + "label": "force", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "returnComment": [] diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 718372438af7..2083db0c1209 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1366 | 5 | 1243 | 74 | +| 1368 | 5 | 1245 | 74 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 6682eb5c1872..f1b299435250 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-09-26 +date: 2024-09-27 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 4aab18e3af4a..33641b1336b7 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-09-26 +date: 2024-09-27 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 b2e327f821ed..05f1de726c3e 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-09-26 +date: 2024-09-27 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 367808525b7e..a980f19d3146 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-09-26 +date: 2024-09-27 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 66adb6455876..e32363f71847 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-09-26 +date: 2024-09-27 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 fbc13fb8af59..05774467525e 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index a7a1f5921952..81198fc6cfe1 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 75c3a91b7fb4..d3f655f42fd9 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index a46888ac598d..02e141267d5c 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 793770efb2b2..b506746d0b0d 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index cb4d0ba98daf..11cb7ced69ba 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index b01553ef4db5..56bda029fcc0 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index a1ae97f39eed..23d0eef86c6f 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 4b664d0123d7..786b19750728 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 7be8f30fe101..c0b01889d807 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index dce92cd77dfc..91576df7e6b8 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index bee7405619f6..4e42bcdbf95e 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index d8259a092a33..d3ac63e79317 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 56d26e4f1bae..bc42772562c6 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index b5221c343432..f1d521b9934c 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index d5c4359b248b..4d0818b019a8 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index e57fa5e130c0..97662fe4e48a 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index ec824886f4f8..eeb1f14a2d70 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 4c48c7d3c241..38c9cea9b0de 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 27097acd6104..235ecc43d62e 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-09-26 +date: 2024-09-27 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_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 551b6a98a31b..0628aa1a1abc 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index ec15080771ba..ebb3e7600ba7 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-09-26 +date: 2024-09-27 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 b924074ebd16..695dcc09de42 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index ca5c47cd3ef6..3716424737d8 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index fba0f61beed9..780a6868a537 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index f9d0201e7792..a9b23f858add 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index e9b372f53868..2840be61e553 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-09-26 +date: 2024-09-27 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 817030831e6f..72be2acacf54 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-09-26 +date: 2024-09-27 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_types.mdx b/api_docs/kbn_apm_types.mdx index dfa63881228a..ca9a3a15ca94 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 1d821357aba3..3f24c9f4f486 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 105d69f5bcab..f7840beac569 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index de1fc4a3a8b4..cb8cc0fcbb13 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 5f76a449160d..247d2fa2fc39 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index c7a63c951b2c..0f5cb91959e4 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 31c2e21762ec..8877eb7c9dd3 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index af2267eca550..df30b879447b 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index fbc1b6aa7419..b675d064f82c 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 49b75ab86e0f..5fa81b86f856 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-09-26 +date: 2024-09-27 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 f90b1533e1df..51e6fe92c779 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-09-26 +date: 2024-09-27 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 97c7582f9a0a..9c4c90b8f0fa 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-09-26 +date: 2024-09-27 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 55c0935f092d..73e9e4f66415 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-09-26 +date: 2024-09-27 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 bbb0bb39d524..2746842f8c6b 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-09-26 +date: 2024-09-27 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 bea872c0dc83..76aa628f0b4c 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-09-26 +date: 2024-09-27 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 90bf19ecd942..df90f50bf25c 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 2931848c0dff..7c2f4ccd1e39 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index e6eded6ba5aa..4ccb759c2b1e 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 3621197ceca7..3dbf4658b9d1 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 556b1b5f0bf8..10a242b343c3 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 3e29b07d2c2a..3b04c651833a 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 63e851519cf9..e69549496a13 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 90905b96a5a7..b1108ddbe678 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index f104a667c545..3a3df99c537b 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 c93010e14c45..99a10df9a39b 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-09-26 +date: 2024-09-27 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 e07b406a05a9..faefb028ad94 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-09-26 +date: 2024-09-27 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_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 477f438485b2..4a110bb0e250 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index c1b2215ae721..717ff8db2d68 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 909930f17de8..d3c68ff825e1 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index d405e371b356..7b6bae2dd1c4 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.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 71307f7e4831..76a849b1a952 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-09-26 +date: 2024-09-27 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 6257ddf026e4..d38d88a49e19 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 66926eeab9d6..89d4e140ecb5 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index bf6e87a03239..5ec79ec15695 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-09-26 +date: 2024-09-27 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_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 08d42ace21aa..3e63fb9b9127 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index ea57f2598b42..8601a90ca0b2 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-09-26 +date: 2024-09-27 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.devdocs.json b/api_docs/kbn_core_analytics_browser.devdocs.json index a3ab5ce2d992..0fceaace2789 100644 --- a/api_docs/kbn_core_analytics_browser.devdocs.json +++ b/api_docs/kbn_core_analytics_browser.devdocs.json @@ -648,11 +648,7 @@ }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/analytics/types.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/analytics/analytics_service.ts" + "path": "src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx" }, { "plugin": "integrationAssistant", @@ -994,6 +990,14 @@ "plugin": "observabilityLogsExplorer", "path": "x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/telemetry_events.ts" }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/empty_prompt.tsx" + }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/get_started_panel.tsx" + }, { "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/feedback_buttons.tsx" @@ -1010,6 +1014,18 @@ "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/hooks/use_flow_progress_telemetry.ts" }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/kubernetes/use_kubernetes_flow.ts" + }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/use_window_blur_data_monitoring_trigger.ts" + }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_firehose_flow.ts" + }, { "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" @@ -1074,10 +1090,6 @@ "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/analytics/analytics.stub.ts" - }, { "plugin": "@kbn/core-root-browser-internal", "path": "packages/core/root/core-root-browser-internal/src/core_system.test.ts" diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 14314f193dc4..941cdde70f37 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 a523b68f5ebf..8e98b9053a48 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 f48b04b42cd7..d74eb004e4aa 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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.devdocs.json b/api_docs/kbn_core_analytics_server.devdocs.json index 4a2bba119600..ec010c7dc9f8 100644 --- a/api_docs/kbn_core_analytics_server.devdocs.json +++ b/api_docs/kbn_core_analytics_server.devdocs.json @@ -656,11 +656,7 @@ }, { "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/analytics/types.ts" - }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/analytics/analytics_service.ts" + "path": "src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx" }, { "plugin": "integrationAssistant", @@ -1002,6 +998,14 @@ "plugin": "observabilityLogsExplorer", "path": "x-pack/plugins/observability_solution/observability_logs_explorer/public/state_machines/observability_logs_explorer/src/telemetry_events.ts" }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/empty_prompt.tsx" + }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/get_started_panel.tsx" + }, { "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/feedback_buttons.tsx" @@ -1018,6 +1022,18 @@ "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/hooks/use_flow_progress_telemetry.ts" }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/kubernetes/use_kubernetes_flow.ts" + }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/use_window_blur_data_monitoring_trigger.ts" + }, + { + "plugin": "observabilityOnboarding", + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_firehose_flow.ts" + }, { "plugin": "observabilityOnboarding", "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" @@ -1082,10 +1098,6 @@ "plugin": "@kbn/core-analytics-browser-mocks", "path": "packages/core/analytics/core-analytics-browser-mocks/src/analytics_service.mock.ts" }, - { - "plugin": "dashboard", - "path": "src/plugins/dashboard/public/services/analytics/analytics.stub.ts" - }, { "plugin": "@kbn/core-root-browser-internal", "path": "packages/core/root/core-root-browser-internal/src/core_system.test.ts" diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index a76d4c364a53..476bdebf1bdc 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-09-26 +date: 2024-09-27 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 fdae5cb7d426..4cdff7510eb2 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 f94ad94dc4cb..10d2f3488c19 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 b440b7e435a6..486b8044db2c 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 17bb123a796f..df7ce842ff2a 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 c08d2f014d37..f03afeee1610 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 d5ed6b82bb4c..b1d0190c0113 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-09-26 +date: 2024-09-27 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 df09670ccbb2..51c8656640a6 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 fdbb1554b71f..f5c7e7c05d81 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 ba1935dccd0c..63dc7e565dd8 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 f96d567ba242..33848ede84c9 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 822479aab38f..c206d1488cec 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-09-26 +date: 2024-09-27 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 bc46be9866e6..87957b5c5f0a 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 417007378924..34ca8138aa65 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 b7b029cad456..1e674bfb63db 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 4f84809b5d1a..a70be2eb1ac6 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-09-26 +date: 2024-09-27 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 dba0223b1d50..d3c97a44fe5b 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-09-26 +date: 2024-09-27 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 256c212dfeed..9291ded7f8e9 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 a2b5b286e69d..2231c4479f92 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 b9e51cb4ecc2..ef476144d2d3 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 919a65c2b166..c5c2f2de0628 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 45a9b4a41dab..5dfc5bf7de66 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 c18df4d030b5..3057f9a6d311 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 4074d2a73a47..df41835e9b51 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 95d49ba89d4a..d0ec6d0b5cf8 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-09-26 +date: 2024-09-27 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 179585492d0d..6f058d36bca8 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-09-26 +date: 2024-09-27 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 58f88b154218..7e3363b302ac 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 84a940623fc6..9f7e06ccb002 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 79be65a0deaa..140e8b367333 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 9b1bde413ac2..a1fa91751d31 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 aa7b102c036d..95e695e5176e 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 c2c93d998c70..37e57d6168fb 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-09-26 +date: 2024-09-27 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 28ba98289a18..e87f4420165c 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-09-26 +date: 2024-09-27 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 b1fdea137112..d540a1a083f6 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 068b51f5b243..03b892418c3b 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 393c9ec12c66..74493108d824 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 161e0cc2d46b..e2fcbe15f276 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 d88b30958ac6..ce5a62678e75 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-09-26 +date: 2024-09-27 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 0444816a5448..69cff7155527 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 a5de608e7a4d..9728cb920846 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 8271bef40f52..6e17caa3232a 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 87807339c678..15e4958d95c9 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-09-26 +date: 2024-09-27 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 0695220af4b8..3167750937e3 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 f47e4350db9a..eea9cf2b80ce 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 2b6dffe39268..64563fdf12a7 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 29d5cf8432c2..40dadb7d0b2b 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 1de8f7414d21..816318127e1b 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 88b3534a0940..d3892413645b 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 e158eab429fb..d588f3ba7f01 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 d202b5741348..55d14122e7a9 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-09-26 +date: 2024-09-27 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 4b971720ecc2..a6221599bdf8 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-09-26 +date: 2024-09-27 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 314a26e6372d..1b94afefea1b 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 d28e957c1722..904502df6dc1 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 084eba504227..0f179236a868 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 37ca70ce9dad..d4bd814f62ca 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index f7e4512be71c..0a45c8bccd2e 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 63cedd61ab83..c7db58a97c4f 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index a066eb800748..ccd411b2bda4 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 4772fa17901a..9e9a6dcbd887 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index ac66b60fd932..04b6efa09c2e 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index 60080fd087fe..4ed88b8e1282 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index a84ef1f2a3fd..c581dd4bafd4 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 701be6dcde66..a933d303834b 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 e8df58098303..fedf4d3ceaae 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 3aab9124e1ba..cb79c765a999 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-09-26 +date: 2024-09-27 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 d2aa7cc18463..3bb3fa4d6878 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 8143de98d4dc..2d7c8da7f009 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-09-26 +date: 2024-09-27 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 9085671c6f1e..b582f1da7c5b 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-09-26 +date: 2024-09-27 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 153246f3fe12..f96c3d2c3188 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 e27d86c45827..0abe1d3ac6fd 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 dc4201e8f4be..f96a79a3af39 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 488a925386de..b5cfafc29b91 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index d4d06f30f0a4..770d8f3ba717 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -5322,6 +5322,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/find.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/find.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/get.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/get.test.ts" @@ -5354,6 +5362,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/get_alert_instance_summary.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/get_alert_instance_summary.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/get_alert_state.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/get_alert_state.test.ts" @@ -5402,6 +5418,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/health.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/health.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/list_alert_types.test.ts" @@ -7768,6 +7792,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/create.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/create.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/disable.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/disable.test.ts" @@ -7792,6 +7824,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/enable.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/enable.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/mute_all.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/mute_all.test.ts" @@ -7816,6 +7856,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/mute_instance.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/mute_instance.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/unmute_all.test.ts" @@ -7828,6 +7872,14 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/unmute_all.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/unmute_all.test.ts" + }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/unmute_instance.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/unmute_instance.test.ts" @@ -7852,6 +7904,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/update_api_key.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/update_api_key.test.ts" + }, { "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/suggestions/fileds_rule.test.ts" @@ -8986,6 +9042,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/update.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/update.test.ts" + }, { "plugin": "remoteClusters", "path": "x-pack/plugins/remote_clusters/server/routes/api/update_route.test.ts" @@ -9898,6 +9958,10 @@ "plugin": "alerting", "path": "x-pack/plugins/alerting/server/routes/legacy/delete.test.ts" }, + { + "plugin": "alerting", + "path": "x-pack/plugins/alerting/server/routes/legacy/delete.test.ts" + }, { "plugin": "remoteClusters", "path": "x-pack/plugins/remote_clusters/server/routes/api/delete_route.test.ts" @@ -15262,22 +15326,6 @@ "plugin": "cloudSecurityPosture", "path": "x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts" }, - { - "plugin": "cloudSecurityPosture", - "path": "x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts" - }, - { - "plugin": "cloudSecurityPosture", - "path": "x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts" - }, - { - "plugin": "cloudSecurityPosture", - "path": "x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/compliance_dashboard.test.ts" - }, - { - "plugin": "cloudSecurityPosture", - "path": "x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/compliance_dashboard.test.ts" - }, { "plugin": "@kbn/core-http-router-server-mocks", "path": "packages/core/http/core-http-router-server-mocks/src/versioned_router_mock_route.test.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 181676e3dfcd..05d021c8bea7 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-09-26 +date: 2024-09-27 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 555401f361ef..387efb238a9f 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 e0bcc936c823..464bdf648871 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 ebf979a21233..5236fd0b5eca 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 82798e59ef48..be50f8ecc2af 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 6825b254b581..30252151a368 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-09-26 +date: 2024-09-27 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 5636d7b2dec3..0d3cf0479b47 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 b690993d366c..45da9b38b62b 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 7c880382d75e..9a0150610c7e 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 f0476e53eab3..20cacb8a1cb7 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 38fd5357babc..e329ed0e062b 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 c0864ab59523..1c5f61d6cd73 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 d6fb1798b870..009091810369 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 ef9a4af0c406..c86a26f3b3ef 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-09-26 +date: 2024-09-27 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 2fc2934d543f..9a7665217fa6 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 bd8ff7e0a0ad..aba4485d95ff 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 92391c20bd0e..4fb2a6e25901 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 b67282ea4fe2..c263ed5a24fa 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-09-26 +date: 2024-09-27 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 d0f35f0629d0..e05222f61d7a 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 9c9e3bed9498..e723a7b9b850 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 cd7e3dae7b1c..e1d1fd9dbf8c 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 8fd721f37037..fb9ac112feb8 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 6847d1e825df..06ff83bc1ef5 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-09-26 +date: 2024-09-27 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 448f84afbdc7..39132f7d8389 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 5c99c28f4ee9..4cdbf2ccf3f1 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 0f716146a50c..79440cd39448 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 0d46435e7318..eedb0a6c54e9 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-09-26 +date: 2024-09-27 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 c39854e076b4..08bdf62e78d7 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 e01b69500d01..32e8c880b13b 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 50a0cff5829d..87df995f1b8b 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 d39496156ec1..eb3351d12451 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 3f1e6c9c6764..d9b0cbebcc38 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 1503f086e737..87a19c113344 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 8c54b44b0e8d..c830c9e0592f 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 a8f30a260e32..ccb8e40f26f3 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 b62e61a741e4..a67a85311bf2 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 add668be611f..0a4aea8f7d5f 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index f29367ab7617..9b827c84fcbc 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 7f786bca3083..ea8b111569e5 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 28e9bbad665d..8b4e0b5e38b6 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-09-26 +date: 2024-09-27 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 4eb8844e7fde..c8bb4971f54e 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 0805be1de13c..0aad5db9086b 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-09-26 +date: 2024-09-27 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 10eda1789c13..732487e90845 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 1f2fba991e8e..2ac675b13c8f 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 dae47e2df803..c51f1045dd8e 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 411bac2f0b22..082efe5eb7ec 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 38ab7ab9aa24..11834fe67825 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 f448cdabfa0d..f2fc03b69ddb 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 14be0aebf2be..98d913f7836a 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-09-26 +date: 2024-09-27 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 ebf38be57c19..18ecb55a1647 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 928560d3de2c..ae0e87dfdc38 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 982cb5e072c5..7a481c0b71cf 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 5f8bf32c6c3a..04101f08122e 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 908e2340d789..7ca609f3cfa8 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 7fa324802b2a..8f3137dba49a 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 a69c1d8105fe..b221ec09f1dc 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-09-26 +date: 2024-09-27 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 abcc7f1f0bc1..8b97085f58df 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 bce5257eff9e..26d634750f6d 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 553324357f76..5900f1eeb526 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 e292018d2409..ada2b216bb14 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 c7c6e57974cf..ccc6ae1b80f3 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-09-26 +date: 2024-09-27 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 17c12f03e0ca..8179d769807e 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 93e1a9df6781..d059c35e4ed3 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 a36429c3dec4..4a7bc9f31ca6 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 3f90452fea35..6e65d0934786 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 3663fd6ebcf5..385986ee733e 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index e6121e5ba4d6..fd689ee68fb7 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 74ce0952abe0..a5724808d175 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 4c7fffe0cbc2..de1484c862f8 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 8cf8a009cd2f..280d4e03c429 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index b3a1a4655f62..07c3f24bd502 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index ce30afcf4f53..46bbeff92016 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-09-26 +date: 2024-09-27 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 92c0288634a2..798178f097b1 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 2f6eb74460bb..908c5625567b 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-09-26 +date: 2024-09-27 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 0eb75e87495e..16b1f5737afd 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 f9e5d517fc9b..049ec8d51798 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 aa19ecc49cd5..3d51a4622efb 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-09-26 +date: 2024-09-27 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 d95050601e40..9bfe6eeaf260 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 1a5c882613cf..c7e0d7fdab6b 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 477a50858b63..1d8151808732 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 49403252135e..befadda58fd4 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-09-26 +date: 2024-09-27 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 94dcb53a5c79..6c3a5d193771 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 1a78710bac0e..f07ae0b9027c 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 7d5d099c472d..67be01bc5bb1 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 5f587a5a931b..b0a314dcfe1c 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 494af52cab2a..a427dbc42c35 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 aa7b8a4f961c..17b020f51315 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 87f56b0b92bb..361d45d4a58e 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-09-26 +date: 2024-09-27 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 d56f31e2416c..a7457b661f40 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-09-26 +date: 2024-09-27 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 96c866a50950..a485969504f8 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 049496c48d57..bdf949d1def4 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 3770f0b0bce1..dd18e9f8479c 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-09-26 +date: 2024-09-27 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 80a1d536231f..1a21938302f1 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 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 1ff9f333d6be..00a06d2770e1 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index d8378049c5b8..44cc0cb4d0eb 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index cc6d954297b5..d1d19aa9f96a 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 70d85681c5e9..ffbc3e6ad833 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index c985b30ad004..d8440e547d61 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 833453d584bc..dbb31c8d36b8 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 2fb65cb07f68..7e7881c197af 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 23dd259032b1..6adc4a954841 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 17b3eb3e6378..dc9931c0de0d 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 8045a94b7965..a326a741a1f0 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 30ecd66aa7a0..8b8dc8f31c78 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-09-26 +date: 2024-09-27 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 7933e57a5bdf..6cfb2af630f0 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 18fc27959ad6..49dacbda7f2b 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 334d7657ffaa..823edaa78266 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index d6101c2bb744..3162d1d8b640 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 9b0c28c72259..25a475b8e780 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 4f53882f676c..d016f8bcca6e 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 51f402eff36c..a3b9d487a70b 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 406d575de453..92d5ed7822e0 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index ccff0ce487d4..c3f0d57c1c1c 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-09-26 +date: 2024-09-27 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 5a9047996d03..02d4bb8049ab 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-09-26 +date: 2024-09-27 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 7cf40fec9fb5..01cb780d9493 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 3b7a20817fbb..c181547ec1b2 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index e52789b715a9..f9a0ce5cbfc9 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-09-26 +date: 2024-09-27 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 b1ae34a6f4f0..fd6ffe3e3582 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-09-26 +date: 2024-09-27 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 7748ba4fd3be..8dc4d46c618c 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-09-26 +date: 2024-09-27 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 e83f2620c950..7770f361d614 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 74e012d650a8..e11ebd8f5b60 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 65f43bf4a256..e30f6d3da92d 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index b5e06fcd7030..c6fb4410d58b 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-09-26 +date: 2024-09-27 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 2b903bd136e6..2b1a02e9826a 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-09-26 +date: 2024-09-27 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 f0f8d2ff4551..4e03de35e6a4 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-09-26 +date: 2024-09-27 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 e27f050e4918..03c04d90e752 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-09-26 +date: 2024-09-27 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 22ce1c4f40b3..7c1ef5b63e82 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-09-26 +date: 2024-09-27 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 8284bce80bc3..1fdaf5d7119b 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-09-26 +date: 2024-09-27 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 78b57fc2475f..c73d6c05fdbd 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-09-26 +date: 2024-09-27 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 8869bc60f757..5b8fdb363efc 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index ae284ad5ba2e..ceb98b5c8b11 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 623fa9e4339b..d872c71f9df6 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-09-26 +date: 2024-09-27 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 fb94d0c21c94..4141cc3d4dc7 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 003a05e591c8..a155c7acffc1 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-09-26 +date: 2024-09-27 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 5c1801587568..63c4126a927f 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index d7d2cda35682..0cf39a5373b0 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index c2396fe23240..9bbdd0437168 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 2ce2a3061e29..7f5389a705c5 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 2da9aba5fff1..6fcbd17d23b9 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 4c892d0214a7..1dfca16b0ee6 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index b7690edf5275..07130623356a 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-09-26 +date: 2024-09-27 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 822fff5321a1..cdd3f15c2091 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-09-26 +date: 2024-09-27 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 1d82125bd39e..ebede9f59b04 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-09-26 +date: 2024-09-27 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 a5367d04e91b..78bd9ec29e65 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-09-26 +date: 2024-09-27 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 bb3ff65cecbf..b0a466a1a705 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-09-26 +date: 2024-09-27 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 d074b6415041..8a4bc7c7d78a 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index da5921fc6985..72abebb920fb 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -42,11 +42,17 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" }, ", opts?: ", - "BasicPrettyPrinterOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + }, " | undefined) => string" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -56,7 +62,7 @@ { "parentPluginId": "@kbn/esql-ast", "id": "def-common.BasicPrettyPrinter.print.$1", - "type": "Array", + "type": "Object", "tags": [], "label": "query", "description": [ @@ -67,8 +73,8 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" } ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -84,7 +90,13 @@ "label": "opts", "description": [], "signature": [ - "BasicPrettyPrinterOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + }, " | undefined" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -112,11 +124,17 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" }, ", opts?: ", - "BasicPrettyPrinterMultilineOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterMultilineOptions", + "text": "BasicPrettyPrinterMultilineOptions" + }, " | undefined) => string" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -126,7 +144,7 @@ { "parentPluginId": "@kbn/esql-ast", "id": "def-common.BasicPrettyPrinter.multiline.$1", - "type": "Array", + "type": "Object", "tags": [], "label": "query", "description": [ @@ -137,8 +155,8 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" } ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -156,7 +174,13 @@ "Options for pretty-printing." ], "signature": [ - "BasicPrettyPrinterMultilineOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterMultilineOptions", + "text": "BasicPrettyPrinterMultilineOptions" + }, " | undefined" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -186,7 +210,13 @@ "text": "ESQLAstCommand" }, ", opts?: ", - "BasicPrettyPrinterOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + }, " | undefined) => string" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -224,7 +254,13 @@ "label": "opts", "description": [], "signature": [ - "BasicPrettyPrinterOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + }, " | undefined" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -254,7 +290,13 @@ "text": "ESQLSingleAstItem" }, ", opts?: ", - "BasicPrettyPrinterOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + }, " | undefined) => string" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -292,7 +334,13 @@ "label": "opts", "description": [], "signature": [ - "BasicPrettyPrinterOptions", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + }, " | undefined" ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -341,7 +389,13 @@ "label": "opts", "description": [], "signature": [ - "BasicPrettyPrinterOptions" + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + } ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", "deprecated": false, @@ -383,6 +437,56 @@ ], "returnComment": [] }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.decorateWithComments", + "type": "Function", + "tags": [], + "label": "decorateWithComments", + "description": [], + "signature": [ + "(node: ", + "ESQLAstBaseItem", + ", formatted: string) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.decorateWithComments.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "ESQLAstBaseItem", + "" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinter.decorateWithComments.$2", + "type": "string", + "tags": [], + "label": "formatted", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.BasicPrettyPrinter.visitor", @@ -413,8 +517,8 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" }, ") => any" ], @@ -425,7 +529,7 @@ { "parentPluginId": "@kbn/esql-ast", "id": "def-common.BasicPrettyPrinter.print.$1", - "type": "Array", + "type": "Object", "tags": [], "label": "query", "description": [], @@ -434,8 +538,8 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" } ], "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", @@ -560,7 +664,7 @@ "ErrorListener", "" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -581,7 +685,7 @@ }, "[]" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false }, @@ -599,7 +703,7 @@ "RecognitionException", " | undefined) => void" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -614,7 +718,7 @@ "Recognizer", "" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -629,7 +733,7 @@ "signature": [ "any" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -644,7 +748,7 @@ "signature": [ "number" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -659,7 +763,7 @@ "signature": [ "number" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -674,7 +778,7 @@ "signature": [ "string" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -690,7 +794,7 @@ "RecognitionException", " | undefined" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -716,7 +820,7 @@ }, "[]" ], - "path": "packages/kbn-esql-ast/src/antlr_error_listener.ts", + "path": "packages/kbn-esql-ast/src/parser/esql_error_listener.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -725,6 +829,205 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery", + "type": "Class", + "tags": [], + "label": "EsqlQuery", + "description": [], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.fromSrc", + "type": "Function", + "tags": [], + "label": "fromSrc", + "description": [], + "signature": [ + "(src: string, opts?: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseOptions", + "text": "ParseOptions" + }, + " | undefined) => ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.EsqlQuery", + "text": "EsqlQuery" + } + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.fromSrc.$1", + "type": "string", + "tags": [], + "label": "src", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.fromSrc.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseOptions", + "text": "ParseOptions" + }, + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "ast", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + } + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.Unnamed.$2", + "type": "string", + "tags": [], + "label": "src", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.Unnamed.$3", + "type": "Array", + "tags": [], + "label": "tokens", + "description": [], + "signature": [ + "Token", + "[]" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.print", + "type": "Function", + "tags": [], + "label": "print", + "description": [], + "signature": [ + "(opts?: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WrappingPrettyPrinterOptions", + "text": "WrappingPrettyPrinterOptions" + }, + " | undefined) => string" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.print.$1", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WrappingPrettyPrinterOptions", + "text": "WrappingPrettyPrinterOptions" + }, + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.Walker", @@ -1323,16 +1626,106 @@ }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.Walker.Unnamed", + "id": "def-common.Walker.visitComments", "type": "Function", "tags": [], - "label": "Constructor", + "label": "visitComments", "description": [], "signature": [ - "any" - ], - "path": "packages/kbn-esql-ast/src/walker/walker.ts", - "deprecated": false, + "(root: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstNode", + "text": "ESQLAstNode" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstNode", + "text": "ESQLAstNode" + }, + "[], callback: (comment: ", + "ESQLAstComment", + ", node: ", + "ESQLProperNode", + ", attachment: keyof ", + "ESQLAstNodeFormatting", + ") => void) => void" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.Walker.visitComments.$1", + "type": "CompoundType", + "tags": [], + "label": "root", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstNode", + "text": "ESQLAstNode" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstNode", + "text": "ESQLAstNode" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.Walker.visitComments.$2", + "type": "Function", + "tags": [], + "label": "callback", + "description": [], + "signature": [ + "(comment: ", + "ESQLAstComment", + ", node: ", + "ESQLProperNode", + ", attachment: keyof ", + "ESQLAstNodeFormatting", + ") => void" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.Walker.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, "trackAdoption": false, "children": [ { @@ -1642,10 +2035,10 @@ }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.Walker.walkSingleAstItem", + "id": "def-common.Walker.walkFunction", "type": "Function", "tags": [], - "label": "walkSingleAstItem", + "label": "walkFunction", "description": [], "signature": [ "(node: ", @@ -1653,10 +2046,12 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLSingleAstItem", - "text": "ESQLSingleAstItem" + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" }, - ") => void" + "<", + "FunctionSubtype", + ", string>) => void" ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -1664,8 +2059,8 @@ "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.Walker.walkSingleAstItem.$1", - "type": "CompoundType", + "id": "def-common.Walker.walkFunction.$1", + "type": "Object", "tags": [], "label": "node", "description": [], @@ -1674,9 +2069,12 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLSingleAstItem", - "text": "ESQLSingleAstItem" - } + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" + }, + "<", + "FunctionSubtype", + ", string>" ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -1688,10 +2086,10 @@ }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.Walker.walkFunction", + "id": "def-common.Walker.walkQuery", "type": "Function", "tags": [], - "label": "walkFunction", + "label": "walkQuery", "description": [], "signature": [ "(node: ", @@ -1699,12 +2097,10 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLFunction", - "text": "ESQLFunction" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" }, - "<", - "FunctionSubtype", - ", string>) => void" + ") => void" ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -1712,7 +2108,7 @@ "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.Walker.walkFunction.$1", + "id": "def-common.Walker.walkQuery.$1", "type": "Object", "tags": [], "label": "node", @@ -1722,12 +2118,9 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLFunction", - "text": "ESQLFunction" - }, - "<", - "FunctionSubtype", - ", string>" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + } ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -1736,113 +2129,14764 @@ } ], "returnComment": [] - } - ], - "initialIsOpen": false - } - ], - "functions": [ - { - "parentPluginId": "@kbn/esql-ast", - "id": "def-common.getAstAndSyntaxErrors", - "type": "Function", - "tags": [], - "label": "getAstAndSyntaxErrors", - "description": [], - "signature": [ - "(text: string | undefined) => { errors: ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.EditorError", - "text": "EditorError" }, - "[]; ast: ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAst", - "text": "ESQLAst" - }, - "; }" - ], - "path": "packages/kbn-esql-ast/src/ast_parser.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.getAstAndSyntaxErrors.$1", - "type": "string", + "id": "def-common.Walker.walkSingleAstItem", + "type": "Function", "tags": [], - "label": "text", + "label": "walkSingleAstItem", "description": [], "signature": [ - "string | undefined" + "(node: ", + "ESQLAstExpression", + ") => void" ], - "path": "packages/kbn-esql-ast/src/ast_parser.ts", + "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.Walker.walkSingleAstItem.$1", + "type": "CompoundType", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "ESQLAstExpression" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], - "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.getLexer", - "type": "Function", + "id": "def-common.WrappingPrettyPrinter", + "type": "Class", "tags": [], - "label": "getLexer", + "label": "WrappingPrettyPrinter", "description": [], - "signature": [ - "(inputStream: ", - "CharStream", - ", errorListener: ", - "ErrorListener", - ") => ", - "default" - ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.getLexer.$1", - "type": "Object", + "id": "def-common.WrappingPrettyPrinter.print", + "type": "Function", "tags": [], - "label": "inputStream", + "label": "print", "description": [], "signature": [ - "CharStream" + "(query: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + }, + ", opts?: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WrappingPrettyPrinterOptions", + "text": "WrappingPrettyPrinterOptions" + }, + " | undefined) => string" ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.print.$1", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.print.$2", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WrappingPrettyPrinterOptions", + "text": "WrappingPrettyPrinterOptions" + }, + " | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.getLexer.$2", + "id": "def-common.WrappingPrettyPrinter.opts", "type": "Object", "tags": [], - "label": "errorListener", + "label": "opts", "description": [], "signature": [ - "ErrorListener", - "" + "{ indent: string; tab: string; pipeTab: string; commandTab: string; multiline: boolean; wrap: number; lowercase: boolean; lowercaseCommands: boolean; lowercaseOptions: boolean; lowercaseFunctions: boolean; lowercaseKeywords: boolean; }" ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [], + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "opts", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WrappingPrettyPrinterOptions", + "text": "WrappingPrettyPrinterOptions" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.keyword", + "type": "Function", + "tags": [], + "label": "keyword", + "description": [], + "signature": [ + "(word: string) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.keyword.$1", + "type": "string", + "tags": [], + "label": "word", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.printTopDecorations", + "type": "Function", + "tags": [], + "label": "printTopDecorations", + "description": [], + "signature": [ + "(indent: string, node: ", + "ESQLAstBaseItem", + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.printTopDecorations.$1", + "type": "string", + "tags": [], + "label": "indent", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.printTopDecorations.$2", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "ESQLAstBaseItem", + "" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.decorateWithComments", + "type": "Function", + "tags": [], + "label": "decorateWithComments", + "description": [], + "signature": [ + "(indent: string, node: ", + "ESQLAstBaseItem", + ", txt: string, indented?: boolean) => { txt: string; indented: boolean; }" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.decorateWithComments.$1", + "type": "string", + "tags": [], + "label": "indent", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.decorateWithComments.$2", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "ESQLAstBaseItem", + "" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.decorateWithComments.$3", + "type": "string", + "tags": [], + "label": "txt", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.decorateWithComments.$4", + "type": "boolean", + "tags": [], + "label": "indented", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.visitor", + "type": "Object", + "tags": [], + "label": "visitor", + "description": [], + "signature": [ + "Visitor", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + "ESQLList", + ">, inp: Input) => Output; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + "ESQLList", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitCommandOption: (ctx: ", + "CommandOptionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + "ESQLList", + ">, inp: Input) => Output; } & { visitFunctionCallExpression: (ctx: ", + "FunctionCallExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", + "ListLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + "ESQLList", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitCommand: (ctx: ", + "CommandVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", + "RenameExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", + "InlineCastExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", + "LiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", + "ColumnExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", + "TimeIntervalLiteralExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", + "SourceExpressionVisitorContext", + "<", + "VisitorMethods", + " & { visitExpression: (ctx: ", + "ExpressionVisitorContext", + "<", + "VisitorMethods", + ", ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSingleAstItem", + "text": "ESQLSingleAstItem" + }, + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { ...; } & { ...; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; }, ", + "SharedData", + ">, inp: Input) => Output; } & { ...; } & { ...; } & { ...; }, ", + "SharedData", + ", ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + }, + ">, inp: Input) => Output; } & { ...; }, ", + "SharedData", + ">" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.print", + "type": "Function", + "tags": [], + "label": "print", + "description": [], + "signature": [ + "(query: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinter.print.$1", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.createParser", + "type": "Function", + "tags": [], + "label": "createParser", + "description": [], + "signature": [ + "(text: string) => { lexer: ", + "default", + "; tokens: ", + "CommonTokenStream", + "; parser: ", + "default", + "; }" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.createParser.$1", + "type": "string", + "tags": [], + "label": "text", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.getLexer", + "type": "Function", + "tags": [], + "label": "getLexer", + "description": [], + "signature": [ + "(inputStream: ", + "CharStream", + ", errorListener: ", + "ErrorListener", + ") => ", + "default" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.getLexer.$1", + "type": "Object", + "tags": [], + "label": "inputStream", + "description": [], + "signature": [ + "CharStream" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.getLexer.$2", + "type": "Object", + "tags": [], + "label": "errorListener", + "description": [], + "signature": [ + "ErrorListener", + "" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], "initialIsOpen": false }, { @@ -1859,10 +16903,15 @@ "ErrorListener", ", parseListener?: ", "default", - " | undefined) => ", - "default" + " | undefined) => { lexer: ", + "default", + "; tokens: ", + "CommonTokenStream", + "; parser: ", + "default", + "; }" ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/parser/parser.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1876,7 +16925,7 @@ "signature": [ "CharStream" ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/parser/parser.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1892,7 +16941,7 @@ "ErrorListener", "" ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/parser/parser.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1908,10 +16957,189 @@ "default", " | undefined" ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parse", + "type": "Function", + "tags": [], + "label": "parse", + "description": [], + "signature": [ + "(text: string | undefined, options?: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseOptions", + "text": "ParseOptions" + }, + ") => ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseResult", + "text": "ParseResult" + } + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parse.$1", + "type": "string", + "tags": [], + "label": "text", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parse.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseOptions", + "text": "ParseOptions" + } + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parse", + "type": "Function", + "tags": [], + "label": "parse", + "description": [], + "signature": [ + "(text: string | undefined, options?: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseOptions", + "text": "ParseOptions" + }, + ") => ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseResult", + "text": "ParseResult" + } + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parse.$1", + "type": "string", + "tags": [], + "label": "text", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parse.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ParseOptions", + "text": "ParseOptions" + } + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parseErrors", + "type": "Function", + "tags": [], + "label": "parseErrors", + "description": [], + "signature": [ + "(text: string) => ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.EditorError", + "text": "EditorError" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.parseErrors.$1", + "type": "string", + "tags": [], + "label": "text", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [], @@ -1974,35 +17202,161 @@ }, "[]" ], - "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.walk.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WalkerOptions", + "text": "WalkerOptions" + } + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions", + "type": "Interface", + "tags": [], + "label": "BasicPrettyPrinterOptions", + "description": [], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions.multiline", + "type": "CompoundType", + "tags": [], + "label": "multiline", + "description": [ + "\nWhether to break the query into multiple lines on each pipe. Defaults to\n`false`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions.pipeTab", + "type": "string", + "tags": [], + "label": "pipeTab", + "description": [ + "\nTabbing string inserted before a pipe, when `multiline` is `true`. Defaults\nto two spaces." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions.lowercase", + "type": "CompoundType", + "tags": [], + "label": "lowercase", + "description": [ + "\nThe default lowercase setting to use for all options. Defaults to `false`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions.lowercaseCommands", + "type": "CompoundType", + "tags": [], + "label": "lowercaseCommands", + "description": [ + "\nWhether to lowercase command names. Defaults to `false`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions.lowercaseOptions", + "type": "CompoundType", + "tags": [], + "label": "lowercaseOptions", + "description": [ + "\nWhether to lowercase command options. Defaults to `false`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterOptions.lowercaseFunctions", + "type": "CompoundType", + "tags": [], + "label": "lowercaseFunctions", + "description": [ + "\nWhether to lowercase function names. Defaults to `false`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.walk.$2", - "type": "Object", + "id": "def-common.BasicPrettyPrinterOptions.lowercaseKeywords", + "type": "CompoundType", "tags": [], - "label": "options", - "description": [], + "label": "lowercaseKeywords", + "description": [ + "\nWhether to lowercase keywords. Defaults to `false`." + ], "signature": [ - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.WalkerOptions", - "text": "WalkerOptions" - } + "boolean | undefined" ], - "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", "deprecated": false, "trackAdoption": false } ], "initialIsOpen": false - } - ], - "interfaces": [ + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.EditorError", @@ -2183,6 +17537,67 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLAstQueryExpression", + "type": "Interface", + "tags": [], + "label": "ESQLAstQueryExpression", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + }, + " extends ", + "ESQLAstBaseItem", + "<\"\">" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLAstQueryExpression.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"query\"" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLAstQueryExpression.commands", + "type": "Array", + "tags": [], + "label": "commands", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.ESQLColumn", @@ -2837,6 +18252,183 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseOptions", + "type": "Interface", + "tags": [], + "label": "ParseOptions", + "description": [], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseOptions.withFormatting", + "type": "CompoundType", + "tags": [], + "label": "withFormatting", + "description": [ + "\nWhether to collect and attach to AST nodes user's custom formatting:\ncomments and whitespace." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseResult", + "type": "Interface", + "tags": [], + "label": "ParseResult", + "description": [], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseResult.root", + "type": "Object", + "tags": [], + "label": "root", + "description": [ + "\nThe root *QueryExpression* node of the parsed tree." + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" + } + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseResult.ast", + "type": "Array", + "tags": [ + "deprecated" + ], + "label": "ast", + "description": [ + "\nList of parsed commands.\n" + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstCommand", + "text": "ESQLAstCommand" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/get_esql_with_safe_limit.ts" + }, + { + "plugin": "@kbn/esql-utils", + "path": "packages/kbn-esql-utils/src/utils/append_to_query.ts" + }, + { + "plugin": "@kbn/securitysolution-utils", + "path": "packages/kbn-securitysolution-utils/src/esql/compute_if_esql_query_aggregating.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.ts" + }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/esql_validator.test.ts" + } + ] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseResult.tokens", + "type": "Array", + "tags": [], + "label": "tokens", + "description": [ + "\nList of ANTLR tokens generated by the lexer." + ], + "signature": [ + "Token", + "[]" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ParseResult.errors", + "type": "Array", + "tags": [], + "label": "errors", + "description": [ + "\nList of parsing errors." + ], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.EditorError", + "text": "EditorError" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/parser/parser.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.WalkerOptions", @@ -2991,17 +18583,53 @@ "parentPluginId": "@kbn/esql-ast", "id": "def-common.WalkerOptions.visitSingleAstItem", "type": "Function", - "tags": [], + "tags": [ + "todo" + ], "label": "visitSingleAstItem", "description": [], + "signature": [ + "((node: ", + "ESQLAstExpression", + ") => void) | undefined" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WalkerOptions.visitSingleAstItem.$1", + "type": "CompoundType", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "ESQLAstExpression" + ], + "path": "packages/kbn-esql-ast/src/walker/walker.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WalkerOptions.visitQuery", + "type": "Function", + "tags": [], + "label": "visitQuery", + "description": [], "signature": [ "((node: ", { "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLSingleAstItem", - "text": "ESQLSingleAstItem" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" }, ") => void) | undefined" ], @@ -3011,8 +18639,8 @@ "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.WalkerOptions.visitSingleAstItem.$1", - "type": "CompoundType", + "id": "def-common.WalkerOptions.visitQuery.$1", + "type": "Object", "tags": [], "label": "node", "description": [], @@ -3021,8 +18649,8 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLSingleAstItem", - "text": "ESQLSingleAstItem" + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" } ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", @@ -3035,21 +18663,23 @@ }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.WalkerOptions.visitSource", + "id": "def-common.WalkerOptions.visitFunction", "type": "Function", "tags": [], - "label": "visitSource", + "label": "visitFunction", "description": [], "signature": [ "((node: ", { "pluginId": "@kbn/esql-ast", "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLSource", - "text": "ESQLSource" + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" }, - ") => void) | undefined" + "<", + "FunctionSubtype", + ", string>) => void) | undefined" ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -3057,7 +18687,7 @@ "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.WalkerOptions.visitSource.$1", + "id": "def-common.WalkerOptions.visitFunction.$1", "type": "Object", "tags": [], "label": "node", @@ -3067,9 +18697,12 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLSource", - "text": "ESQLSource" - } + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" + }, + "<", + "FunctionSubtype", + ", string>" ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -3081,10 +18714,10 @@ }, { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.WalkerOptions.visitFunction", + "id": "def-common.WalkerOptions.visitSource", "type": "Function", "tags": [], - "label": "visitFunction", + "label": "visitSource", "description": [], "signature": [ "((node: ", @@ -3092,12 +18725,10 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLFunction", - "text": "ESQLFunction" + "section": "def-common.ESQLSource", + "text": "ESQLSource" }, - "<", - "FunctionSubtype", - ", string>) => void) | undefined" + ") => void) | undefined" ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -3105,7 +18736,7 @@ "children": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.WalkerOptions.visitFunction.$1", + "id": "def-common.WalkerOptions.visitSource.$1", "type": "Object", "tags": [], "label": "node", @@ -3115,12 +18746,9 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLFunction", - "text": "ESQLFunction" - }, - "<", - "FunctionSubtype", - ", string>" + "section": "def-common.ESQLSource", + "text": "ESQLSource" + } ], "path": "packages/kbn-esql-ast/src/walker/walker.ts", "deprecated": false, @@ -3427,10 +19055,179 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions", + "type": "Interface", + "tags": [], + "label": "WrappingPrettyPrinterOptions", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.WrappingPrettyPrinterOptions", + "text": "WrappingPrettyPrinterOptions" + }, + " extends ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.BasicPrettyPrinterOptions", + "text": "BasicPrettyPrinterOptions" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions.indent", + "type": "string", + "tags": [], + "label": "indent", + "description": [ + "\nInitial indentation string inserted before the whole query. Defaults to an\nempty string." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions.tab", + "type": "string", + "tags": [], + "label": "tab", + "description": [ + "\nTabbing string inserted before new level of nesting. Defaults to two spaces." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions.pipeTab", + "type": "string", + "tags": [], + "label": "pipeTab", + "description": [ + "\nTabbing string inserted before a pipe, when `multiline` is `true`." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions.commandTab", + "type": "string", + "tags": [], + "label": "commandTab", + "description": [ + "\nTabbing string inserted before command arguments, when they are broken into\nmultiple lines. Defaults to four spaces." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions.multiline", + "type": "CompoundType", + "tags": [], + "label": "multiline", + "description": [ + "\nWhether to force multiline formatting. Defaults to `false`. If set to\n`false`, it will try to fit the query into a single line." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.WrappingPrettyPrinterOptions.wrap", + "type": "number", + "tags": [], + "label": "wrap", + "description": [ + "\nExpected width of the output. Defaults to 80 characters. Text will be\nwrapped to fit this width." + ], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.AstNodeParserFields", + "type": "Type", + "tags": [], + "label": "AstNodeParserFields", + "description": [ + "\nNode fields which are available only when the node is minted by the parser.\nWhen creating nodes manually, these fields are not available." + ], + "signature": [ + "{ text: string; location: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLocation", + "text": "ESQLLocation" + }, + "; incomplete: boolean; }" + ], + "path": "packages/kbn-esql-ast/src/builder/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.AstNodeTemplate", + "type": "Type", + "tags": [], + "label": "AstNodeTemplate", + "description": [ + "\nThe node *template* transforms ES|QL AST nodes into a permissive shape, with\nthe aim to:\n\n- Remove the `type` property, as the builder will set it.\n- Make properties like `text`, `location`, and `incomplete` optional, as they\n are a available only when the AST node is minted by the parser.\n- Make all other properties optional, for easy node creation." + ], + "signature": [ + "Omit & Partial>" + ], + "path": "packages/kbn-esql-ast/src/builder/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.AstProviderFn", @@ -3495,6 +19292,21 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.BasicPrettyPrinterMultilineOptions", + "type": "Type", + "tags": [], + "label": "BasicPrettyPrinterMultilineOptions", + "description": [], + "signature": [ + "{ lowercase?: boolean | undefined; pipeTab?: string | undefined; lowercaseCommands?: boolean | undefined; lowercaseOptions?: boolean | undefined; lowercaseFunctions?: boolean | undefined; lowercaseKeywords?: boolean | undefined; }" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.ESQLAst", @@ -3590,9 +19402,101 @@ "pluginId": "@kbn/esql-ast", "scope": "common", "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAstCommand", - "text": "ESQLAstCommand" + "section": "def-common.ESQLCommand", + "text": "ESQLCommand" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstMetricsCommand", + "text": "ESQLAstMetricsCommand" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLFunction", + "text": "ESQLFunction" + }, + "<", + "FunctionSubtype", + ", string> | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLCommandOption", + "text": "ESQLCommandOption" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSource", + "text": "ESQLSource" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLTimeInterval", + "text": "ESQLTimeInterval" + }, + " | ", + "ESQLList", + " | ", + "ESQLDecimalLiteral", + " | ", + "ESQLIntegerLiteral", + " | ", + "ESQLBooleanLiteral", + " | ", + "ESQLNullLiteral", + " | ", + "ESQLStringLiteral", + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLParamLiteral", + "text": "ESQLParamLiteral" + }, + " | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLCommandMode", + "text": "ESQLCommandMode" + }, + " | ", + "ESQLInlineCast", + "<", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstItem", + "text": "ESQLAstItem" }, + "> | ", + "ESQLOrderExpression", + " | ", + "ESQLUnknownItem", " | ", { "pluginId": "@kbn/esql-ast", @@ -3600,6 +19504,14 @@ "docId": "kibKbnEsqlAstPluginApi", "section": "def-common.ESQLAstItem", "text": "ESQLAstItem" + }, + "[] | ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLAstQueryExpression", + "text": "ESQLAstQueryExpression" } ], "path": "packages/kbn-esql-ast/src/types.ts", @@ -3645,9 +19557,7 @@ "type": "Type", "tags": [], "label": "ESQLSingleAstItem", - "description": [ - "\nRepresents an *expression* in the AST." - ], + "description": [], "signature": [ { "pluginId": "@kbn/esql-ast", @@ -3727,23 +19637,300 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false - }, + } + ], + "objects": [ { "parentPluginId": "@kbn/esql-ast", - "id": "def-common.ROOT_STATEMENT", - "type": "string", + "id": "def-common.Builder", + "type": "Object", "tags": [], - "label": "ROOT_STATEMENT", + "label": "Builder", "description": [], "signature": [ - "\"singleStatement\"" + "typeof ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.Builder", + "text": "Builder" + } ], - "path": "packages/kbn-esql-ast/src/antlr_facade.ts", + "path": "packages/kbn-esql-ast/src/builder/builder.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter", + "type": "Object", + "tags": [], + "label": "LeafPrinter", + "description": [ + "\nPrinter for leaf AST nodes. The printing output of these nodes should\ntypically not depend on word wrapping settings, should always return an\natomic short string." + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.source", + "type": "Function", + "tags": [], + "label": "source", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSource", + "text": "ESQLSource" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.source.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLSource", + "text": "ESQLSource" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.column", + "type": "Function", + "tags": [], + "label": "column", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.column.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLColumn", + "text": "ESQLColumn" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.literal", + "type": "Function", + "tags": [], + "label": "literal", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.literal.$1", + "type": "CompoundType", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLLiteral", + "text": "ESQLLiteral" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.timeInterval", + "type": "Function", + "tags": [], + "label": "timeInterval", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLTimeInterval", + "text": "ESQLTimeInterval" + }, + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.timeInterval.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.ESQLTimeInterval", + "text": "ESQLTimeInterval" + } + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.comment", + "type": "Function", + "tags": [], + "label": "comment", + "description": [], + "signature": [ + "(node: ", + "ESQLAstComment", + ") => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.comment.$1", + "type": "CompoundType", + "tags": [], + "label": "node", + "description": [], + "signature": [ + "ESQLAstComment" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.commentList", + "type": "Function", + "tags": [], + "label": "commentList", + "description": [], + "signature": [ + "(comments: ", + "ESQLAstCommentMultiLine", + "[]) => string" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.LeafPrinter.commentList.$1", + "type": "Array", + "tags": [], + "label": "comments", + "description": [], + "signature": [ + "ESQLAstCommentMultiLine", + "[]" + ], + "path": "packages/kbn-esql-ast/src/pretty_print/leaf_printer.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false } - ], - "objects": [] + ] } } \ No newline at end of file diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 67e6361a5a1a..582db16c335e 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 177 | 1 | 139 | 20 | +| 266 | 1 | 208 | 34 | ## Common +### Objects + + ### Functions diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index b555d7ffd64a..064d8cb21d87 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 4ae00df0da31..c9ef35bf14ef 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 406c624fa91e..881cb7752a39 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 22a0c01c8cb3..c4acb0aaa7b4 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-09-26 +date: 2024-09-27 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 0de04dd64d20..d1742a06347c 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-09-26 +date: 2024-09-27 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 146f9fc1c8f9..340c74166de4 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-09-26 +date: 2024-09-27 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 2ccd63a857fc..d5fa0641239a 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 21fa3f2d10e2..8d48f2efd476 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index b162c3932c59..7f22bd99ac49 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index d53549ea90e6..17d948b73b63 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 11da2d7f23cc..679dc06d64bb 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 3e593007f95d..628044242a82 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index be34006029a1..3af3aff027a5 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-09-26 +date: 2024-09-27 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 96d528cc68ce..272833c52510 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-09-26 +date: 2024-09-27 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 5b5e5477ac37..bc11a3dc2ab2 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index a75886619c21..f676936929b4 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 9941aded2b00..337a45183715 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index cf2b6afd68a0..15b33c9996d4 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-09-26 +date: 2024-09-27 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 7165dce032d4..d028a6411b26 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-09-26 +date: 2024-09-27 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 092af474b264..a36a59cbc837 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 ede3e84cd5cb..8546e630a288 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-09-26 +date: 2024-09-27 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 477d9b6fbf64..f44b0a66bcdf 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-09-26 +date: 2024-09-27 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 cc58d80cd008..6ee5a8905cfd 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-09-26 +date: 2024-09-27 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 f1d2e9644b9b..f223145bbf85 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-09-26 +date: 2024-09-27 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 76b6d680f366..962fa80a27fd 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-09-26 +date: 2024-09-27 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 b64937edaf1d..4c9f02b460fc 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index aac080119901..2a976fea6fdc 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 0f8a52527703..a3ceb6175adc 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 42b48c12d789..aa709f0154f0 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-09-26 +date: 2024-09-27 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 1d64c3115ce3..bc31a81ecfc9 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 28888c4ab28a..ada40fc9d7ba 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 21414ab5d97c..232552166ae1 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 9d7861c610d4..4468deec94d5 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 0bc94ecbb8ae..4cb626767001 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-09-26 +date: 2024-09-27 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 da34f003389e..0e2220649b59 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-09-26 +date: 2024-09-27 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 69a0d716cc9c..0b03c86ea792 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index c82bd84b1b2d..ecbda252ac00 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 96dcdee92696..ce4685b221e8 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-09-26 +date: 2024-09-27 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.mdx b/api_docs/kbn_language_documentation.mdx index 9b7442893ef4..ccaef93382f1 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 9e83a5e98be6..d455550d5d4e 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 6e04d11fae45..9c0f58aa602d 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index bd83843aa5e1..7f3dec355280 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-09-26 +date: 2024-09-27 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 0ffd6e0cdca3..ea1c6a2c7ca4 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 79cfa936c4b8..05ab9c03500a 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index c50bf5a5daa8..d9dfd02215dd 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-09-26 +date: 2024-09-27 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 837bad39bda1..cd74d9d8f049 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index d60d42490544..1d058c976bfd 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 49971dff7163..7fc6ce6cdee5 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index c451c0cae20d..810ed2272ff1 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index c182907124db..4fddc94db6dd 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 707c6e32ed06..a106a76894d0 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 061f6c95f9da..28baa0e16bd8 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 57b8bf94c179..7170722b153d 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index d08d77237d4e..328a2bcd9e16 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 611d1ab3a9ea..d9f61a0fa121 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 6091a70e6639..674ba56f127b 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index cbfa8cf9cddc..752b34345c75 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-09-26 +date: 2024-09-27 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 9bf33b936298..44af6fd47b88 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-09-26 +date: 2024-09-27 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 43265d1b20f7..a2011f1a6414 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-09-26 +date: 2024-09-27 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.devdocs.json b/api_docs/kbn_ml_agg_utils.devdocs.json index 5994abdf8b65..93f9170ab47e 100644 --- a/api_docs/kbn_ml_agg_utils.devdocs.json +++ b/api_docs/kbn_ml_agg_utils.devdocs.json @@ -463,7 +463,7 @@ "\nValidate if a number is within specified minimum and maximum bounds.\n" ], "signature": [ - "(conditions: NumberValidatorConditions | undefined) => ((value: number) => ", + "(conditions: NumberValidatorConditions | undefined) => ((value: number | undefined) => ", { "pluginId": "@kbn/ml-agg-utils", "scope": "common", @@ -2069,63 +2069,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/ml-agg-utils", - "id": "def-common.NumberValidationResult", - "type": "Interface", - "tags": [ - "interface" - ], - "label": "NumberValidationResult", - "description": [ - "\nRepresents the result of number validation." - ], - "path": "x-pack/packages/ml/agg_utils/src/validate_number.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/ml-agg-utils", - "id": "def-common.NumberValidationResult.min", - "type": "boolean", - "tags": [], - "label": "min", - "description": [ - "The minimum allowed value." - ], - "path": "x-pack/packages/ml/agg_utils/src/validate_number.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ml-agg-utils", - "id": "def-common.NumberValidationResult.max", - "type": "boolean", - "tags": [], - "label": "max", - "description": [ - "The maximum allowed value." - ], - "path": "x-pack/packages/ml/agg_utils/src/validate_number.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ml-agg-utils", - "id": "def-common.NumberValidationResult.integerOnly", - "type": "boolean", - "tags": [], - "label": "integerOnly", - "description": [ - "Boolean flag to allow integer values only." - ], - "path": "x-pack/packages/ml/agg_utils/src/validate_number.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/ml-agg-utils", "id": "def-common.NumericChartData", @@ -3030,6 +2973,25 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ml-agg-utils", + "id": "def-common.NumberValidationResult", + "type": "Type", + "tags": [ + "interface" + ], + "label": "NumberValidationResult", + "description": [ + "\nRepresents the result of number validation." + ], + "signature": [ + "{ [key: string]: boolean; } & { min?: boolean | undefined; max?: boolean | undefined; integerOnly?: boolean | undefined; }" + ], + "path": "x-pack/packages/ml/agg_utils/src/validate_number.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ml-agg-utils", "id": "def-common.NumericColumnStatsMap", diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index edda09af19eb..9c4d51aafb2e 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 97 | 1 | 0 | 0 | +| 94 | 1 | 0 | 0 | ## Common diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 8409ebad9324..306b1cf644e7 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index ff37d35f7202..bfc547402b67 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 335ad4286618..954cff9fb32c 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index bfda1ada7eb0..14f7afc2c997 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 0d38d4107e25..94cb5ee5e562 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 41db09adf98b..e4cab1d11e99 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-09-26 +date: 2024-09-27 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 4f8eff9c7cbd..3fb8b524a744 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-09-26 +date: 2024-09-27 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 1f1b721feeef..de8da956a757 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 c28aa8ef7402..8983977c85b3 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-09-26 +date: 2024-09-27 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_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 7fb8f4ecf70a..fe58a9b20580 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 6dfbab964429..c7af85e69476 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 092c229c9bd2..417564de6120 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-09-26 +date: 2024-09-27 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 078ea21193af..bab18039a55e 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-09-26 +date: 2024-09-27 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 ad8f0bdfe234..f5bba7d5378f 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-09-26 +date: 2024-09-27 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 7ac08869ba31..4ae2a6c4bd4e 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-09-26 +date: 2024-09-27 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 30d0aa160a46..d087991522b5 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-09-26 +date: 2024-09-27 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 3bed112b2d32..06cca1ef42cf 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-09-26 +date: 2024-09-27 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_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index a539b5be66be..46b0ff12ea30 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index b4314611df63..81e3be5e4815 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 e3efd304dcef..341af312dbf9 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 acf224877b96..ccca8834cf53 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 e10b4261b47b..9a55a9b720c5 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 624d310c99ef..795c6ceb4ccc 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 8c3a4212b554..04ea38a71df3 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 467583b38dc1..86e6e4c6f154 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 0d8a25e726dc..028afd3166b2 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 094c71fac4de..5b74fd958e25 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 790ac46bc698..edfa226931b6 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 89d87a9c6fe9..9d798f3c2822 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index ae1ecfc84f4f..973c605e51bd 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-09-26 +date: 2024-09-27 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 3eb1d445a27b..191ffa5901b8 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 321519991d1f..226d98c8ec1b 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index d016abf59626..80000e40a64b 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index dd39a5085897..fb7cdd4b176b 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 761ca5f4cfa2..613e8737f665 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 5ef47a54ca46..7f2b01546ec5 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index a4c497346d1a..b020a9f00a5e 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index fde808400dda..5d9e7e6bc691 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 725ca04aac1d..9936b5031cef 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-09-26 +date: 2024-09-27 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 6451ae030aeb..b2dd8da21e1a 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-09-26 +date: 2024-09-27 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 9fc2f4c59e7a..f36dc1d88244 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 32c94f5ad577..c64a015f2a83 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 161582e74ed1..804e3f55adce 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 296327428503..91c9553d93fa 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 8bcda5ae6fce..05db8f5722c3 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-09-26 +date: 2024-09-27 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 8b8bb3fa2392..a1ba6725e520 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index c7501b3ef008..ca43b1b7badb 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 5c0e17b62462..2b32d91cdc57 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 85dd1668bd0c..c52a49f34290 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 561c053200fe..68a720473f4d 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-09-26 +date: 2024-09-27 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 00c2f1818e2f..e6744876927b 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 780cf03c8cdf..465a40948d58 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 60a33d826b09..b1cedcff5f88 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index a22a815134d7..9f2f43d02d1b 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 3e90667c78b9..99490f7ee36e 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 10db0562ac0f..4ed3a451c349 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 2633f0a3332a..5cc1dc2f8238 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 7930f4ea8d2d..48f0e9a27edb 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 954dd3a2fc41..b9c0386603e0 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 434f6c44544f..b66cc27a050e 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-09-26 +date: 2024-09-27 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 99d62c95a429..024bc36b3196 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-09-26 +date: 2024-09-27 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 678c83e3aa31..9a9daa8d5a7f 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-09-26 +date: 2024-09-27 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 9e347b46a9d9..a09ca62b6e97 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-09-26 +date: 2024-09-27 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 d5d9f80a1758..e99792306113 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index fc4ef9f37b19..af67da5cf219 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 1b11fdf2d11f..c64da9aa0216 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 112b28512ae0..0948584dee8d 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 381a4cdfce35..ff7979fe767b 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 99a6c78eee0e..53498efceba4 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index fe71b49d4b8f..0a235d5bc9b3 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 0d59ca86e4df..dd926a71f5ec 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 4059d155c784..104a6a4964ab 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index ecd25b33b9dd..a4e53a56ed9e 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index c6291333ef5e..16bee9c2c498 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index b53fc946b72f..a89f297b6ff6 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 253cccf8f754..14794e6ba4ea 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 2a4bd6e489aa..8165eccf3cd0 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 203523470397..2a4a4b221163 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 660f2216617a..d9434fb98119 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index e7b0b25f94cb..79071c0beed5 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 9d01a39e3305..f74ae969b33d 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-09-26 +date: 2024-09-27 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 845f5ce88be9..184899b8276e 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 2906c7e6579d..08bcac55da7b 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 3056fa19cbe3..13fc131fbdab 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 4669f981e118..8fa781935f2e 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index b13d0dbd66b1..907aefc25ead 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index f78570d316e0..42d42f6d6dfb 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index ccee51723d83..f61d1d4ef886 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index ab9a0e18f581..9f418edfbe82 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 7faacadfdd90..ef6113e737f2 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index acc4e1f76698..1cfe714e1734 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 7a86e9007bd7..e6c2e9ba6aa7 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 0931603097a5..458a4f3c44cd 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 80a936b016bf..16a655db38aa 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 91350a828aca..b656f40d9986 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 3f8e55598659..ddda9b8c7263 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 3a2e232c4023..3621719accf4 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index e5bafcf97cee..4ce483385225 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx index f9199a1cafb4..4af223cad889 100644 --- a/api_docs/kbn_security_solution_common.mdx +++ b/api_docs/kbn_security_solution_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-common title: "@kbn/security-solution-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-common plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] --- import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 127a6bd0e686..7a15f9bd5f6f 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 3d763cd940bd..ea5dfb849399 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index ef049951fbdb..3b2380bc8198 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index fd27112f60cb..2b6d13b29221 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-09-26 +date: 2024-09-27 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 e94ca7b377f3..9ad268ad9e82 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-09-26 +date: 2024-09-27 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_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index b0e46dd3aed1..8808dd68b8a3 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index bc07657c2927..79f512c5e721 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-09-26 +date: 2024-09-27 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 a95a84e80f9d..5fbf4fb925a8 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-09-26 +date: 2024-09-27 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 c6144a4c98e0..4788fd1708cf 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-09-26 +date: 2024-09-27 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 eb2fe937fcb3..a677e4e99ecc 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 6a75325fa257..e91eb88210d2 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 61ec4fabbf9a..c8f734fcb6e8 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 bd894646d260..90c5e0c1e76e 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-09-26 +date: 2024-09-27 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 2dfcc903921e..ce35dfd5d63d 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-09-26 +date: 2024-09-27 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 c8e391c16449..54faebb77c96 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-09-26 +date: 2024-09-27 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 c75e75ab6a9e..3ce448fc9247 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 59ab72067c34..a687c878016d 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-09-26 +date: 2024-09-27 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 4785c70be1cb..9750073c3b49 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-09-26 +date: 2024-09-27 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 d449ee4a6f70..b53e667f2772 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-09-26 +date: 2024-09-27 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 1068801547a8..e9a162a8a1dd 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 a22b56d01d1c..5e80c76e88ad 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-09-26 +date: 2024-09-27 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 56a7f7aca5a1..cb60031e535d 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-09-26 +date: 2024-09-27 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 78844be7bd17..79ea3792a78b 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-09-26 +date: 2024-09-27 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 e297eaa54e15..ecde598650f0 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-09-26 +date: 2024-09-27 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 02fec5a672fd..5893168907c2 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index dabd0625e33c..b8e11255a1e5 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index cc29a6143a66..a8c66bdabf9e 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index f612461a7247..30c5885f2d16 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index a1f64b9dce3c..a0ad8a407f7f 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 0809138a52d7..8acdedbb4e1f 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 7c2a1dbc38b3..2c202a341ca6 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index d1eb61e60ab9..12abf989a8a5 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index d733ee3cf7f1..cc92c3e71a6c 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-09-26 +date: 2024-09-27 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 1d726a15e4c5..49382fbbe436 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-09-26 +date: 2024-09-27 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 e1c59f809bf3..2f3e00275122 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 478064fe13bc..8850c8348e4f 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 81005dac4750..54fd4519de01 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-09-26 +date: 2024-09-27 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 5c809fced5bf..4e14d49ab338 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-09-26 +date: 2024-09-27 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 b0035a2c42b0..95e1399d2de7 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 cfd03da6c61b..ffa4eec89cdd 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index a3de8844d105..288c04b9c5e6 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 5874356a5169..6101f07efb8e 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-09-26 +date: 2024-09-27 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 4d0eb3896a92..2434caedef54 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-09-26 +date: 2024-09-27 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 3605fded1889..91f614a9e6b8 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 3f92c12de158..882a15b709b3 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 cda7b57c5da8..faebee69ed4d 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-09-26 +date: 2024-09-27 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 2a9f56168abd..8e0e23f1b952 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-09-26 +date: 2024-09-27 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 2ccb1944323f..1c601e517a73 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-09-26 +date: 2024-09-27 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 742ebe33ba0b..428181594588 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-09-26 +date: 2024-09-27 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 9e46d9497364..e45f26ce2ada 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-09-26 +date: 2024-09-27 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 2a3174fe96a8..08f49da7757d 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 df44ce979240..0347eb626c61 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-09-26 +date: 2024-09-27 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 9e413341a238..1e6860e3f25d 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 144f4ecf8b49..d9f409f4d2e3 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-09-26 +date: 2024-09-27 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 a8731d0d59f8..a567a956389a 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 07e189e2c3ef..6eb433292a46 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-09-26 +date: 2024-09-27 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 92d6f400e96d..f711146f05ba 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 2725655284e7..0d8291b01da7 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-09-26 +date: 2024-09-27 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 eb9b864deecc..8bc22661d7f4 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 6c8919292885..702e9c6b1b2b 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-09-26 +date: 2024-09-27 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 51f0b361ec37..d6cf32492d23 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-09-26 +date: 2024-09-27 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 e1218ff9cab2..078fbf2fcaa9 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 53364c2ee012..b883fbe89c0f 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 c190d97c9f38..368105df6737 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-09-26 +date: 2024-09-27 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 001187a021a1..e52b7e5c9436 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-09-26 +date: 2024-09-27 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 c94718cd5c6e..12c33cb27584 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 8b0506a165de..cd6d9f03ef9e 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-09-26 +date: 2024-09-27 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 9c974343ed69..5a0ee5183457 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-09-26 +date: 2024-09-27 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 59383cafe819..4f891ae90d06 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-09-26 +date: 2024-09-27 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 4d135fec6a60..8306505f45dc 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-09-26 +date: 2024-09-27 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 3df7e24518a7..2edd275e428c 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 279a23717cad..8ecd607526a5 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 7dc706ed2ec9..a538eb3de97f 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 612bd8fd4fb9..ee054fef760f 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-09-26 +date: 2024-09-27 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 36edebab131d..5567045f7d52 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-09-26 +date: 2024-09-27 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 15e1ea158dab..771f46656059 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index e8675ff4c7c5..8018e2fce52e 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 0ca59cbeedb3..4d2c08e0a8e2 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 9f3101b0f02d..52534b02055f 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index ec5802e3f18a..a01161f5207e 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index c8b38c761606..99a66093e6bd 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-09-26 +date: 2024-09-27 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 4bb2893ac697..7b493ee33c1a 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-09-26 +date: 2024-09-27 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 d8627329f10e..848c5982e9ac 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 43bb6101f323..6988fc3aca7f 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 4b4c8ceb9a6b..73b547ca06cf 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index aa673ee305a1..4dd06c9d0b90 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-09-26 +date: 2024-09-27 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 71e0c9c64240..f16430a5f50a 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index dbe8d7bd731e..e80a3309e9ba 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index d4bcbae4ea33..7c54b4e2db3d 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-09-26 +date: 2024-09-27 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 29947ecab6de..bbe10287addf 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 71169d540f99..11b49d95cec7 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index e1ad6d302e4d..42f68a50c083 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 17f055cb0d4a..d4cf11dc403d 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 23ee3cf0b755..ebd66f4c6d4e 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index a576051fb680..ac139d25fe4b 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-09-26 +date: 2024-09-27 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 5962690d4163..0100380425be 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-09-26 +date: 2024-09-27 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 2d0040c54141..c80811088e42 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-09-26 +date: 2024-09-27 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 9ae67be56b8b..1931597914ba 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-09-26 +date: 2024-09-27 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 e192693157ee..47ace380871d 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 4ec1e12b0a6c..c56c19184792 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 1ef93a094a53..619f7e55f43c 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index d0879a611bb0..53daa6942041 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index daf426c87ad7..9a9b7cc5beed 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index cee4be0da0cf..ea5318f77698 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index a2e96a7e0eba..38917fc15dfe 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 1eabc76e3c8c..9310bfedf41f 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-09-26 +date: 2024-09-27 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 71af5a224503..f9f6f8c3669a 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-09-26 +date: 2024-09-27 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 db6d1ebccd7d..f9185e38004b 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-09-26 +date: 2024-09-27 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 3bb91a0f5218..9a145e83c213 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-09-26 +date: 2024-09-27 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 4ef35a75138c..01e5d73ed1b6 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 2b3d88f667ec..ec608687b6fc 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 4245caafa612..9c9e4a8548ee 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 4238a817b86a..406ec54c87c3 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index a5bf3f6844b4..907be7604749 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index d141791cfc77..6714dec26f45 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index cbd74dc33f0a..174079052107 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-09-26 +date: 2024-09-27 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 24075723cd43..5a21d6bd3bb3 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-09-26 +date: 2024-09-27 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 6bcba4126d29..d2287da582a4 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-09-26 +date: 2024-09-27 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 810d3fe147c0..b7c715f86511 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-09-26 +date: 2024-09-27 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 3f477005b769..bac32975d4c1 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-09-26 +date: 2024-09-27 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 31f057b89a88..66f49b3851d9 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-09-26 +date: 2024-09-27 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 7b281667ad30..37217a8e11cd 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-09-26 +date: 2024-09-27 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 bba30db07658..98095c3de997 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index de0c80891f3a..995e02fe811a 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 18167ed9a623..21765a05d786 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index deffd865d597..c55b20876e9f 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index e91eab0f392a..091ca0e0dfd4 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 145e544646d7..dd344e62bd7d 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-09-26 +date: 2024-09-27 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 bf4cc1189b9a..e9df8740b9bc 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-09-26 +date: 2024-09-27 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 a7b7bb847dd0..11edcd941ec6 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-09-26 +date: 2024-09-27 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 e1bb4714f48e..503b7dcbe02d 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 86bf97d2ddc5..5a9df77c369a 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 979ceb82c1d1..de92720a545f 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1671,7 +1671,11 @@ }, ">; getTrainedModelsNodesOverview(): Promise<", "NodesOverviewResponse", - ">; startModelAllocation(modelId: string, queryParams?: { number_of_allocations: number; threads_per_allocation: number; priority: \"normal\" | \"low\"; deployment_id?: string | undefined; } | undefined): Promise<{ acknowledge: boolean; }>; stopModelAllocation(modelId: string, deploymentsIds: string[], options?: { force: boolean; }): Promise; startModelAllocation(modelId: string, queryParams?: ", + "CommonDeploymentParams", + " | undefined, bodyParams?: ", + "AdaptiveAllocationsParams", + " | undefined): Promise<{ acknowledge: boolean; }>; stopModelAllocation(modelId: string, deploymentsIds: string[], options?: { force: boolean; }): Promise>; updateModelDeployment(modelId: string, deploymentId: string, params: { number_of_allocations: number; }): Promise<{ acknowledge: boolean; }>; inferTrainedModel(modelId: string, deploymentsId: string, payload: { docs: Record[]; inference_config?: ", + "; }>>; updateModelDeployment(modelId: string, deploymentId: string, params: ", + "UpdateAllocationParams", + "): Promise<{ acknowledge: boolean; }>; inferTrainedModel(modelId: string, deploymentsId: string, payload: { docs: Record[]; inference_config?: ", "MlInferenceConfigUpdateContainer", " | undefined; } | undefined, timeout?: string | undefined): Promise<", "MlInferTrainedModelResponse", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index e27d50bd3f89..4e144f54049e 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 148 | 3 | 63 | 100 | +| 148 | 3 | 63 | 103 | ## Client diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index d3fb55aa05e4..8ed27bd3469c 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index ba3cf921af7a..b434a7d7ce9e 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-09-26 +date: 2024-09-27 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 fbdffc1b01f8..ecdf421f8402 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-09-26 +date: 2024-09-27 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 982c8f8e3113..0fb3dc0f689b 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-09-26 +date: 2024-09-27 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 1141da629ceb..e3b7443d84fd 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index f841c6ffaa77..ec3e233b0c4f 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 59289a0ff3d4..dc025f6eef0c 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-09-26 +date: 2024-09-27 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 5a1c2cb3f108..c41db6fd1621 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 3c2ba449ad3b..7e87db4799c1 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 482e69d564e7..7dbcd44af8d2 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 062430c06317..1b5e9c685c81 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 0bff397d7ef5..0a5bb455da97 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.devdocs.json b/api_docs/observability_onboarding.devdocs.json index dff42c694fc5..bd783f18db00 100644 --- a/api_docs/observability_onboarding.devdocs.json +++ b/api_docs/observability_onboarding.devdocs.json @@ -58,6 +58,20 @@ "path": "x-pack/plugins/observability_solution/observability_onboarding/public/index.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observabilityOnboarding", + "id": "def-public.AppContext.cloudServiceProvider", + "type": "string", + "tags": [], + "label": "cloudServiceProvider", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_onboarding/public/index.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 083ab0e2a486..71ff4965e212 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 23 | 0 | 23 | 0 | +| 24 | 0 | 24 | 0 | ## Client diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index b72ac756c184..abf13c19adb5 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-09-26 +date: 2024-09-27 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 57e63749d3f4..0d6645ba7cb9 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 72592954ad0d..70e096148225 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index a602b1670f53..ff0761200804 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 53273 | 245 | 39913 | 1964 | +| 53365 | 245 | 39988 | 1981 | ## Plugin Directory @@ -53,7 +53,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 271 | 0 | 252 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 128 | 0 | 123 | 15 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 131 | 0 | 126 | 15 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3209 | 31 | 2594 | 24 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 5 | 0 | 5 | 0 | @@ -103,7 +103,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 88 | 0 | 88 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1366 | 5 | 1243 | 74 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1368 | 5 | 1245 | 74 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -144,7 +144,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 209 | 0 | 205 | 27 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 137 | 8 | 137 | 5 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 148 | 3 | 63 | 100 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 148 | 3 | 63 | 103 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 15 | 3 | 13 | 1 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 9 | 0 | 9 | 0 | @@ -157,7 +157,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin exposes and registers observability log consumption features. | 19 | 0 | 19 | 1 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 23 | 0 | 23 | 0 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 24 | 0 | 24 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 477 | 1 | 472 | 19 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 2 | 0 | @@ -517,7 +517,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 269 | 1 | 209 | 15 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 27 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 177 | 1 | 139 | 20 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 266 | 1 | 208 | 34 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 12 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 73 | 0 | 69 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 199 | 0 | 187 | 12 | @@ -577,7 +577,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 2 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 592 | 1 | 1 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 2 | 0 | 2 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 97 | 1 | 0 | 0 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 94 | 1 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 209 | 3 | 1 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 8 | 0 | 8 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 37 | 0 | 0 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 2c5a760f2105..6da4385eb569 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 1c42da7834d4..e26b7b78721c 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-09-26 +date: 2024-09-27 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 da5cb655f5b6..aa2c46d608bd 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 4f79a0ed5be6..6a06e36ac25b 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index a28c925b53aa..d74657776b6b 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-09-26 +date: 2024-09-27 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 79f65ec674c0..a43f595ccb18 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 1e1f85a5362d..afb48f9a133b 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-09-26 +date: 2024-09-27 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 d32cfe9672aa..16ebcea6c21b 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-09-26 +date: 2024-09-27 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 23bc34cd6dac..5a1e7e7221ae 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-09-26 +date: 2024-09-27 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 70e8504778de..a8935519361b 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-09-26 +date: 2024-09-27 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 1cbbe20407db..a1c0dbab0716 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-09-26 +date: 2024-09-27 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 b4462c5dbac1..f0f21814860c 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-09-26 +date: 2024-09-27 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 cdfde101e8ae..354fca0dd99c 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-09-26 +date: 2024-09-27 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 c0e2d28d7135..f7fbbd7525ee 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-09-26 +date: 2024-09-27 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 5d883e1968e2..ca4eda9be261 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-09-26 +date: 2024-09-27 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 a5d7ff379f8e..a7eb1ce70b9c 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-09-26 +date: 2024-09-27 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 f9a8922b2b46..df3242c87551 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 941c358ad8c1..c231be7c9bc1 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 57be2c7194ef..a4332e77b246 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 806b83b5ba27..9eba138cba74 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 2942e8cba68b..46ec7bd47887 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 4b9e0044f3aa..2f59717ba23a 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 5c91ad6db316..1f6f6af656bf 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index f18effac1fb8..878a67ced85c 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index fd372651abd1..3d059a2e5819 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index c2905aad736d..ae35be3874a4 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"automatedResponseActionsForMoreRulesEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"assistantNaturalLanguageESQLTool\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"loggingRequestsEnabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"visualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"assistantNaturalLanguageESQLTool\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"loggingRequestsEnabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"visualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"automatedResponseActionsForMoreRulesEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"assistantNaturalLanguageESQLTool\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"loggingRequestsEnabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"visualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreEnabled\" | undefined" + "\"assistantKnowledgeBaseByDefault\" | \"assistantModelEvaluation\" | \"assistantBedrockChat\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesEnabled\" | \"entityAlertPreviewDisabled\" | \"assistantNaturalLanguageESQLTool\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"loggingRequestsEnabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"visualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"manualRuleRunEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1929,7 +1929,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly automatedResponseActionsForMoreRulesEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly assistantNaturalLanguageESQLTool: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly loggingRequestsEnabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly visualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly assistantNaturalLanguageESQLTool: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly loggingRequestsEnabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly visualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3097,7 +3097,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly automatedResponseActionsForMoreRulesEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly assistantNaturalLanguageESQLTool: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly loggingRequestsEnabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly visualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly assistantNaturalLanguageESQLTool: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly loggingRequestsEnabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly visualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3273,7 +3273,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly automatedResponseActionsForMoreRulesEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly assistantNaturalLanguageESQLTool: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly loggingRequestsEnabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly visualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreEnabled: boolean; }" + "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesEnabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly assistantKnowledgeBaseByDefault: boolean; readonly assistantBedrockChat: boolean; readonly assistantNaturalLanguageESQLTool: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly loggingRequestsEnabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly visualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly manualRuleRunEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3339,7 +3339,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly automatedResponseActionsForMoreRulesEnabled: false; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly assistantBedrockChat: true; readonly assistantNaturalLanguageESQLTool: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly loggingRequestsEnabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly visualizationInFlyoutEnabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreEnabled: false; }" + "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesEnabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly assistantKnowledgeBaseByDefault: false; readonly assistantBedrockChat: true; readonly assistantNaturalLanguageESQLTool: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly loggingRequestsEnabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly jamfDataInAnalyzerEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly visualizationInFlyoutEnabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly manualRuleRunEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreEnabled: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index f18525114d14..683514365509 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-09-26 +date: 2024-09-27 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 928a0cb9fb81..fdf4673acbda 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-09-26 +date: 2024-09-27 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 ca51af76b854..ea6e7d3f55ef 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-09-26 +date: 2024-09-27 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 c38cd8348ee7..b4a67b09d2c2 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-09-26 +date: 2024-09-27 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 0b748a5d53a7..5bb659659149 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-09-26 +date: 2024-09-27 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 b495dff9dc30..eb3fca56e144 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-09-26 +date: 2024-09-27 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 25d33199d4a8..efe6323f1c71 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-09-26 +date: 2024-09-27 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 46feda505aa9..0b19cc1405cc 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 3f2b35f13913..b51d1346b4dc 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 908f77e5ad9c..324d8d7d612a 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-09-26 +date: 2024-09-27 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 8c61f5213cd3..60fc9facbc06 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-09-26 +date: 2024-09-27 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 16847a2ed0c3..d5dcc7db2149 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-09-26 +date: 2024-09-27 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 c7665418446b..688107776c09 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-09-26 +date: 2024-09-27 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 0b2e367ec67a..122f0478a63e 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-09-26 +date: 2024-09-27 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 0163cd73e97d..67abbfb82cab 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-09-26 +date: 2024-09-27 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 ad567d6f100f..dd1153fb68db 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-09-26 +date: 2024-09-27 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 bcb5801d5cd5..0f151e28b051 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-09-26 +date: 2024-09-27 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 6f901147b57d..109e7bc8d41d 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 838f2f2e7dbd..abd0b9887172 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-09-26 +date: 2024-09-27 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 a17383104d02..76a93e704632 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-09-26 +date: 2024-09-27 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 2fdab4b4bc37..1e531e6f6eee 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-09-26 +date: 2024-09-27 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 3424f1721e53..ed6f774c4ae5 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-09-26 +date: 2024-09-27 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 02bfe39d8f95..7d21b58f30fe 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-09-26 +date: 2024-09-27 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 e531c815157e..b9365f989dad 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 7148977a9eb4..ed15f3e909e2 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 217a7ae3ca3a..3716c9bb1656 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-09-26 +date: 2024-09-27 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 8e81ebef6211..d9bc7c4d168f 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-09-26 +date: 2024-09-27 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 f3f9ce1c0d2d..d44a38af772b 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index a1c78537f83c..9af90cb7c61d 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 4f1842ffe8cd..f04cfcdb791d 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-09-26 +date: 2024-09-27 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 0b2372b0fa9e..c6b9335bb858 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-09-26 +date: 2024-09-27 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 f3ba13620807..09f56e961b8c 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-09-26 +date: 2024-09-27 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 c359bf832d7c..067d33c43a1a 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-09-26 +date: 2024-09-27 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 47fb761504a7..2a82500155f6 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-09-26 +date: 2024-09-27 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 89ebec2ee730..1ea967027b9a 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-09-26 +date: 2024-09-27 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 c073e989377b..79f3441e0b67 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-09-26 +date: 2024-09-27 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 6a0762072e4e..adda58d8b2ee 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-09-26 +date: 2024-09-27 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 9b108a347dca..a77cbb54664e 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-09-26 +date: 2024-09-27 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 27967b3e7a93..d2ae60fbf3e1 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-09-26 +date: 2024-09-27 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 427ea609fc79..5582a878d864 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-09-26 +date: 2024-09-27 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 551b984eabf3..e7dba8fd7348 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-09-26 +date: 2024-09-27 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 f89ca469a773..4d21ad6f0cab 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-09-26 +date: 2024-09-27 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 f59856f88afc..e258ddd3c3a5 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-09-26 +date: 2024-09-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/dev_docs/shared_ux/shared_ux_landing.mdx b/dev_docs/shared_ux/shared_ux_landing.mdx index 2b6bc7661ded..4be8ad134be1 100644 --- a/dev_docs/shared_ux/shared_ux_landing.mdx +++ b/dev_docs/shared_ux/shared_ux_landing.mdx @@ -27,7 +27,7 @@ layout: landing sectionTitle="Our Catalog" items={[ { - pageId: 'kibDevTutorialsServerlessProjectNavigation', + pageId: 'kibDevTutorialsSolutionNavigation', title: 'Serverless Project Navigation', description: 'Learn how to work with the new chrome navigation in serverless projects', }, diff --git a/docs/dev-tools/console/console.asciidoc b/docs/dev-tools/console/console.asciidoc index c65a2f8b760e..62f2161532ce 100644 --- a/docs/dev-tools/console/console.asciidoc +++ b/docs/dev-tools/console/console.asciidoc @@ -1,16 +1,17 @@ [[console-kibana]] -== Run API requests +== Run API requests with Console -Interact with the REST APIs of {es} and {kib} with *Console*. With *Console*, you can: +**Console** lets you interact with https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html[{es} APIs] and https://www.elastic.co/docs/api[{kib} APIs] from within {kib}. -* Send requests and view the responses -* View API documentation -* Get your request history +[role="screenshot"] +image::dev-tools/console/images/console.png["Console", width="75%"] + +To go to **Console**, find **Dev Tools** in the navigation menu or use the <>. -To get started, open the main menu, click *Dev Tools*, then click *Console*. +You can also find Console directly on certain Search solution and Elasticsearch serverless project pages, where you can expand it from the footer. This Console, called **Persistent Console**, has the same capabilities and shares the same history as the Console in **Dev Tools**. [role="screenshot"] -image::dev-tools/console/images/console.png["Console"] +image::dev-tools/console/images/persistent-console.png["Console", width="75%"] [float] [[console-api]] @@ -48,11 +49,6 @@ Prepend requests to a {kib} API endpoint with `kbn:` GET kbn:/api/index_management/indices -------------------------------------------------- -When you paste the command into *Console*, {kib} automatically converts it -to *Console* syntax. Alternatively, if you want to see *Console* syntax in cURL, -click the action icon (image:dev-tools/console/images/wrench.png[]) and select *Copy as cURL*. -Once copied, the username and password will need to be provided -for the calls to work from external environments. [float] [[console-autocomplete]] @@ -60,8 +56,9 @@ for the calls to work from external environments. When you're typing a command, *Console* makes context-sensitive suggestions. These suggestions show you the parameters for each API and speed up your typing. -To configure your preferences for autocomplete, go to -<>. + +You can configure your preferences for autocomplete in the +<>. [float] [[console-comments]] @@ -155,74 +152,106 @@ GET /locations/_search ==== Auto-formatting The auto-formatting -capability can help you format requests. Select one or more requests that you -want to format, click the action icon (image:dev-tools/console/images/wrench.png[]), -and then select *Auto indent*. +capability can help you format requests to be more readable. Select one or more requests that you +want to format, open the contextual menu, and then select *Auto indent*. -For example, you might have a request formatted like this: +[float] +[[keyboard-shortcuts]] +==== Keyboard shortcuts -[role="screenshot"] -image::dev-tools/console/images/unformatted-request.png["Unformatted request", width=75%] +Go to line number:: +`Ctrl/Cmd` + `L` -*Console* adjusts the JSON body of the request to apply the indents. +Auto-indent current request:: +`Ctrl/Cmd` + `I` + +Jump to next request end:: +`Ctrl/Cmd` + `↓` + +Jump to previous request end:: +`Ctrl/Cmd` + `↑` + +Open documentation for current request:: +`Ctrl/Cmd` + `/` + +Run current request:: +`Ctrl/Cmd` + `Enter` + +Apply current or topmost term in autocomplete menu:: +`Enter` or `Tab` + +Close autocomplete menu:: +`Esc` + +Navigate items in autocomplete menu:: +`↓` + `↑` -[role="screenshot"] -image::dev-tools/console/images/formatted-request.png["Formatted request", width=75%] -If you select *Auto indent* on a request that is already well formatted, -*Console* collapses the request body to a single line per document. -This is helpful when working with the {es} {ref}/docs-bulk.html[bulk APIs]. + +[float] +[[console-view-api]] +==== View API docs + +To view the documentation for an API endpoint, select the request, then open the contextual menu and select +*Open API reference*. [float] [[console-request]] -=== Submit requests +=== Run requests + +When you're ready to run a request, select the request, and click the play button. -When you're ready to submit the request to {es}, click the green triangle. +The result of the request execution is displayed in the response panel, where you can see: -You can select multiple requests and submit them together. -*Console* sends the requests to {es} one by one and shows the output -in the response pane. Submitting multiple requests is helpful +* the JSON response +* the HTTP status code corresponding to the request +* The execution time, in ms. + +TIP: You can select multiple requests and submit them together. +*Console* executes the requests one by one. Submitting multiple requests is helpful when you're debugging an issue or trying query combinations in multiple scenarios. + + [float] -[[console-view-api]] -=== View API docs +[[import-export-console-requests]] +=== Import and export requests + +You can export requests: + +* **to a TXT file**, by using the **Export requests** button. When using this method, all content of the input panel is copied, including comments, requests, and payloads. All of the formatting is preserved and allows you to re-import the file later, or to a different environment, using the **Import requests** button. ++ +TIP: When importing a TXT file containing Console requests, the current content of the input panel is replaced. Export it first if you don't want to lose it, or find it in the **History** tab if you already ran the requests. -To view the documentation for an API endpoint, click -the action icon (image:dev-tools/console/images/wrench.png[]) and select -*Open documentation*. +* by copying them individually as **curl**, **JavaScript**, or **Python**. To do this, select a request, then open the contextual menu and select **Copy as**. When using this action, requests are copied individually to your clipboard. You can save your favorite language to make the copy action faster the next time you use it. ++ +When running copied requests from an external environment, you'll need to add https://www.elastic.co/docs/api/doc/kibana/authentication[authentication information] to the request. [float] [[console-history]] === Get your request history -*Console* maintains a list of the last 500 requests that {es} successfully executed. -To view your most recent requests, click *History*. If you select a request -and click *Apply*, {kib} adds it to the editor at the current cursor position. +*Console* maintains a list of the last 500 requests that you tried to execute. +To view them, open the *History* tab. + +You can run a request from your history again by selecting the request and clicking **Add and run**. If you want to add it back to the Console input panel without running it yet, click **Add** instead. It is added to the editor at the current cursor position. [float] [[configuring-console]] === Configure Console settings -You can configure the *Console* font size, JSON syntax, -and autocomplete suggestions in *Settings*. - -[role="screenshot"] -image::dev-tools/console/images/console-settings.png["Console Settings", width=60%] - -[float] -[[keyboard-shortcuts]] -=== Get keyboard shortcuts +Go to the **Config** tab of **Console** to customize its display, autocomplete, and accessibility settings. -For a list of available keyboard -shortcuts, click *Help*. [float] -[[console-settings]] +[[disable-console]] === Disable Console If you don’t want to use *Console*, you can disable it by setting `console.ui.enabled` to `false` in your `kibana.yml` configuration file. Changing this setting causes the server to regenerate assets on the next startup, which might cause a delay before pages start being served. + +You can also choose to only disable the persistent console that shows in the footer of several Kibana pages. To do that, go to **Stack Management** > **Advanced Settings**, and turn off the `devTools:enablePersistentConsole` setting. + diff --git a/docs/dev-tools/console/images/console-settings.png b/docs/dev-tools/console/images/console-settings.png deleted file mode 100644 index e7aaa0d9881d..000000000000 Binary files a/docs/dev-tools/console/images/console-settings.png and /dev/null differ diff --git a/docs/dev-tools/console/images/console.png b/docs/dev-tools/console/images/console.png index 93034b97c68a..84e4c4f3a7aa 100644 Binary files a/docs/dev-tools/console/images/console.png and b/docs/dev-tools/console/images/console.png differ diff --git a/docs/dev-tools/console/images/formatted-request.png b/docs/dev-tools/console/images/formatted-request.png deleted file mode 100644 index c95b54dc95b0..000000000000 Binary files a/docs/dev-tools/console/images/formatted-request.png and /dev/null differ diff --git a/docs/dev-tools/console/images/persistent-console.png b/docs/dev-tools/console/images/persistent-console.png new file mode 100644 index 000000000000..813cc919d1e1 Binary files /dev/null and b/docs/dev-tools/console/images/persistent-console.png differ diff --git a/docs/dev-tools/console/images/unformatted-request.png b/docs/dev-tools/console/images/unformatted-request.png deleted file mode 100644 index a6fb9cd1438f..000000000000 Binary files a/docs/dev-tools/console/images/unformatted-request.png and /dev/null differ diff --git a/docs/dev-tools/console/images/variables.png b/docs/dev-tools/console/images/variables.png index 7407451892b4..9b377ef3b5f4 100644 Binary files a/docs/dev-tools/console/images/variables.png and b/docs/dev-tools/console/images/variables.png differ diff --git a/docs/dev-tools/console/images/wrench.png b/docs/dev-tools/console/images/wrench.png deleted file mode 100644 index a235990b853c..000000000000 Binary files a/docs/dev-tools/console/images/wrench.png and /dev/null differ diff --git a/packages/kbn-alerts-ui-shared/src/alerts_search_bar/index.tsx b/packages/kbn-alerts-ui-shared/src/alerts_search_bar/index.tsx index 3cdb3b5b08a0..efda77df2c40 100644 --- a/packages/kbn-alerts-ui-shared/src/alerts_search_bar/index.tsx +++ b/packages/kbn-alerts-ui-shared/src/alerts_search_bar/index.tsx @@ -16,8 +16,9 @@ import { SEARCH_BAR_PLACEHOLDER } from './translations'; import type { AlertsSearchBarProps, QueryLanguageType } from './types'; import { useLoadRuleTypesQuery, useAlertsDataView, useRuleAADFields } from '../common/hooks'; -const SA_ALERTS = { type: 'alerts', fields: {} } as SuggestionsAbstraction; +export type { AlertsSearchBarProps } from './types'; +const SA_ALERTS = { type: 'alerts', fields: {} } as SuggestionsAbstraction; const EMPTY_FEATURE_IDS: ValidFeatureId[] = []; export const AlertsSearchBar = ({ diff --git a/packages/kbn-alerts-ui-shared/src/common/constants/index.ts b/packages/kbn-alerts-ui-shared/src/common/constants/index.ts index d58549e99592..5213094216c6 100644 --- a/packages/kbn-alerts-ui-shared/src/common/constants/index.ts +++ b/packages/kbn-alerts-ui-shared/src/common/constants/index.ts @@ -10,3 +10,5 @@ export * from './alerts'; export * from './i18n_weekdays'; export * from './routes'; + +export const VIEW_LICENSE_OPTIONS_LINK = 'https://www.elastic.co/subscriptions'; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts index 88b44f26a1fc..2c9988f2be0d 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/index.ts @@ -9,6 +9,10 @@ export * from './use_alerts_data_view'; export * from './use_create_rule'; +export * from './use_update_rule'; +export * from './use_resolve_rule'; +export * from './use_load_connectors'; +export * from './use_load_connector_types'; export * from './use_get_alerts_group_aggregations_query'; export * from './use_health_check'; export * from './use_load_alerting_framework_health'; diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.test.tsx b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.test.tsx index 506aa947136e..63e494ab8708 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.test.tsx @@ -13,7 +13,7 @@ import { renderHook } from '@testing-library/react-hooks/dom'; import { waitFor } from '@testing-library/react'; import { httpServiceMock } from '@kbn/core/public/mocks'; -import { useLoadActionTypes } from './use_load_connector_types'; +import { useLoadConnectorTypes } from './use_load_connector_types'; const queryClient = new QueryClient(); @@ -46,7 +46,7 @@ describe('useLoadConnectorTypes', () => { test('should call API endpoint with the correct parameters', async () => { const { result } = renderHook( () => - useLoadActionTypes({ + useLoadConnectorTypes({ http, includeSystemActions: true, }), @@ -74,7 +74,7 @@ describe('useLoadConnectorTypes', () => { test('should call the correct endpoint if system actions is true', async () => { const { result } = renderHook( () => - useLoadActionTypes({ + useLoadConnectorTypes({ http, includeSystemActions: true, }), @@ -91,7 +91,7 @@ describe('useLoadConnectorTypes', () => { test('should call the correct endpoint if system actions is false', async () => { const { result } = renderHook( () => - useLoadActionTypes({ + useLoadConnectorTypes({ http, includeSystemActions: false, }), diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts index f9b4d3396203..2810758a57f0 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connector_types.ts @@ -11,13 +11,14 @@ import { useQuery } from '@tanstack/react-query'; import type { HttpStart } from '@kbn/core-http-browser'; import { fetchConnectorTypes } from '../apis'; -export interface UseLoadActionTypesProps { +export interface UseLoadConnectorTypesProps { http: HttpStart; includeSystemActions?: boolean; + enabled?: boolean; } -export const useLoadActionTypes = (props: UseLoadActionTypesProps) => { - const { http, includeSystemActions } = props; +export const useLoadConnectorTypes = (props: UseLoadConnectorTypesProps) => { + const { http, includeSystemActions, enabled = true } = props; const queryFn = () => { return fetchConnectorTypes({ http, includeSystemActions }); @@ -27,6 +28,7 @@ export const useLoadActionTypes = (props: UseLoadActionTypesProps) => { queryKey: ['useLoadConnectorTypes', includeSystemActions], queryFn, refetchOnWindowFocus: false, + enabled, }); return { diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts index 9b9a2f4206e9..9ae876d06278 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_connectors.ts @@ -14,10 +14,11 @@ import { fetchConnectors } from '../apis'; export interface UseLoadConnectorsProps { http: HttpStart; includeSystemActions?: boolean; + enabled?: boolean; } export const useLoadConnectors = (props: UseLoadConnectorsProps) => { - const { http, includeSystemActions = false } = props; + const { http, includeSystemActions = false, enabled = true } = props; const queryFn = () => { return fetchConnectors({ http, includeSystemActions }); @@ -27,6 +28,7 @@ export const useLoadConnectors = (props: UseLoadConnectorsProps) => { queryKey: ['useLoadConnectors', includeSystemActions], queryFn, refetchOnWindowFocus: false, + enabled, }); return { diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts index aafcd1f5167d..fab6fd3336f2 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_load_rule_type_aad_template_fields.ts @@ -15,7 +15,7 @@ import { fetchRuleTypeAadTemplateFields, getDescription } from '../apis'; export interface UseLoadRuleTypeAadTemplateFieldProps { http: HttpStart; - ruleTypeId: string; + ruleTypeId?: string; enabled: boolean; } @@ -23,6 +23,9 @@ export const useLoadRuleTypeAadTemplateField = (props: UseLoadRuleTypeAadTemplat const { http, ruleTypeId, enabled } = props; const queryFn = () => { + if (!ruleTypeId) { + return; + } return fetchRuleTypeAadTemplateFields({ http, ruleTypeId }); }; @@ -35,7 +38,7 @@ export const useLoadRuleTypeAadTemplateField = (props: UseLoadRuleTypeAadTemplat queryKey: ['useLoadRuleTypeAadTemplateField', ruleTypeId], queryFn, select: (dataViewFields) => { - return dataViewFields.map((d) => ({ + return dataViewFields?.map((d) => ({ name: d.name, description: getDescription(d.name, EcsFlat), })); diff --git a/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts b/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts index 36648172f4ff..fafd372dc364 100644 --- a/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts +++ b/packages/kbn-alerts-ui-shared/src/common/hooks/use_resolve_rule.ts @@ -41,6 +41,7 @@ export const useResolveRule = (props: UseResolveProps) => { }; }, refetchOnWindowFocus: false, + retry: false, }); return { diff --git a/packages/kbn-alerts-ui-shared/src/common/test_utils/actions_test_utils.ts b/packages/kbn-alerts-ui-shared/src/common/test_utils/actions_test_utils.ts new file mode 100644 index 000000000000..01f88ab1e01b --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/common/test_utils/actions_test_utils.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { ActionType } from '@kbn/actions-types'; +import { RuleSystemAction } from '@kbn/alerting-types'; +import { ActionConnector, ActionTypeModel, GenericValidationResult, RuleAction } from '../types'; +import { actionTypeRegistryMock } from './action_type_registry.mock'; + +export const getConnector = ( + id: string, + overwrites?: Partial +): ActionConnector => { + return { + id: `connector-${id}`, + secrets: { secret: 'secret' }, + actionTypeId: `actionType-${id}`, + name: `connector-${id}`, + config: { config: `config-${id}` }, + isPreconfigured: false, + isSystemAction: false, + isDeprecated: false, + ...overwrites, + }; +}; + +export const getAction = (id: string, overwrites?: Partial): RuleAction => { + return { + id: `action-${id}`, + uuid: `uuid-action-${id}`, + group: `group-${id}`, + actionTypeId: `actionType-${id}`, + params: {}, + ...overwrites, + }; +}; + +export const getSystemAction = ( + id: string, + overwrites?: Partial +): RuleSystemAction => { + return { + uuid: `uuid-system-action-${id}`, + id: `system-action-${id}`, + actionTypeId: `actionType-${id}`, + params: {}, + ...overwrites, + }; +}; + +export const getActionType = (id: string, overwrites?: Partial): ActionType => { + return { + id: `actionType-${id}`, + name: `actionType: ${id}`, + enabled: true, + enabledInConfig: true, + enabledInLicense: true, + minimumLicenseRequired: 'basic', + supportedFeatureIds: ['stackAlerts'], + isSystemActionType: false, + ...overwrites, + }; +}; + +export const getActionTypeModel = ( + id: string, + overwrites?: Partial +): ActionTypeModel => { + return actionTypeRegistryMock.createMockActionTypeModel({ + id: `actionTypeModel-${id}`, + iconClass: 'test', + selectMessage: 'test', + validateParams: (): Promise> => { + const validationResult = { errors: {} }; + return Promise.resolve(validationResult); + }, + actionConnectorFields: null, + ...overwrites, + }); +}; diff --git a/packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts b/packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts index deef7aa4147c..29eaf17552a2 100644 --- a/packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts +++ b/packages/kbn-alerts-ui-shared/src/common/types/rule_types.ts @@ -43,6 +43,10 @@ export interface RuleFormBaseErrors { tags?: string[]; } +export interface RuleFormActionsErrors { + filterQuery?: string[]; +} + export interface RuleFormParamsErrors { [key: string]: string | string[] | RuleFormParamsErrors; } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/constants.ts b/packages/kbn-alerts-ui-shared/src/rule_form/constants.ts index 84346f9737ef..f557dc5ebdb4 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/constants.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/constants.ts @@ -32,10 +32,12 @@ export const GET_DEFAULT_FORM_DATA = ({ name, consumer, schedule, + actions, }: { ruleTypeId: RuleFormData['ruleTypeId']; name: RuleFormData['name']; consumer: RuleFormData['consumer']; + actions: RuleFormData['actions']; schedule?: RuleFormData['schedule']; }) => { return { @@ -47,6 +49,7 @@ export const GET_DEFAULT_FORM_DATA = ({ consumer, ruleTypeId, name, + actions, }; }; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx index c252bbdfb340..71aeb2bcaab7 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/create_rule_form.tsx @@ -10,9 +10,9 @@ import React, { useCallback } from 'react'; import { EuiLoadingElastic } from '@elastic/eui'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import type { RuleCreationValidConsumer } from '@kbn/rule-data-utils'; +import { type RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import type { RuleFormData, RuleFormPlugins } from './types'; -import { ALERTING_FEATURE_ID, DEFAULT_VALID_CONSUMERS, GET_DEFAULT_FORM_DATA } from './constants'; +import { DEFAULT_VALID_CONSUMERS, GET_DEFAULT_FORM_DATA } from './constants'; import { RuleFormStateProvider } from './rule_form_state'; import { useCreateRule } from '../common/hooks'; import { RulePage } from './rule_page'; @@ -40,6 +40,8 @@ export interface CreateRuleFormProps { validConsumers?: RuleCreationValidConsumer[]; filteredRuleTypes?: string[]; shouldUseRuleProducer?: boolean; + canShowConsumerSelection?: boolean; + showMustacheAutocompleteSwitch?: boolean; returnUrl: string; } @@ -47,16 +49,18 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { const { ruleTypeId, plugins, - consumer = ALERTING_FEATURE_ID, + consumer = 'alerts', multiConsumerSelection, validConsumers = DEFAULT_VALID_CONSUMERS, filteredRuleTypes = [], shouldUseRuleProducer = false, + canShowConsumerSelection = true, + showMustacheAutocompleteSwitch = false, returnUrl, } = props; - const { http, docLinks, notification, ruleTypeRegistry, i18n, theme } = plugins; - const { toasts } = notification; + const { http, docLinks, notifications, ruleTypeRegistry, i18n, theme } = plugins; + const { toasts } = notifications; const { mutate, isLoading: isSaving } = useCreateRule({ http, @@ -79,16 +83,25 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { }, }); - const { isInitialLoading, ruleType, ruleTypeModel, uiConfig, healthCheckError } = - useLoadDependencies({ - http, - toasts: notification.toasts, - ruleTypeRegistry, - ruleTypeId, - consumer, - validConsumers, - filteredRuleTypes, - }); + const { + isInitialLoading, + ruleType, + ruleTypeModel, + uiConfig, + healthCheckError, + connectors, + connectorTypes, + aadTemplateFields, + } = useLoadDependencies({ + http, + toasts: notifications.toasts, + capabilities: plugins.application.capabilities, + ruleTypeRegistry, + ruleTypeId, + consumer, + validConsumers, + filteredRuleTypes, + }); const onSave = useCallback( (newFormData: RuleFormData) => { @@ -101,8 +114,7 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { tags: newFormData.tags, params: newFormData.params, schedule: newFormData.schedule, - // TODO: Will add actions in the actions PR - actions: [], + actions: newFormData.actions, notifyWhen: newFormData.notifyWhen, alertDelay: newFormData.alertDelay, }, @@ -151,12 +163,18 @@ export const CreateRuleForm = (props: CreateRuleFormProps) => { ruleType, minimumScheduleInterval: uiConfig?.minimumScheduleInterval, }), + actions: [], }), plugins, + connectors, + connectorTypes, + aadTemplateFields, minimumScheduleInterval: uiConfig?.minimumScheduleInterval, selectedRuleTypeModel: ruleTypeModel, selectedRuleType: ruleType, validConsumers, + canShowConsumerSelection, + showMustacheAutocompleteSwitch, multiConsumerSelection: getInitialMultiConsumer({ multiConsumerSelection, validConsumers, diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx index e0b81aeac271..509144427687 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/edit_rule_form.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useCallback } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { EuiLoadingElastic } from '@elastic/eui'; import { toMountPoint } from '@kbn/react-kibana-mount'; import type { RuleFormData, RuleFormPlugins } from './types'; @@ -17,6 +17,7 @@ import { RulePage } from './rule_page'; import { RuleFormHealthCheckError } from './rule_form_errors/rule_form_health_check_error'; import { useLoadDependencies } from './hooks/use_load_dependencies'; import { + RuleFormActionPermissionError, RuleFormCircuitBreakerError, RuleFormErrorPromptWrapper, RuleFormResolveRuleError, @@ -28,13 +29,14 @@ import { parseRuleCircuitBreakerErrorMessage } from './utils'; export interface EditRuleFormProps { id: string; plugins: RuleFormPlugins; + showMustacheAutocompleteSwitch?: boolean; returnUrl: string; } export const EditRuleForm = (props: EditRuleFormProps) => { - const { id, plugins, returnUrl } = props; - const { http, notification, docLinks, ruleTypeRegistry, i18n, theme } = plugins; - const { toasts } = notification; + const { id, plugins, returnUrl, showMustacheAutocompleteSwitch = false } = props; + const { http, notifications, docLinks, ruleTypeRegistry, i18n, theme, application } = plugins; + const { toasts } = notifications; const { mutate, isLoading: isSaving } = useUpdateRule({ http, @@ -57,13 +59,23 @@ export const EditRuleForm = (props: EditRuleFormProps) => { }, }); - const { isInitialLoading, ruleType, ruleTypeModel, uiConfig, healthCheckError, fetchedFormData } = - useLoadDependencies({ - http, - toasts: notification.toasts, - ruleTypeRegistry, - id, - }); + const { + isInitialLoading, + ruleType, + ruleTypeModel, + uiConfig, + healthCheckError, + fetchedFormData, + connectors, + connectorTypes, + aadTemplateFields, + } = useLoadDependencies({ + http, + toasts: notifications.toasts, + capabilities: plugins.application.capabilities, + ruleTypeRegistry, + id, + }); const onSave = useCallback( (newFormData: RuleFormData) => { @@ -74,8 +86,7 @@ export const EditRuleForm = (props: EditRuleFormProps) => { tags: newFormData.tags, schedule: newFormData.schedule, params: newFormData.params, - // TODO: Will add actions in the actions PR - actions: [], + actions: newFormData.actions, notifyWhen: newFormData.notifyWhen, alertDelay: newFormData.alertDelay, }, @@ -84,6 +95,18 @@ export const EditRuleForm = (props: EditRuleFormProps) => { [id, mutate] ); + const canEditRule = useMemo(() => { + if (!ruleType || !fetchedFormData) { + return false; + } + + const { consumer, actions } = fetchedFormData; + const hasAllPrivilege = !!ruleType.authorizedConsumers[consumer]?.all; + const canExecuteActions = !!application.capabilities.actions?.execute; + + return hasAllPrivilege && (canExecuteActions || (!canExecuteActions && !actions.length)); + }, [ruleType, fetchedFormData, application]); + if (isInitialLoading) { return ( @@ -92,18 +115,18 @@ export const EditRuleForm = (props: EditRuleFormProps) => { ); } - if (!ruleType || !ruleTypeModel) { + if (!fetchedFormData) { return ( - + ); } - if (!fetchedFormData) { + if (!ruleType || !ruleTypeModel) { return ( - + ); } @@ -116,16 +139,28 @@ export const EditRuleForm = (props: EditRuleFormProps) => { ); } + if (!canEditRule) { + return ( + + + + ); + } + return (
diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx index e80bda0692a6..263c9e211805 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.test.tsx @@ -16,6 +16,7 @@ import type { ToastsStart } from '@kbn/core-notifications-browser'; import { useLoadDependencies } from './use_load_dependencies'; import { RuleTypeRegistryContract } from '../../common'; +import { ApplicationStart } from '@kbn/core-application-browser'; jest.mock('../../common/hooks/use_load_ui_config', () => ({ useLoadUiConfig: jest.fn(), @@ -33,6 +34,18 @@ jest.mock('../../common/hooks/use_load_rule_types_query', () => ({ useLoadRuleTypesQuery: jest.fn(), })); +jest.mock('../../common/hooks/use_load_connectors', () => ({ + useLoadConnectors: jest.fn(), +})); + +jest.mock('../../common/hooks/use_load_connector_types', () => ({ + useLoadConnectorTypes: jest.fn(), +})); + +jest.mock('../../common/hooks/use_load_rule_type_aad_template_fields', () => ({ + useLoadRuleTypeAadTemplateField: jest.fn(), +})); + jest.mock('../utils/get_authorized_rule_types', () => ({ getAvailableRuleTypes: jest.fn(), })); @@ -40,6 +53,11 @@ jest.mock('../utils/get_authorized_rule_types', () => ({ const { useLoadUiConfig } = jest.requireMock('../../common/hooks/use_load_ui_config'); const { useHealthCheck } = jest.requireMock('../../common/hooks/use_health_check'); const { useResolveRule } = jest.requireMock('../../common/hooks/use_resolve_rule'); +const { useLoadConnectors } = jest.requireMock('../../common/hooks/use_load_connectors'); +const { useLoadConnectorTypes } = jest.requireMock('../../common/hooks/use_load_connector_types'); +const { useLoadRuleTypeAadTemplateField } = jest.requireMock( + '../../common/hooks/use_load_rule_type_aad_template_fields' +); const { useLoadRuleTypesQuery } = jest.requireMock('../../common/hooks/use_load_rule_types_query'); const { getAvailableRuleTypes } = jest.requireMock('../utils/get_authorized_rule_types'); @@ -141,6 +159,55 @@ getAvailableRuleTypes.mockReturnValue([ }, ]); +const mockConnector = { + id: 'test-connector', + name: 'Test', + connector_type_id: 'test', + is_preconfigured: false, + is_deprecated: false, + is_missing_secrets: false, + is_system_action: false, + referenced_by_count: 0, + secrets: {}, + config: {}, +}; + +const mockConnectorType = { + id: 'test', + name: 'Test', + enabled: true, + enabled_in_config: true, + enabled_in_license: true, + supported_feature_ids: ['alerting'], + minimum_license_required: 'basic', + is_system_action_type: false, +}; + +const mockAadTemplateField = { + name: '@timestamp', + deprecated: false, + useWithTripleBracesInTemplates: false, + usesPublicBaseUrl: false, +}; + +useLoadConnectors.mockReturnValue({ + data: [mockConnector], + isLoading: false, + isInitialLoading: false, +}); + +useLoadConnectorTypes.mockReturnValue({ + data: [mockConnectorType], + isLoading: false, + isInitialLoading: false, +}); + +useLoadRuleTypeAadTemplateField.mockReturnValue({ + data: [mockAadTemplateField], + isLoading: false, + isInitialLoading: false, +}); + const queryClient = new QueryClient(); const wrapper = ({ children }: { children: React.ReactNode }) => ( @@ -169,6 +236,13 @@ describe('useLoadDependencies', () => { http: httpMock as unknown as HttpStart, toasts: toastsMock as unknown as ToastsStart, ruleTypeRegistry: ruleTypeRegistryMock, + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + } as unknown as ApplicationStart['capabilities'], }); }, { wrapper } @@ -186,6 +260,9 @@ describe('useLoadDependencies', () => { uiConfig: uiConfigMock, healthCheckError: null, fetchedFormData: ruleMock, + connectors: [mockConnector], + connectorTypes: [mockConnectorType], + aadTemplateFields: [mockAadTemplateField], }); }); @@ -197,6 +274,13 @@ describe('useLoadDependencies', () => { toasts: toastsMock as unknown as ToastsStart, ruleTypeRegistry: ruleTypeRegistryMock, filteredRuleTypes: ['test-rule-type'], + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + } as unknown as ApplicationStart['capabilities'], }); }, { wrapper } @@ -222,6 +306,13 @@ describe('useLoadDependencies', () => { ruleTypeRegistry: ruleTypeRegistryMock, validConsumers: ['stackAlerts', 'logs'], consumer: 'logs', + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + } as unknown as ApplicationStart['capabilities'], }); }, { wrapper } @@ -247,6 +338,13 @@ describe('useLoadDependencies', () => { toasts: toastsMock as unknown as ToastsStart, ruleTypeRegistry: ruleTypeRegistryMock, id: 'test-rule-id', + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + } as unknown as ApplicationStart['capabilities'], }); }, { wrapper } @@ -277,6 +375,13 @@ describe('useLoadDependencies', () => { ruleTypeRegistry: ruleTypeRegistryMock, ruleTypeId: '.index-threshold', consumer: 'stackAlerts', + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + } as unknown as ApplicationStart['capabilities'], }); }, { wrapper } @@ -304,6 +409,13 @@ describe('useLoadDependencies', () => { ruleTypeRegistry: ruleTypeRegistryMock, id: 'rule-id', consumer: 'stackAlerts', + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + } as unknown as ApplicationStart['capabilities'], }); }, { wrapper } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts b/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts index 2eb987810700..da59e85a933a 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/hooks/use_load_dependencies.ts @@ -9,21 +9,26 @@ import { HttpStart } from '@kbn/core-http-browser'; import type { ToastsStart } from '@kbn/core-notifications-browser'; +import { ApplicationStart } from '@kbn/core-application-browser'; import { RuleCreationValidConsumer } from '@kbn/rule-data-utils'; import { useMemo } from 'react'; import { useHealthCheck, + useLoadConnectors, + useLoadConnectorTypes, useLoadRuleTypesQuery, useLoadUiConfig, useResolveRule, } from '../../common/hooks'; import { getAvailableRuleTypes } from '../utils'; import { RuleTypeRegistryContract } from '../../common'; +import { useLoadRuleTypeAadTemplateField } from '../../common/hooks/use_load_rule_type_aad_template_fields'; export interface UseLoadDependencies { http: HttpStart; toasts: ToastsStart; ruleTypeRegistry: RuleTypeRegistryContract; + capabilities: ApplicationStart['capabilities']; consumer?: string; id?: string; ruleTypeId?: string; @@ -40,9 +45,12 @@ export const useLoadDependencies = (props: UseLoadDependencies) => { validConsumers, id, ruleTypeId, + capabilities, filteredRuleTypes = [], } = props; + const canReadConnectors = !!capabilities.actions?.show; + const { data: uiConfig, isLoading: isLoadingUiConfig, @@ -73,10 +81,41 @@ export const useLoadDependencies = (props: UseLoadDependencies) => { filteredRuleTypes, }); + const { + data: connectors = [], + isLoading: isLoadingConnectors, + isInitialLoading: isInitialLoadingConnectors, + } = useLoadConnectors({ + http, + includeSystemActions: true, + enabled: canReadConnectors, + }); + const computedRuleTypeId = useMemo(() => { return fetchedFormData?.ruleTypeId || ruleTypeId; }, [fetchedFormData, ruleTypeId]); + // Fetching Action related dependencies + const { + data: connectorTypes = [], + isLoading: isLoadingConnectorTypes, + isInitialLoading: isInitialLoadingConnectorTypes, + } = useLoadConnectorTypes({ + http, + includeSystemActions: true, + enabled: canReadConnectors, + }); + + const { + data: aadTemplateFields, + isLoading: isLoadingAadtemplateFields, + isInitialLoading: isInitialLoadingAadTemplateField, + } = useLoadRuleTypeAadTemplateField({ + http, + ruleTypeId: computedRuleTypeId, + enabled: !!computedRuleTypeId && canReadConnectors, + }); + const authorizedRuleTypeItems = useMemo(() => { const computedConsumer = consumer || fetchedFormData?.consumer; if (!computedConsumer) { @@ -99,21 +138,61 @@ export const useLoadDependencies = (props: UseLoadDependencies) => { }, [authorizedRuleTypeItems, computedRuleTypeId]); const isLoading = useMemo(() => { + // Create Mode if (id === undefined) { - return isLoadingUiConfig || isLoadingHealthCheck || isLoadingRuleTypes; + return ( + isLoadingUiConfig || + isLoadingHealthCheck || + isLoadingRuleTypes || + isLoadingConnectors || + isLoadingConnectorTypes || + isLoadingAadtemplateFields + ); } - return isLoadingUiConfig || isLoadingHealthCheck || isLoadingRule || isLoadingRuleTypes; - }, [id, isLoadingUiConfig, isLoadingHealthCheck, isLoadingRule, isLoadingRuleTypes]); + + // Edit Mode + return ( + isLoadingUiConfig || + isLoadingHealthCheck || + isLoadingRule || + isLoadingRuleTypes || + isLoadingConnectors || + isLoadingConnectorTypes || + isLoadingAadtemplateFields + ); + }, [ + id, + isLoadingUiConfig, + isLoadingHealthCheck, + isLoadingRule, + isLoadingRuleTypes, + isLoadingConnectors, + isLoadingConnectorTypes, + isLoadingAadtemplateFields, + ]); const isInitialLoading = useMemo(() => { + // Create Mode if (id === undefined) { - return isInitialLoadingUiConfig || isInitialLoadingHealthCheck || isInitialLoadingRuleTypes; + return ( + isInitialLoadingUiConfig || + isInitialLoadingHealthCheck || + isInitialLoadingRuleTypes || + isInitialLoadingConnectors || + isInitialLoadingConnectorTypes || + isInitialLoadingAadTemplateField + ); } + + // Edit Mode return ( isInitialLoadingUiConfig || isInitialLoadingHealthCheck || isInitialLoadingRule || - isInitialLoadingRuleTypes + isInitialLoadingRuleTypes || + isInitialLoadingConnectors || + isInitialLoadingConnectorTypes || + isInitialLoadingAadTemplateField ); }, [ id, @@ -121,6 +200,9 @@ export const useLoadDependencies = (props: UseLoadDependencies) => { isInitialLoadingHealthCheck, isInitialLoadingRule, isInitialLoadingRuleTypes, + isInitialLoadingConnectors, + isInitialLoadingConnectorTypes, + isInitialLoadingAadTemplateField, ]); return { @@ -131,5 +213,8 @@ export const useLoadDependencies = (props: UseLoadDependencies) => { uiConfig, healthCheckError, fetchedFormData, + connectors, + connectorTypes, + aadTemplateFields, }; }; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx index ee531defc91f..63846fb3628c 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.test.tsx @@ -8,27 +8,264 @@ */ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; +import { httpServiceMock } from '@kbn/core/public/mocks'; import { RuleActions } from './rule_actions'; +import { + getActionType, + getAction, + getSystemAction, + getConnector, + getActionTypeModel, +} from '../../common/test_utils/actions_test_utils'; +import userEvent from '@testing-library/user-event'; +import { ActionConnector, ActionTypeModel } from '../../common/types'; +import { RuleActionsItemProps } from './rule_actions_item'; +import { TypeRegistry } from '../../common/type_registry'; + +const http = httpServiceMock.createStartContract(); + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), + useRuleFormDispatch: jest.fn(), +})); + +jest.mock('./rule_actions_system_actions_item', () => ({ + RuleActionsSystemActionsItem: ({ action, producerId }: RuleActionsItemProps) => ( +
+ RuleActionsSystemActionsItem +
+ {action.id} producerId: {producerId} +
+
+ ), +})); + +jest.mock('./rule_actions_item', () => ({ + RuleActionsItem: ({ action, producerId }: RuleActionsItemProps) => ( +
+ RuleActionsItem +
+ {action.id} producerId: {producerId} +
+
+ ), +})); + +jest.mock('./rule_actions_connectors_modal', () => ({ + RuleActionsConnectorsModal: ({ + onSelectConnector, + }: { + onSelectConnector: (connector: ActionConnector) => void; + }) => ( +
+ RuleActionsConnectorsModal + +
+ ), +})); + +jest.mock('uuid', () => ({ + v4: jest.fn().mockReturnValue('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'), +})); + +jest.mock('../../common/hooks', () => ({ + useLoadConnectors: jest.fn(), + useLoadConnectorTypes: jest.fn(), + useLoadRuleTypeAadTemplateField: jest.fn(), +})); + +const mockValidate = jest.fn().mockResolvedValue({ + errors: {}, +}); + +const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); +const { useLoadConnectors, useLoadConnectorTypes, useLoadRuleTypeAadTemplateField } = + jest.requireMock('../../common/hooks'); + +const mockConnectors = [getConnector('1')]; +const mockConnectorTypes = [ + getActionType('1'), + getActionType('2'), + getActionType('3', { isSystemActionType: true }), +]; + +const mockActions = [getAction('1'), getAction('2')]; +const mockSystemActions = [getSystemAction('3')]; const mockOnChange = jest.fn(); -describe('Rule actions', () => { +describe('ruleActions', () => { + beforeEach(() => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + validateParams: mockValidate, + }) + ); + actionTypeRegistry.register( + getActionTypeModel('2', { + id: 'actionType-2', + validateParams: mockValidate, + }) + ); + + useLoadConnectors.mockReturnValue({ + data: mockConnectors, + isInitialLoading: false, + }); + useLoadConnectorTypes.mockReturnValue({ + data: mockConnectorTypes, + isInitialLoading: false, + }); + useLoadRuleTypeAadTemplateField.mockReturnValue({ + data: {}, + isInitialLoading: false, + }); + useRuleFormState.mockReturnValue({ + plugins: { + http, + actionTypeRegistry, + }, + formData: { + actions: [...mockActions, ...mockSystemActions], + consumer: 'stackAlerts', + }, + selectedRuleType: { + id: 'selectedRuleTypeId', + defaultActionGroupId: 'test', + producer: 'stackAlerts', + }, + connectors: mockConnectors, + connectorTypes: mockConnectorTypes, + aadTemplateFields: [], + }); + useRuleFormDispatch.mockReturnValue(mockOnChange); + }); + afterEach(() => { - jest.resetAllMocks(); + jest.clearAllMocks(); }); - test('Renders correctly', () => { - render(); + test('renders correctly', () => { + render(); expect(screen.getByTestId('ruleActions')).toBeInTheDocument(); + expect(screen.getByTestId('ruleActionsAddActionButton')).toBeInTheDocument(); + expect(screen.queryByText('RuleActionsConnectorsModal')).not.toBeInTheDocument(); + }); + + test('renders actions correctly', () => { + render(); + + expect(screen.getAllByText('RuleActionsItem').length).toEqual(2); + expect(screen.getAllByText('RuleActionsSystemActionsItem').length).toEqual(1); + }); + + test('should show no actions if none are selected', () => { + useRuleFormState.mockReturnValue({ + plugins: { + http, + }, + formData: { + actions: [], + consumer: 'stackAlerts', + }, + selectedRuleType: { + id: 'selectedRuleTypeId', + defaultActionGroupId: 'test', + producer: 'stackAlerts', + }, + connectors: mockConnectors, + connectorTypes: mockConnectorTypes, + aadTemplateFields: [], + }); + + render(); + expect(screen.queryAllByText('RuleActionsItem').length).toEqual(0); + expect(screen.queryAllByText('RuleActionsSystemActionsItem').length).toEqual(0); + }); + + test('should be able to open and close the connector modal', async () => { + render(); + + await userEvent.click(screen.getByTestId('ruleActionsAddActionButton')); + expect(screen.getByText('RuleActionsConnectorsModal')).toBeInTheDocument(); + }); + + test('should call onSelectConnector with the correct parameters', async () => { + render(); + + await userEvent.click(screen.getByTestId('ruleActionsAddActionButton')); + expect(screen.getByText('RuleActionsConnectorsModal')).toBeInTheDocument(); + + await userEvent.click(screen.getByText('select connector')); + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { + actionTypeId: 'actionType-1', + frequency: { notifyWhen: 'onActionGroupChange', summary: false, throttle: null }, + group: 'test', + id: 'connector-1', + params: {}, + uuid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', + }, + type: 'addAction', + }); + + expect(screen.queryByText('RuleActionsConnectorsModal')).not.toBeInTheDocument(); + }); + + test('should use the rule producer ID if it is not a multi-consumer rule', async () => { + render(); + + expect(await screen.findByText('action-1 producerId: stackAlerts')).toBeInTheDocument(); + expect(await screen.findByText('action-1 producerId: stackAlerts')).toBeInTheDocument(); + expect(await screen.findByText('system-action-3 producerId: stackAlerts')).toBeInTheDocument(); }); - test('Calls onChange when button is click', () => { - render(); + test('should use the rules consumer if the rule is a multi-consumer rule', async () => { + useRuleFormState.mockReturnValue({ + plugins: { + http, + }, + formData: { + actions: [...mockActions, ...mockSystemActions], + consumer: 'logs', + }, + selectedRuleType: { + id: 'observability.rules.custom_threshold', + defaultActionGroupId: 'test', + producer: 'stackAlerts', + }, + connectors: mockConnectors, + connectorTypes: [ + getActionType('1'), + getActionType('2'), + getActionType('3', { isSystemActionType: true }), + ], + aadTemplateFields: [], + }); - fireEvent.click(screen.getByTestId('ruleActionsAddActionButton')); + render(); - expect(mockOnChange).toHaveBeenCalled(); + expect(await screen.findByText('action-1 producerId: logs')).toBeInTheDocument(); + expect(await screen.findByText('action-1 producerId: logs')).toBeInTheDocument(); + expect(await screen.findByText('system-action-3 producerId: logs')).toBeInTheDocument(); }); }); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx index 74b8c531b428..b9eb28025205 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions.tsx @@ -7,26 +7,121 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React from 'react'; -import { EuiButton } from '@elastic/eui'; +import React, { useCallback, useMemo, useState } from 'react'; +import { EuiButton, EuiSpacer, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { v4 as uuidv4 } from 'uuid'; +import { RuleSystemAction } from '@kbn/alerting-types'; import { ADD_ACTION_TEXT } from '../translations'; +import { RuleActionsConnectorsModal } from './rule_actions_connectors_modal'; +import { useRuleFormDispatch, useRuleFormState } from '../hooks'; +import { ActionConnector, RuleAction, RuleFormParamsErrors } from '../../common/types'; +import { DEFAULT_FREQUENCY, MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; +import { RuleActionsItem } from './rule_actions_item'; +import { RuleActionsSystemActionsItem } from './rule_actions_system_actions_item'; -export interface RuleActionsProps { - onClick: () => void; -} +export const RuleActions = () => { + const [isConnectorModalOpen, setIsConnectorModalOpen] = useState(false); + + const { + formData: { actions, consumer }, + plugins: { actionTypeRegistry }, + multiConsumerSelection, + selectedRuleType, + connectorTypes, + } = useRuleFormState(); + + const dispatch = useRuleFormDispatch(); + + const onModalOpen = useCallback(() => { + setIsConnectorModalOpen(true); + }, []); + + const onModalClose = useCallback(() => { + setIsConnectorModalOpen(false); + }, []); + + const onSelectConnector = useCallback( + async (connector: ActionConnector) => { + const { id, actionTypeId } = connector; + const uuid = uuidv4(); + const params = {}; + + dispatch({ + type: 'addAction', + payload: { + id, + actionTypeId, + uuid, + params, + group: selectedRuleType.defaultActionGroupId, + frequency: DEFAULT_FREQUENCY, + }, + }); + + const res: { errors: RuleFormParamsErrors } = await actionTypeRegistry + .get(actionTypeId) + ?.validateParams(params); + + dispatch({ + type: 'setActionParamsError', + payload: { + uuid, + errors: res.errors, + }, + }); + + onModalClose(); + }, + [dispatch, onModalClose, selectedRuleType, actionTypeRegistry] + ); + + const producerId = useMemo(() => { + if (MULTI_CONSUMER_RULE_TYPE_IDS.includes(selectedRuleType.id)) { + return multiConsumerSelection || consumer; + } + return selectedRuleType.producer; + }, [consumer, multiConsumerSelection, selectedRuleType]); -export const RuleActions = (props: RuleActionsProps) => { - const { onClick } = props; return ( -
+ <> + + {actions.map((action, index) => { + const isSystemAction = connectorTypes.some((connectorType) => { + return connectorType.id === action.actionTypeId && connectorType.isSystemActionType; + }); + + return ( + + {isSystemAction && ( + + )} + {!isSystemAction && ( + + )} + + ); + })} + + {ADD_ACTION_TEXT} -
+ {isConnectorModalOpen && ( + + )} + ); }; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.test.tsx new file mode 100644 index 000000000000..d3ef68206cfa --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.test.tsx @@ -0,0 +1,183 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { httpServiceMock } from '@kbn/core/public/mocks'; +import { RuleActionsAlertsFilter } from './rule_actions_alerts_filter'; +import type { AlertsSearchBarProps } from '../../alerts_search_bar'; +import { FilterStateStore } from '@kbn/es-query'; +import { getAction } from '../../common/test_utils/actions_test_utils'; +import userEvent from '@testing-library/user-event'; + +const http = httpServiceMock.createStartContract(); + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), +})); + +jest.mock('../../alerts_search_bar', () => ({ + AlertsSearchBar: ({ onFiltersUpdated, onQueryChange, onQuerySubmit }: AlertsSearchBarProps) => ( +
+ AlertsSearchBar + + + +
+ ), +})); + +const { useRuleFormState } = jest.requireMock('../hooks'); + +const mockOnChange = jest.fn(); + +describe('ruleActionsAlertsFilter', () => { + beforeEach(() => { + useRuleFormState.mockReturnValue({ + plugins: { + http, + notifications: { + toasts: {}, + }, + unifiedSearch: { + ui: { + SearchBar: {}, + }, + }, + dataViews: {}, + }, + formData: { + actions: [], + consumer: 'stackAlerts', + }, + selectedRuleType: { + id: 'selectedRuleTypeId', + defaultActionGroupId: 'test', + producer: 'stackAlerts', + }, + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('should render correctly', () => { + render( + + ); + + expect(screen.getByTestId('alertsFilterQueryToggle')).toBeInTheDocument(); + }); + + test('should allow for toggling on of query', async () => { + render( + + ); + + await userEvent.click(screen.getByTestId('alertsFilterQueryToggle')); + + expect(mockOnChange).toHaveBeenLastCalledWith({ filters: [], kql: '' }); + }); + + test('should allow for toggling off of query', async () => { + render( + + ); + + await userEvent.click(screen.getByTestId('alertsFilterQueryToggle')); + + expect(mockOnChange).toHaveBeenLastCalledWith(undefined); + }); + + test('should allow for changing query', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Update Filter')); + expect(mockOnChange).toHaveBeenLastCalledWith({ + filters: [{ $state: { store: 'appState' }, meta: {} }], + kql: 'test', + }); + await userEvent.click(screen.getByText('Update Query')); + expect(mockOnChange).toHaveBeenLastCalledWith({ + filters: [{ $state: { store: 'appState' }, meta: {} }], + kql: 'onQueryChange', + }); + await userEvent.click(screen.getByText('Submit Query')); + expect(mockOnChange).toHaveBeenLastCalledWith({ + filters: [{ $state: { store: 'appState' }, meta: {} }], + kql: 'onQuerySubmit', + }); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_alerts_filter_query.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.tsx similarity index 56% rename from x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_alerts_filter_query.tsx rename to packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.tsx index 0abcce240b17..646d1b359969 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_alerts_filter_query.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter.tsx @@ -1,35 +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. + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useState, useCallback, useMemo, useEffect } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { ValidFeatureId } from '@kbn/rule-data-utils'; import { Filter } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; import { EuiSwitch, EuiSpacer } from '@elastic/eui'; -import { AlertsFilter } from '@kbn/alerting-plugin/common'; +import type { AlertsFilter } from '@kbn/alerting-types'; import deepEqual from 'fast-deep-equal'; -import { AlertsSearchBar, AlertsSearchBarProps } from '../alerts_search_bar'; +import { useRuleFormState } from '../hooks'; +import { RuleAction } from '../../common'; +import { RuleFormPlugins } from '../types'; +import { AlertsSearchBar, AlertsSearchBarProps } from '../../alerts_search_bar'; -interface ActionAlertsFilterQueryProps { - state?: AlertsFilter['query']; +const DEFAULT_QUERY = { kql: '', filters: [] }; + +export interface RuleActionsAlertsFilterProps { + action: RuleAction; onChange: (update?: AlertsFilter['query']) => void; appName: string; featureIds: ValidFeatureId[]; ruleTypeId?: string; + plugins?: { + http: RuleFormPlugins['http']; + notifications: RuleFormPlugins['notifications']; + unifiedSearch: RuleFormPlugins['unifiedSearch']; + dataViews: RuleFormPlugins['dataViews']; + }; } -export const ActionAlertsFilterQuery: React.FC = ({ - state, +export const RuleActionsAlertsFilter = ({ + action, onChange, appName, featureIds, ruleTypeId, -}) => { - const [query, setQuery] = useState(state ?? { kql: '', filters: [] }); + plugins: propsPlugins, +}: RuleActionsAlertsFilterProps) => { + const { plugins } = useRuleFormState(); + const { + http, + notifications: { toasts }, + unifiedSearch, + dataViews, + } = propsPlugins || plugins; + + const [query, setQuery] = useState(action.alertsFilter?.query ?? DEFAULT_QUERY); + + const state = useMemo(() => { + return action.alertsFilter?.query; + }, [action]); const queryEnabled = useMemo(() => Boolean(state), [state]); @@ -66,7 +92,7 @@ export const ActionAlertsFilterQuery: React.FC = ( <> = ( <> = ( showDatePicker={false} showSubmitButton={false} placeholder={i18n.translate( - 'xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryPlaceholder', + 'alertsUIShared.ruleActionsAlertsFilter.ActionAlertsFilterQueryPlaceholder', { defaultMessage: 'Filter alerts using KQL syntax', } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.test.tsx index 056b342e8af0..27aa3ded7236 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe.test.tsx @@ -14,12 +14,13 @@ import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import { RuleActionsAlertsFilterTimeframe } from './rule_actions_alerts_filter_timeframe'; import { AlertsFilterTimeframe } from '@kbn/alerting-types'; +import { getAction } from '../../common/test_utils/actions_test_utils'; describe('ruleActionsAlertsFilterTimeframe', () => { async function setup(timeframe?: AlertsFilterTimeframe) { const wrapper = mountWithIntl( void; } @@ -76,29 +77,30 @@ const useTimeFormat = (settings: SettingsStart) => { }; export const RuleActionsAlertsFilterTimeframe: React.FC = ({ - state, + action, settings, onChange, }) => { + const actionTimeFrame = action.alertsFilter?.timeframe; const timeFormat = useTimeFormat(settings); const [timeframe, setTimeframe] = useTimeframe({ - initialTimeframe: state, + initialTimeframe: actionTimeFrame, settings, }); const [selectedTimezone, setSelectedTimezone] = useState([{ label: timeframe.timezone }]); - const timeframeEnabled = useMemo(() => Boolean(state), [state]); + const timeframeEnabled = useMemo(() => Boolean(actionTimeFrame), [actionTimeFrame]); const weekdayOptions = useSortedWeekdayOptions(settings); useEffect(() => { const nextState = timeframeEnabled ? timeframe : undefined; - if (!deepEqual(state, nextState)) onChange(nextState); - }, [timeframeEnabled, timeframe, state, onChange]); + if (!deepEqual(actionTimeFrame, nextState)) onChange(nextState); + }, [timeframeEnabled, timeframe, actionTimeFrame, onChange]); const toggleTimeframe = useCallback( - () => onChange(state ? undefined : timeframe), - [state, timeframe, onChange] + () => onChange(actionTimeFrame ? undefined : timeframe), + [actionTimeFrame, timeframe, onChange] ); const updateTimeframe = useCallback( (update: Partial) => { diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.test.tsx new file mode 100644 index 000000000000..264e2c557f7a --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.test.tsx @@ -0,0 +1,322 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen, within } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { RuleActionsConnectorsModal } from './rule_actions_connectors_modal'; +import { ActionConnector, ActionTypeModel } from '../../common'; +import { ActionType } from '@kbn/actions-types'; +import { TypeRegistry } from '../../common/type_registry'; +import { + getActionType, + getActionTypeModel, + getConnector, +} from '../../common/test_utils/actions_test_utils'; + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), + useRuleFormDispatch: jest.fn(), +})); + +const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); + +const mockConnectors: ActionConnector[] = [getConnector('1'), getConnector('2')]; + +const mockActionTypes: ActionType[] = [getActionType('1'), getActionType('2')]; + +const mockOnClose = jest.fn(); + +const mockOnSelectConnector = jest.fn(); + +const mockOnChange = jest.fn(); + +describe('ruleActionsConnectorsModal', () => { + beforeEach(() => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register(getActionTypeModel('2', { id: 'actionType-2' })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + aadTemplateFields: [], + }); + useRuleFormDispatch.mockReturnValue(mockOnChange); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('renders correctly', () => { + render( + + ); + expect(screen.getByTestId('ruleActionsConnectorsModal')); + }); + + test('should render connectors and filters', () => { + render( + + ); + + expect(screen.getByText('connector-1')).toBeInTheDocument(); + expect(screen.getByText('connector-2')).toBeInTheDocument(); + + expect(screen.getByTestId('ruleActionsConnectorsModalSearch')).toBeInTheDocument(); + expect(screen.getAllByTestId('ruleActionsConnectorsModalFilterButton').length).toEqual(3); + + const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); + expect(within(filterButtonGroup).getByText('actionType: 1')).toBeInTheDocument(); + expect(within(filterButtonGroup).getByText('actionType: 2')).toBeInTheDocument(); + expect(within(filterButtonGroup).getByText('All')).toBeInTheDocument(); + }); + + test('should allow for searching of connectors', async () => { + render( + + ); + + // Type first connector + await userEvent.type(screen.getByTestId('ruleActionsConnectorsModalSearch'), 'connector-1'); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(1); + expect(screen.getByText('connector-1')).toBeInTheDocument(); + + // Clear + await userEvent.clear(screen.getByTestId('ruleActionsConnectorsModalSearch')); + + // Type second connector + await userEvent.type(screen.getByTestId('ruleActionsConnectorsModalSearch'), 'actionType: 2'); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(1); + expect(screen.getByText('connector-2')).toBeInTheDocument(); + + // Clear + await userEvent.clear(screen.getByTestId('ruleActionsConnectorsModalSearch')); + + // Type a connector that doesn't exist + await userEvent.type(screen.getByTestId('ruleActionsConnectorsModalSearch'), 'doesntexist'); + expect(screen.getByTestId('ruleActionsConnectorsModalEmpty')).toBeInTheDocument(); + + // Clear + await userEvent.click(screen.getByTestId('ruleActionsConnectorsModalClearFiltersButton')); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(2); + }); + + test('should allow for filtering of connectors', async () => { + render( + + ); + + const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); + + await userEvent.click(within(filterButtonGroup).getByText('actionType: 1')); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(1); + expect(screen.getByText('connector-1')).toBeInTheDocument(); + + await userEvent.click(within(filterButtonGroup).getByText('actionType: 2')); + expect(screen.getByText('connector-2')).toBeInTheDocument(); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(1); + + await userEvent.click(within(filterButtonGroup).getByText('All')); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(2); + }); + + test('should call onSelectConnector when connector is clicked', async () => { + render( + + ); + + await userEvent.click(screen.getByText('connector-1')); + expect(mockOnSelectConnector).toHaveBeenLastCalledWith({ + actionTypeId: 'actionType-1', + config: { config: 'config-1' }, + id: 'connector-1', + isDeprecated: false, + isPreconfigured: false, + isSystemAction: false, + name: 'connector-1', + secrets: { secret: 'secret' }, + }); + + await userEvent.click(screen.getByText('connector-2')); + expect(mockOnSelectConnector).toHaveBeenLastCalledWith({ + actionTypeId: 'actionType-2', + config: { config: 'config-2' }, + id: 'connector-2', + isDeprecated: false, + isPreconfigured: false, + isSystemAction: false, + name: 'connector-2', + secrets: { secret: 'secret' }, + }); + }); + + test('should not render connector if action type doesnt exist', () => { + render( + + ); + + expect(screen.queryByText('connector2')).not.toBeInTheDocument(); + }); + + test('should not render connector if hideInUi is true', () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register(getActionTypeModel('2', { id: 'actionType-2', hideInUi: true })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + + expect(screen.queryByText('connector2')).not.toBeInTheDocument(); + }); + + test('should not render connector if actionsParamsField doesnt exist', () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register( + getActionTypeModel('2', { + id: 'actionType-2', + actionParamsFields: null as unknown as React.LazyExoticComponent, + }) + ); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + + expect(screen.queryByText('connector-2')).not.toBeInTheDocument(); + }); + + test('should not render connector if the action type is not enabled', () => { + const actionTypeRegistry = new TypeRegistry(); + + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register(getActionTypeModel('2', { id: 'actionType-2' })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: [getActionType('1'), getActionType('2', { enabledInConfig: false })], + }); + + render( + + ); + + expect(screen.queryByText('connector-2')).not.toBeInTheDocument(); + }); + + test('should render connector if the action is not enabled but its a preconfigured connector', () => { + const actionTypeRegistry = new TypeRegistry(); + + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register(getActionTypeModel('2', { id: 'actionType-2' })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: [getConnector('1'), getConnector('2', { isPreconfigured: true })], + connectorTypes: [getActionType('1'), getActionType('2', { enabledInConfig: false })], + }); + + render( + + ); + + expect(screen.getByText('connector-2')).toBeInTheDocument(); + }); + + test('should disable connector if it fails license check', () => { + const actionTypeRegistry = new TypeRegistry(); + + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register(getActionTypeModel('2', { id: 'actionType-2' })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: [getActionType('1'), getActionType('2', { enabledInLicense: false })], + }); + + render( + + ); + + expect(screen.getByText('connector-2')).toBeDisabled(); + }); + + test('should disable connector if its a selected system action', () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + actionTypeRegistry.register( + getActionTypeModel('2', { isSystemActionType: true, id: 'actionType-2' }) + ); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [{ actionTypeId: 'actionType-2' }], + }, + connectors: mockConnectors, + connectorTypes: [getActionType('1'), getActionType('2', { isSystemActionType: true })], + }); + + render( + + ); + + expect(screen.getByText('connector-2')).toBeDisabled(); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.tsx new file mode 100644 index 000000000000..9c3dbcf15e36 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_connectors_modal.tsx @@ -0,0 +1,348 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { useState, useCallback, useMemo, Suspense } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiModal, + EuiModalHeader, + EuiFieldSearch, + EuiFacetButton, + EuiModalBody, + EuiHorizontalRule, + EuiModalHeaderTitle, + useEuiTheme, + EuiEmptyPrompt, + EuiFacetGroup, + EuiCard, + EuiIcon, + EuiText, + EuiSpacer, + useCurrentEuiBreakpoint, + EuiButton, + EuiLoadingSpinner, + EuiToolTip, +} from '@elastic/eui'; +import { ActionConnector } from '../../common'; +import { useRuleFormState } from '../hooks'; +import { + ACTION_TYPE_MODAL_EMPTY_TEXT, + ACTION_TYPE_MODAL_EMPTY_TITLE, + ACTION_TYPE_MODAL_FILTER_ALL, + ACTION_TYPE_MODAL_TITLE, + MODAL_SEARCH_CLEAR_FILTERS_TEXT, + MODAL_SEARCH_PLACEHOLDER, +} from '../translations'; +import { checkActionFormActionTypeEnabled } from '../utils/check_action_type_enabled'; + +type ConnectorsMap = Record; + +export interface RuleActionsConnectorsModalProps { + onClose: () => void; + onSelectConnector: (connector: ActionConnector) => void; +} + +export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProps) => { + const { onClose, onSelectConnector } = props; + + const [searchValue, setSearchValue] = useState(''); + const [selectedConnectorType, setSelectedConnectorType] = useState('all'); + + const { euiTheme } = useEuiTheme(); + const currentBreakpoint = useCurrentEuiBreakpoint() ?? 'm'; + const isFullscreenPortrait = ['s', 'xs'].includes(currentBreakpoint); + + const { + plugins: { actionTypeRegistry }, + formData: { actions }, + connectors, + connectorTypes, + } = useRuleFormState(); + + const preconfiguredConnectors = useMemo(() => { + return connectors.filter((connector) => connector.isPreconfigured); + }, [connectors]); + + const availableConnectors = useMemo(() => { + return connectors.filter(({ actionTypeId }) => { + const actionType = connectorTypes.find(({ id }) => id === actionTypeId); + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + + if (!actionType) { + return false; + } + if (actionTypeModel.hideInUi) { + return false; + } + if (!actionTypeModel.actionParamsFields) { + return false; + } + + const checkEnabledResult = checkActionFormActionTypeEnabled( + actionType, + preconfiguredConnectors + ); + + if (!actionType.enabledInConfig && !checkEnabledResult.isEnabled) { + return false; + } + return true; + }); + }, [connectors, connectorTypes, preconfiguredConnectors, actionTypeRegistry]); + + const onSearchChange = useCallback((e: React.ChangeEvent) => { + setSearchValue(e.target.value); + }, []); + + const onConnectorOptionSelect = useCallback( + (id: string) => () => { + setSelectedConnectorType((prev) => { + if (prev === id) { + return ''; + } + return id; + }); + }, + [] + ); + + const onClearFilters = useCallback(() => { + setSearchValue(''); + setSelectedConnectorType('all'); + }, []); + + const connectorsMap: ConnectorsMap | null = useMemo(() => { + return availableConnectors.reduce((result, { actionTypeId }) => { + if (result[actionTypeId]) { + result[actionTypeId].total += 1; + } else { + result[actionTypeId] = { + actionTypeId, + total: 1, + name: connectorTypes.find(({ id }) => actionTypeId === id)?.name || '', + }; + } + return result; + }, {}); + }, [availableConnectors, connectorTypes]); + + const filteredConnectors = useMemo(() => { + return availableConnectors + .filter(({ actionTypeId }) => { + if (selectedConnectorType === 'all' || selectedConnectorType === '') { + return true; + } + if (selectedConnectorType === actionTypeId) { + return true; + } + return false; + }) + .filter(({ actionTypeId, name }) => { + const trimmedSearchValue = searchValue.trim().toLocaleLowerCase(); + if (trimmedSearchValue === '') { + return true; + } + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const actionType = connectorTypes.find(({ id }) => id === actionTypeId); + const textSearchTargets = [ + name.toLocaleLowerCase(), + actionTypeModel.selectMessage?.toLocaleLowerCase(), + actionTypeModel.actionTypeTitle?.toLocaleLowerCase(), + actionType?.name?.toLocaleLowerCase(), + ]; + return textSearchTargets.some((text) => text?.includes(trimmedSearchValue)); + }); + }, [availableConnectors, selectedConnectorType, searchValue, connectorTypes, actionTypeRegistry]); + + const connectorFacetButtons = useMemo(() => { + return ( + + + {ACTION_TYPE_MODAL_FILTER_ALL} + + {Object.values(connectorsMap) + .sort((a, b) => a.name.localeCompare(b.name)) + .map(({ actionTypeId, name, total }) => { + return ( + + {name} + + ); + })} + + ); + }, [availableConnectors, connectorsMap, selectedConnectorType, onConnectorOptionSelect]); + + const connectorCards = useMemo(() => { + if (!filteredConnectors.length) { + return ( + {ACTION_TYPE_MODAL_EMPTY_TITLE}} + body={ + +

{ACTION_TYPE_MODAL_EMPTY_TEXT}

+
+ } + actions={ + + {MODAL_SEARCH_CLEAR_FILTERS_TEXT} + + } + /> + ); + } + return ( + + {filteredConnectors.map((connector) => { + const { id, actionTypeId, name } = connector; + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const actionType = connectorTypes.find((item) => item.id === actionTypeId); + + if (!actionType) { + return null; + } + + const checkEnabledResult = checkActionFormActionTypeEnabled( + actionType, + preconfiguredConnectors + ); + + const isSystemActionsSelected = Boolean( + actionTypeModel.isSystemActionType && + actions.find((action) => action.actionTypeId === actionTypeModel.id) + ); + + const isDisabled = !checkEnabledResult.isEnabled || isSystemActionsSelected; + + const connectorCard = ( + + }> + + +
+ } + title={name} + description={ + <> + {actionTypeModel.selectMessage} + + + {actionType?.name} + + + } + onClick={() => onSelectConnector(connector)} + /> + ); + + return ( + + {checkEnabledResult.isEnabled && connectorCard} + {!checkEnabledResult.isEnabled && ( + + {connectorCard} + + )} + + ); + })} + + ); + }, [ + actions, + preconfiguredConnectors, + filteredConnectors, + actionTypeRegistry, + connectorTypes, + onSelectConnector, + onClearFilters, + ]); + + const responseiveHeight = isFullscreenPortrait ? 'initial' : '80vh'; + const responsiveOverflow = isFullscreenPortrait ? 'auto' : 'hidden'; + + return ( + + + {ACTION_TYPE_MODAL_TITLE} + + + + + + + + + + + + + + {connectorFacetButtons} + + {connectorCards} + + + + + + + ); +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.test.tsx new file mode 100644 index 000000000000..a36ad8979aea --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.test.tsx @@ -0,0 +1,385 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { RuleType } from '@kbn/alerting-types'; +import { ActionTypeModel, RuleTypeModel } from '../../common'; +import { TypeRegistry } from '../../common/type_registry'; +import { + getAction, + getActionType, + getActionTypeModel, + getConnector, +} from '../../common/test_utils/actions_test_utils'; +import { RuleActionsItem } from './rule_actions_item'; +import userEvent from '@testing-library/user-event'; + +import { RuleActionsSettingsProps } from './rule_actions_settings'; +import { RuleActionsMessageProps } from './rule_actions_message'; + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), + useRuleFormDispatch: jest.fn(), +})); + +jest.mock('./rule_actions_settings', () => ({ + RuleActionsSettings: ({ + onNotifyWhenChange, + onActionGroupChange, + onAlertsFilterChange, + onTimeframeChange, + }: RuleActionsSettingsProps) => ( +
+ ruleActionsSettings + + + + +
+ ), +})); + +jest.mock('./rule_actions_message', () => ({ + RuleActionsMessage: ({ onParamsChange, templateFields }: RuleActionsMessageProps) => ( +
+ ruleActionsMessage + +
+ ), +})); + +jest.mock('../validation/validate_params_for_warnings', () => ({ + validateParamsForWarnings: jest.fn(), +})); + +jest.mock('../../action_variables/get_available_action_variables', () => ({ + getAvailableActionVariables: jest.fn(), +})); + +const ruleType = { + id: '.es-query', + name: 'Test', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + { + id: 'recovered', + name: 'Recovered', + }, + ], + defaultActionGroupId: 'testActionGroup', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { + id: 'recovered', + }, + producer: 'logs', + authorizedConsumers: { + alerting: { read: true, all: true }, + test: { read: true, all: true }, + stackAlerts: { read: true, all: true }, + logs: { read: true, all: true }, + }, + actionVariables: { + params: [], + state: [], + }, + enabledInLicense: true, +} as unknown as RuleType; + +const ruleModel: RuleTypeModel = { + id: '.es-query', + description: 'Sample rule type model', + iconClass: 'sampleIconClass', + documentationUrl: 'testurl', + validate: (params, isServerless) => ({ errors: {} }), + ruleParamsExpression: () =>
Expression
, + defaultSummaryMessage: 'Sample default summary message', + defaultActionMessage: 'Sample default action message', + defaultRecoveryMessage: 'Sample default recovery message', + requiresAppContext: false, +}; + +const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); + +const { validateParamsForWarnings } = jest.requireMock( + '../validation/validate_params_for_warnings' +); + +const { getAvailableActionVariables } = jest.requireMock( + '../../action_variables/get_available_action_variables' +); + +const mockConnectors = [getConnector('1', { id: 'action-1' })]; + +const mockActionTypes = [getActionType('1')]; + +const mockOnChange = jest.fn(); + +const mockValidate = jest.fn().mockResolvedValue({ + errors: {}, +}); + +describe('ruleActionsItem', () => { + beforeEach(() => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + defaultRecoveredActionParams: { recoveredParamKey: 'recoveredParamValue' }, + defaultActionParams: { actionParamKey: 'actionParamValue' }, + validateParams: mockValidate, + }) + ); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + http: { + basePath: { + publicBaseUrl: 'publicUrl', + }, + }, + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + aadTemplateFields: [], + actionsParamsErrors: {}, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + }); + useRuleFormDispatch.mockReturnValue(mockOnChange); + validateParamsForWarnings.mockReturnValue(null); + getAvailableActionVariables.mockReturnValue(['mockActionVariable']); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('should render correctly', () => { + render( + + ); + + expect(screen.getByTestId('ruleActionsItem')).toBeInTheDocument(); + expect(screen.queryByText('ruleActionsSettings')).not.toBeInTheDocument(); + expect(screen.getByText('ruleActionsMessage')).toBeInTheDocument(); + }); + + test('should allow for toggling between setting and message', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Message')); + + expect(screen.getByText('ruleActionsMessage')).toBeInTheDocument(); + expect(screen.queryByText('ruleActionsSettings')).not.toBeInTheDocument(); + + await userEvent.click(screen.getByText('Settings')); + + expect(screen.getByText('ruleActionsSettings')).toBeInTheDocument(); + expect(screen.queryByText('ruleActionsMessage')).not.toBeInTheDocument(); + }); + + test('should allow notify when to be changed', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Settings')); + + await userEvent.click(screen.getByText('onNotifyWhenChange')); + + expect(mockOnChange).toHaveBeenCalledTimes(3); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { uuid: 'uuid-action-1', value: { recoveredParamKey: 'recoveredParamValue' } }, + type: 'setActionParams', + }); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { + key: 'frequency', + uuid: 'uuid-action-1', + value: { notifyWhen: 'onThrottleInterval', summary: true, throttle: '5m' }, + }, + type: 'setActionProperty', + }); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { errors: {}, uuid: 'uuid-action-1' }, + type: 'setActionParamsError', + }); + + expect(getAvailableActionVariables).toHaveBeenCalledWith( + { params: [], state: [] }, + undefined, + { + defaultActionMessage: 'Sample default recovery message', + id: 'recovered', + name: 'Recovered', + omitMessageVariables: 'all', + }, + true + ); + }); + + test('should allow alerts filter to be changed', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Settings')); + + await userEvent.click(screen.getByText('onAlertsFilterChange')); + + expect(mockOnChange).toHaveBeenCalledTimes(2); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { + key: 'alertsFilter', + uuid: 'uuid-action-1', + value: { query: { filters: [], kql: '' } }, + }, + type: 'setActionProperty', + }); + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { errors: { filterQuery: ['A custom query is required.'] }, uuid: 'uuid-action-1' }, + type: 'setActionError', + }); + }); + + test('should allow timeframe to be changed', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Settings')); + + await userEvent.click(screen.getByText('onTimeframeChange')); + + expect(mockOnChange).toHaveBeenCalledTimes(1); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { + key: 'alertsFilter', + uuid: 'uuid-action-1', + value: { + timeframe: { days: [1, 2, 3], hours: { end: 'now', start: 'now' }, timezone: 'UTC' }, + }, + }, + type: 'setActionProperty', + }); + }); + + test('should allow params to be changed', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Message')); + + await userEvent.click(screen.getByText('onParamsChange')); + + expect(mockOnChange).toHaveBeenCalledTimes(2); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { uuid: 'uuid-action-1', value: { paramsKey: { paramsKey: 'paramsValue' } } }, + type: 'setActionParams', + }); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { errors: {}, uuid: 'uuid-action-1' }, + type: 'setActionParamsError', + }); + }); + + test('should allow action to be deleted', async () => { + render( + + ); + + await userEvent.click(screen.getByText('Settings')); + + await userEvent.click(screen.getByTestId('ruleActionsItemDeleteButton')); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { uuid: 'uuid-action-1' }, + type: 'removeAction', + }); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx new file mode 100644 index 000000000000..b80a79a69cfc --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_item.tsx @@ -0,0 +1,686 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { i18n } from '@kbn/i18n'; +import React, { Suspense, useCallback, useMemo, useState } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiAccordion, + EuiPanel, + EuiButtonIcon, + useEuiTheme, + useEuiBackgroundColor, + EuiIcon, + EuiText, + EuiTabs, + EuiTab, + EuiToolTip, + EuiBadge, + RecursivePartial, + EuiBetaBadge, + EuiEmptyPrompt, +} from '@elastic/eui'; +import { + ActionVariable, + AlertsFilter, + AlertsFilterTimeframe, + RuleAction, + RuleActionFrequency, + RuleActionParam, + RuleActionParams, +} from '@kbn/alerting-types'; +import { isEmpty, some } from 'lodash'; +import { css } from '@emotion/react'; +import { SavedObjectAttribute } from '@kbn/core/types'; +import { useRuleFormDispatch, useRuleFormState } from '../hooks'; +import { + ActionConnector, + ActionTypeModel, + RuleFormParamsErrors, + RuleTypeWithDescription, +} from '../../common/types'; +import { getAvailableActionVariables } from '../../action_variables'; +import { validateAction, validateParamsForWarnings } from '../validation'; + +import { RuleActionsSettings } from './rule_actions_settings'; +import { getSelectedActionGroup } from '../utils'; +import { RuleActionsMessage } from './rule_actions_message'; +import { + ACTION_ERROR_TOOLTIP, + ACTION_UNABLE_TO_LOAD_CONNECTOR_DESCRIPTION, + ACTION_UNABLE_TO_LOAD_CONNECTOR_TITLE, + ACTION_WARNING_TITLE, + TECH_PREVIEW_DESCRIPTION, + TECH_PREVIEW_LABEL, +} from '../translations'; + +const SUMMARY_GROUP_TITLE = i18n.translate('alertsUIShared.ruleActionsItem.summaryGroupTitle', { + defaultMessage: 'Summary of alerts', +}); + +const RUN_WHEN_GROUP_TITLE = (groupName: string) => + i18n.translate('alertsUIShared.ruleActionsItem.runWhenGroupTitle', { + defaultMessage: 'Run when {groupName}', + values: { + groupName, + }, + }); + +const ACTION_TITLE = (connector: ActionConnector) => + i18n.translate('alertsUIShared.ruleActionsItem.existingAlertActionTypeEditTitle', { + defaultMessage: '{actionConnectorName}', + values: { + actionConnectorName: `${connector.name} ${ + connector.isPreconfigured ? '(preconfigured)' : '' + }`, + }, + }); + +const getDefaultParams = ({ + group, + ruleType, + actionTypeModel, +}: { + group: string; + actionTypeModel: ActionTypeModel; + ruleType: RuleTypeWithDescription; +}) => { + if (group === ruleType.recoveryActionGroup.id) { + return actionTypeModel.defaultRecoveredActionParams; + } else { + return actionTypeModel.defaultActionParams; + } +}; + +export interface RuleActionsItemProps { + action: RuleAction; + index: number; + producerId: string; +} + +type ParamsType = RecursivePartial; + +const MESSAGES_TAB = 'messages'; +const SETTINGS_TAB = 'settings'; + +export const RuleActionsItem = (props: RuleActionsItemProps) => { + const { action, index, producerId } = props; + + const { + plugins: { actionTypeRegistry, http }, + actionsParamsErrors = {}, + selectedRuleType, + selectedRuleTypeModel, + connectors, + connectorTypes, + aadTemplateFields, + } = useRuleFormState(); + + const [tab, setTab] = useState(MESSAGES_TAB); + const subdued = useEuiBackgroundColor('subdued'); + const plain = useEuiBackgroundColor('plain'); + const { euiTheme } = useEuiTheme(); + + const [availableActionVariables, setAvailableActionVariables] = useState(() => { + if (!selectedRuleType.actionVariables) { + return []; + } + + const selectedActionGroup = getSelectedActionGroup({ + group: action.group, + ruleType: selectedRuleType, + ruleTypeModel: selectedRuleTypeModel, + }); + + return getAvailableActionVariables( + selectedRuleType.actionVariables, + // TODO: this is always undefined for now, might need to make this a prop later on + undefined, + selectedActionGroup, + !!action.frequency?.summary + ); + }); + + const [useDefaultMessage, setUseDefaultMessage] = useState(false); + + const [storedActionParamsForAadToggle, setStoredActionParamsForAadToggle] = useState< + Record + >({}); + + const [warning, setWarning] = useState(null); + + const [isOpen, setIsOpen] = useState(true); + + const dispatch = useRuleFormDispatch(); + const actionTypeModel = actionTypeRegistry.get(action.actionTypeId); + const actionType = connectorTypes.find(({ id }) => id === action.actionTypeId); + const connector = connectors.find(({ id }) => id === action.id); + + const showActionGroupErrorIcon = useMemo(() => { + const actionParamsError = actionsParamsErrors[action.uuid!] || {}; + return !isOpen && some(actionParamsError, (error) => !isEmpty(error)); + }, [isOpen, action, actionsParamsErrors]); + + const selectedActionGroup = getSelectedActionGroup({ + group: action.group, + ruleType: selectedRuleType, + ruleTypeModel: selectedRuleTypeModel, + }); + + const templateFields = action.useAlertDataForTemplate + ? aadTemplateFields + : availableActionVariables; + + const onDelete = (id: string) => { + dispatch({ type: 'removeAction', payload: { uuid: id } }); + }; + + const validateActionBase = useCallback( + (newAction: RuleAction) => { + const errors = validateAction({ action: newAction }); + dispatch({ + type: 'setActionError', + payload: { + uuid: newAction.uuid!, + errors, + }, + }); + }, + [dispatch] + ); + + const validateActionParams = useCallback( + async (params: RuleActionParam) => { + const res: { errors: RuleFormParamsErrors } = await actionTypeRegistry + .get(action.actionTypeId) + ?.validateParams(params); + + dispatch({ + type: 'setActionParamsError', + payload: { + uuid: action.uuid!, + errors: res.errors, + }, + }); + }, + [actionTypeRegistry, action, dispatch] + ); + + const onStoredActionParamsChange = useCallback( + ( + aadParams: Record, + params: Record + ) => { + if (isEmpty(aadParams) && action.params.subAction) { + setStoredActionParamsForAadToggle(params); + } else { + setStoredActionParamsForAadToggle(aadParams); + } + }, + [action] + ); + + const onAvailableActionVariablesChange = useCallback( + ({ actionGroup, summary: isSummaryAction }: { actionGroup: string; summary?: boolean }) => { + const messageVariables = selectedRuleType.actionVariables; + + if (!messageVariables) { + setAvailableActionVariables([]); + return; + } + + const newSelectedActionGroup = getSelectedActionGroup({ + group: actionGroup, + ruleType: selectedRuleType, + ruleTypeModel: selectedRuleTypeModel, + }); + + setAvailableActionVariables( + getAvailableActionVariables( + messageVariables, + undefined, + newSelectedActionGroup, + !!isSummaryAction + ) + ); + }, + [selectedRuleType, selectedRuleTypeModel] + ); + + const setDefaultParams = useCallback( + (actionGroup: string) => { + const defaultParams = getDefaultParams({ + group: actionGroup, + ruleType: selectedRuleType, + actionTypeModel, + }); + + if (!defaultParams) { + return; + } + const newDefaultParams: ParamsType = {}; + const defaultAADParams: ParamsType = {}; + for (const [key, paramValue] of Object.entries(defaultParams)) { + newDefaultParams[key] = paramValue; + // Collects AAD params by checking if the value is {x}.{y} + if (typeof paramValue !== 'string' || !paramValue.match(/{{.*?}}/g)) { + defaultAADParams[key] = paramValue; + } + } + const newParams = { + ...action.params, + ...newDefaultParams, + }; + dispatch({ + type: 'setActionParams', + payload: { + uuid: action.uuid!, + value: newParams, + }, + }); + validateActionParams(newParams); + onStoredActionParamsChange(defaultAADParams, newParams); + }, + [ + action, + dispatch, + validateActionParams, + selectedRuleType, + actionTypeModel, + onStoredActionParamsChange, + ] + ); + + const onDefaultParamsChange = useCallback( + (actionGroup: string, summary?: boolean) => { + onAvailableActionVariablesChange({ + actionGroup, + summary, + }); + setDefaultParams(actionGroup); + }, + [onAvailableActionVariablesChange, setDefaultParams] + ); + + const onParamsChange = useCallback( + (key: string, value: RuleActionParam) => { + const newParams = { + ...action.params, + [key]: value, + }; + dispatch({ + type: 'setActionParams', + payload: { + uuid: action.uuid!, + value: newParams, + }, + }); + setWarning( + validateParamsForWarnings({ + value, + publicBaseUrl: http.basePath.publicBaseUrl, + actionVariables: availableActionVariables, + }) + ); + validateActionParams(newParams); + onStoredActionParamsChange(storedActionParamsForAadToggle, newParams); + }, + [ + http, + action, + availableActionVariables, + dispatch, + validateActionParams, + onStoredActionParamsChange, + storedActionParamsForAadToggle, + ] + ); + + const onNotifyWhenChange = useCallback( + (frequency: RuleActionFrequency) => { + dispatch({ + type: 'setActionProperty', + payload: { + uuid: action.uuid!, + key: 'frequency', + value: frequency, + }, + }); + if (frequency.summary !== action.frequency?.summary) { + onDefaultParamsChange(action.group, frequency.summary); + } + }, + [action, onDefaultParamsChange, dispatch] + ); + + const onActionGroupChange = useCallback( + (group: string) => { + dispatch({ + type: 'setActionProperty', + payload: { + uuid: action.uuid!, + key: 'group', + value: group, + }, + }); + onDefaultParamsChange(group, action.frequency?.summary); + }, + [action, onDefaultParamsChange, dispatch] + ); + + const onAlertsFilterChange = useCallback( + (query?: AlertsFilter['query']) => { + const newAlertsFilter = { + ...action.alertsFilter, + query, + }; + const newAction = { + ...action, + alertsFilter: newAlertsFilter, + }; + dispatch({ + type: 'setActionProperty', + payload: { + uuid: action.uuid!, + key: 'alertsFilter', + value: newAlertsFilter, + }, + }); + validateActionBase(newAction); + }, + [action, dispatch, validateActionBase] + ); + + const onTimeframeChange = useCallback( + (timeframe?: AlertsFilterTimeframe) => { + dispatch({ + type: 'setActionProperty', + payload: { + uuid: action.uuid!, + key: 'alertsFilter', + value: { + ...action.alertsFilter, + timeframe, + }, + }, + }); + }, + [action, dispatch] + ); + + const onUseAadTemplateFieldsChange = useCallback(() => { + dispatch({ + type: 'setActionProperty', + payload: { + uuid: action.uuid!, + key: 'useAlertDataForTemplate', + value: !!!action.useAlertDataForTemplate, + }, + }); + + const currentActionParams = { ...action.params }; + const newActionParams: RuleActionParams = {}; + for (const key of Object.keys(currentActionParams)) { + newActionParams[key] = storedActionParamsForAadToggle[key] ?? ''; + } + + dispatch({ + type: 'setActionParams', + payload: { + uuid: action.uuid!, + value: newActionParams, + }, + }); + + setStoredActionParamsForAadToggle(currentActionParams); + }, [action, storedActionParamsForAadToggle, dispatch]); + + const accordionContent = useMemo(() => { + if (!connector) { + return null; + } + return ( + + + + setTab(MESSAGES_TAB)}> + Message + + setTab(SETTINGS_TAB)}> + Settings + + + + + {tab === MESSAGES_TAB && ( + + )} + {tab === SETTINGS_TAB && ( + setUseDefaultMessage(true)} + onNotifyWhenChange={onNotifyWhenChange} + onActionGroupChange={onActionGroupChange} + onAlertsFilterChange={onAlertsFilterChange} + onTimeframeChange={onTimeframeChange} + /> + )} + + + ); + }, [ + action, + connector, + producerId, + euiTheme, + plain, + index, + tab, + templateFields, + useDefaultMessage, + warning, + onNotifyWhenChange, + onActionGroupChange, + onAlertsFilterChange, + onTimeframeChange, + onParamsChange, + onUseAadTemplateFieldsChange, + ]); + + const noConnectorContent = useMemo(() => { + return ( + {ACTION_UNABLE_TO_LOAD_CONNECTOR_TITLE}} + body={ACTION_UNABLE_TO_LOAD_CONNECTOR_DESCRIPTION} + /> + ); + }, []); + + const accordionIcon = useMemo(() => { + if (!connector) { + return ( + + + + + + ); + } + + return ( + + {showActionGroupErrorIcon ? ( + + + + ) : ( + + + + )} + + ); + }, [connector, showActionGroupErrorIcon, actionTypeModel]); + + const connectorTitle = useMemo(() => { + const title = connector ? ACTION_TITLE(connector) : actionTypeModel.actionTypeTitle; + return ( + + {title} + + ); + }, [connector, actionTypeModel]); + + const actionTypeTitle = useMemo(() => { + if (!connector || !actionType) { + return null; + } + return ( + + + {actionType.name} + + + ); + }, [connector, actionType]); + + const runWhenTitle = useMemo(() => { + if (!connector) { + return null; + } + if (isOpen) { + return null; + } + if (selectedActionGroup || action.frequency?.summary) { + return ( + + + {action.frequency?.summary + ? SUMMARY_GROUP_TITLE + : RUN_WHEN_GROUP_TITLE(selectedActionGroup!.name.toLocaleLowerCase())} + + + ); + } + }, [connector, isOpen, selectedActionGroup, action]); + + const warningIcon = useMemo(() => { + if (!connector) { + return null; + } + if (isOpen) { + return null; + } + if (warning) { + return ( + + + {ACTION_WARNING_TITLE} + + + ); + } + }, [connector, isOpen, warning]); + + return ( + onDelete(action.uuid!)} + /> + } + buttonContentClassName="eui-fullWidth" + buttonContent={ + + + {accordionIcon} + {connectorTitle} + {actionTypeTitle} + {runWhenTitle} + {warningIcon} + {actionTypeModel.isExperimental && ( + + + + )} + + + } + > + {connector && accordionContent} + {!connector && noConnectorContent} + + ); +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.test.tsx new file mode 100644 index 000000000000..d2c064cba2aa --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.test.tsx @@ -0,0 +1,353 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { lazy } from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import { RuleActionsMessage } from './rule_actions_message'; +import { RuleType } from '@kbn/alerting-types'; +import { ActionParamsProps, ActionTypeModel, RuleTypeModel } from '../../common'; +import { TypeRegistry } from '../../common/type_registry'; +import { + getAction, + getActionType, + getActionTypeModel, + getConnector, + getSystemAction, +} from '../../common/test_utils/actions_test_utils'; +import userEvent from '@testing-library/user-event'; + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), +})); + +const { useRuleFormState } = jest.requireMock('../hooks'); + +const ruleType = { + id: '.es-query', + name: 'Test', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + { + id: 'recovered', + name: 'Recovered', + }, + ], + defaultActionGroupId: 'testActionGroup', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { + id: 'recovered', + }, + producer: 'logs', + authorizedConsumers: { + alerting: { read: true, all: true }, + test: { read: true, all: true }, + stackAlerts: { read: true, all: true }, + logs: { read: true, all: true }, + }, + actionVariables: { + params: [], + state: [], + }, + enabledInLicense: true, +} as unknown as RuleType; + +const ruleModel: RuleTypeModel = { + id: '.es-query', + description: 'Sample rule type model', + iconClass: 'sampleIconClass', + documentationUrl: 'testurl', + validate: (params, isServerless) => ({ errors: {} }), + ruleParamsExpression: () =>
Expression
, + defaultSummaryMessage: 'Sample default summary message', + defaultActionMessage: 'Sample default action message', + defaultRecoveryMessage: 'Sample default recovery message', + requiresAppContext: false, +}; + +const mockOnParamsChange = jest.fn(); + +const mockedActionParamsFields = lazy(async () => ({ + default({ defaultMessage, selectedActionGroupId, errors, editAction }: ActionParamsProps) { + return ( +
+ {defaultMessage &&
{defaultMessage}
} + {selectedActionGroupId && ( +
{selectedActionGroupId}
+ )} +
{JSON.stringify(errors)}
+ +
+ ); + }, +})); + +describe('RuleActionsMessage', () => { + beforeEach(() => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + actionParamsFields: mockedActionParamsFields, + }) + ); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + actionsParamsErrors: {}, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + connectors: [getConnector('1')], + connectorTypes: [getActionType('1')], + aadTemplateFields: [], + }); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + test('should render correctly', async () => { + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByTestId('ruleActionsMessage')).toBeInTheDocument(); + }); + + test('should display warning if it exists', async () => { + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByText('test warning')).toBeInTheDocument(); + }); + + test('should render default action message for normal actions', async () => { + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByText('Sample default action message')).toBeInTheDocument(); + }); + + test('should render default summary message for actions with summaries', async () => { + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByText('Sample default summary message')).toBeInTheDocument(); + }); + + test('should render default recovery message for action recovery group', async () => { + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByText('Sample default recovery message')).toBeInTheDocument(); + }); + + test('should render default summary message for system actions', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + actionParamsFields: mockedActionParamsFields, + }) + ); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + actionsParamsErrors: {}, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + connectors: [getConnector('1')], + connectorTypes: [ + getActionType('1', { + isSystemActionType: true, + id: 'actionTypeModel-1', + }), + ], + aadTemplateFields: [], + }); + + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByText('Sample default summary message')).toBeInTheDocument(); + expect(screen.queryByTestId('selectedActionGroupIdMock')).not.toBeInTheDocument(); + }); + + test('should render action param errors if it exists', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + actionParamsFields: mockedActionParamsFields, + }) + ); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + actionsParamsErrors: { + 'uuid-action-1': { paramsKey: 'error' }, + }, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + connectors: [getConnector('1')], + connectorTypes: [getActionType('1')], + aadTemplateFields: [], + }); + + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + expect(screen.getByText(JSON.stringify({ paramsKey: 'error' }))).toBeInTheDocument(); + }); + + test('should call onParamsChange if the params are edited', async () => { + render( + + ); + + await waitFor(() => { + return expect(screen.getByTestId('actionParamsFieldMock')).toBeInTheDocument(); + }); + + await userEvent.click(screen.getByTestId('editActionMock')); + expect(mockOnParamsChange).toHaveBeenLastCalledWith( + 'paramsKey', + { paramsKey: 'paramsValue' }, + 1 + ); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.tsx new file mode 100644 index 000000000000..e828f0bb22cf --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_message.tsx @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { Suspense, useMemo } from 'react'; +import { + EuiCallOut, + EuiErrorBoundary, + EuiFlexGroup, + EuiFlexItem, + EuiSpacer, + EuiSwitch, +} from '@elastic/eui'; +import { ActionVariable, RuleActionParam } from '@kbn/alerting-types'; +import { useRuleFormState } from '../hooks'; +import { ActionConnector, ActionConnectorMode, RuleAction, RuleUiAction } from '../../common'; +import { getSelectedActionGroup } from '../utils'; +import { ACTION_USE_AAD_TEMPLATE_FIELDS_LABEL } from '../translations'; + +export interface RuleActionsMessageProps { + action: RuleUiAction; + index: number; + templateFields: ActionVariable[]; + useDefaultMessage: boolean; + connector: ActionConnector; + producerId: string; + warning?: string | null; + onParamsChange: (key: string, value: RuleActionParam) => void; + onUseAadTemplateFieldsChange?: () => void; +} + +export const RuleActionsMessage = (props: RuleActionsMessageProps) => { + const { + action, + index, + templateFields, + useDefaultMessage, + connector, + producerId, + warning, + onParamsChange, + onUseAadTemplateFieldsChange, + } = props; + + const { + plugins: { actionTypeRegistry }, + actionsParamsErrors = {}, + selectedRuleType, + selectedRuleTypeModel, + connectorTypes, + showMustacheAutocompleteSwitch, + } = useRuleFormState(); + + const actionTypeModel = actionTypeRegistry.get(action.actionTypeId); + + const ParamsFieldsComponent = actionTypeModel.actionParamsFields; + + const actionsParamsError = actionsParamsErrors[action.uuid!] || {}; + + const isSystemAction = useMemo(() => { + return connectorTypes.some((actionType) => { + return actionType.id === action.actionTypeId && actionType.isSystemActionType; + }); + }, [action, connectorTypes]); + + const selectedActionGroup = useMemo(() => { + if (isSystemAction) { + return; + } + + return getSelectedActionGroup({ + group: (action as RuleAction).group, + ruleType: selectedRuleType, + ruleTypeModel: selectedRuleTypeModel, + }); + }, [isSystemAction, action, selectedRuleType, selectedRuleTypeModel]); + + const defaultMessage = useMemo(() => { + if (isSystemAction) { + return selectedRuleTypeModel.defaultSummaryMessage; + } + + // if action is a summary action, show the default summary message + return (action as RuleAction).frequency?.summary + ? selectedRuleTypeModel.defaultSummaryMessage + : selectedActionGroup?.defaultActionMessage ?? selectedRuleTypeModel.defaultActionMessage; + }, [isSystemAction, action, selectedRuleTypeModel, selectedActionGroup]); + + if (!ParamsFieldsComponent) { + return null; + } + + return ( + + + {showMustacheAutocompleteSwitch && onUseAadTemplateFieldsChange && ( + + + + )} + + + + {warning ? ( + <> + + + + ) : null} + + + + + ); +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.test.tsx index a580f9be4059..368619373923 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.test.tsx @@ -25,9 +25,8 @@ describe('ruleActionsNotifyWhen', () => { frequency={frequency} throttle={frequency.throttle ? Number(frequency.throttle[0]) : null} throttleUnit={frequency.throttle ? frequency.throttle[1] : 'm'} - onNotifyWhenChange={jest.fn()} - onThrottleChange={jest.fn()} - onSummaryChange={jest.fn()} + onChange={jest.fn()} + onUseDefaultMessage={jest.fn()} hasAlertsMappings={hasAlertsMappings} /> ); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx index 6306600d3d2b..d3695ba28a8d 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when.tsx @@ -7,9 +7,15 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useState, useEffect, useCallback, useMemo } from 'react'; +import React, { useState, useCallback, useMemo } from 'react'; import { css } from '@emotion/css'; // We can't use @emotion/react - this component gets used with plugins that use both styled-components and Emotion import { i18n } from '@kbn/i18n'; +import { + RuleNotifyWhenType, + RuleNotifyWhen, + RuleAction, + RuleActionFrequency, +} from '@kbn/alerting-types'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFlexGroup, @@ -29,10 +35,15 @@ import { } from '@elastic/eui'; import { some, filter, map } from 'fp-ts/lib/Option'; import { pipe } from 'fp-ts/lib/pipeable'; -import { RuleNotifyWhenType, RuleNotifyWhen } from '@kbn/alerting-types'; import { DEFAULT_FREQUENCY } from '../constants'; import { getTimeOptions } from '../utils'; -import { RuleAction } from '../../common'; + +const FOR_EACH_ALERT = i18n.translate('alertsUIShared.actiActionsonNotifyWhen.forEachOption', { + defaultMessage: 'For each alert', +}); +const SUMMARY_OF_ALERTS = i18n.translate('alertsUIShared.actiActionsonNotifyWhen.summaryOption', { + defaultMessage: 'Summary of alerts', +}); export interface NotifyWhenSelectOptions { isSummaryOption?: boolean; @@ -46,23 +57,26 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ isForEachAlertOption: true, value: { value: 'onActionGroupChange', - inputDisplay: i18n.translate('alertsUIShared.ruleForm.onActionGroupChange.display', { - defaultMessage: 'On status changes', - }), + inputDisplay: i18n.translate( + 'alertsUIShared.ruleActionsNotifyWhen.onActionGroupChange.display', + { + defaultMessage: 'On status changes', + } + ), 'data-test-subj': 'onActionGroupChange', dropdownDisplay: ( <>

@@ -75,7 +89,7 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ isForEachAlertOption: true, value: { value: 'onActiveAlert', - inputDisplay: i18n.translate('alertsUIShared.ruleForm.onActiveAlert.display', { + inputDisplay: i18n.translate('alertsUIShared.ruleActionsNotifyWhen.onActiveAlert.display', { defaultMessage: 'On check intervals', }), 'data-test-subj': 'onActiveAlert', @@ -84,14 +98,14 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [

@@ -104,23 +118,26 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ isForEachAlertOption: true, value: { value: 'onThrottleInterval', - inputDisplay: i18n.translate('alertsUIShared.ruleForm.onThrottleInterval.display', { - defaultMessage: 'On custom action intervals', - }), + inputDisplay: i18n.translate( + 'alertsUIShared.ruleActionsNotifyWhen.onThrottleInterval.display', + { + defaultMessage: 'On custom action intervals', + } + ), 'data-test-subj': 'onThrottleInterval', dropdownDisplay: ( <>

@@ -130,18 +147,16 @@ export const NOTIFY_WHEN_OPTIONS: NotifyWhenSelectOptions[] = [ }, ]; -interface RuleActionsNotifyWhenProps { +export interface RuleActionsNotifyWhenProps { frequency: RuleAction['frequency']; throttle: number | null; throttleUnit: string; - onNotifyWhenChange: (notifyWhen: RuleNotifyWhenType) => void; - onThrottleChange: (throttle: number | null, throttleUnit: string) => void; - onSummaryChange: (summary: boolean) => void; hasAlertsMappings?: boolean; showMinimumThrottleWarning?: boolean; showMinimumThrottleUnitWarning?: boolean; notifyWhenSelectOptions?: NotifyWhenSelectOptions[]; - defaultNotifyWhenValue?: RuleNotifyWhenType; + onChange: (frequency: RuleActionFrequency) => void; + onUseDefaultMessage: () => void; } export const RuleActionsNotifyWhen = ({ @@ -149,49 +164,26 @@ export const RuleActionsNotifyWhen = ({ frequency = DEFAULT_FREQUENCY, throttle, throttleUnit, - onNotifyWhenChange, - onThrottleChange, - onSummaryChange, showMinimumThrottleWarning, showMinimumThrottleUnitWarning, notifyWhenSelectOptions = NOTIFY_WHEN_OPTIONS, - defaultNotifyWhenValue = DEFAULT_FREQUENCY.notifyWhen, + onChange, + onUseDefaultMessage, }: RuleActionsNotifyWhenProps) => { - const [showCustomThrottleOpts, setShowCustomThrottleOpts] = useState(false); - const [notifyWhenValue, setNotifyWhenValue] = - useState(defaultNotifyWhenValue); - const [summaryMenuOpen, setSummaryMenuOpen] = useState(false); - useEffect(() => { - if (frequency.notifyWhen) { - setNotifyWhenValue(frequency.notifyWhen); - } else { - // If 'notifyWhen' is not set, derive value from existence of throttle value - setNotifyWhenValue(frequency.throttle ? RuleNotifyWhen.THROTTLE : RuleNotifyWhen.ACTIVE); - } - }, [frequency]); - - useEffect(() => { - setShowCustomThrottleOpts(notifyWhenValue === RuleNotifyWhen.THROTTLE); - }, [notifyWhenValue]); + const showCustomThrottleOpts = frequency?.notifyWhen === RuleNotifyWhen.THROTTLE; const onNotifyWhenValueChange = useCallback( (newValue: RuleNotifyWhenType) => { - onNotifyWhenChange(newValue); - setNotifyWhenValue(newValue); - // Calling onNotifyWhenChange and onThrottleChange at the same time interferes with the React state lifecycle - // so wait for onNotifyWhenChange to process before calling onThrottleChange - setTimeout( - () => - onThrottleChange( - newValue === RuleNotifyWhen.THROTTLE ? throttle ?? 1 : null, - throttleUnit - ), - 100 - ); + const newThrottle = newValue === RuleNotifyWhen.THROTTLE ? throttle ?? 1 : null; + onChange({ + ...frequency, + notifyWhen: newValue, + throttle: newThrottle ? `${newThrottle}${throttleUnit}` : null, + }); }, - [onNotifyWhenChange, onThrottleChange, throttle, throttleUnit] + [onChange, throttle, throttleUnit, frequency] ); const summaryNotifyWhenOptions = useMemo( @@ -234,13 +226,23 @@ export const RuleActionsNotifyWhen = ({ const selectSummaryOption = useCallback( (summary: boolean) => { - onSummaryChange(summary); + onChange({ + summary, + notifyWhen: selectedOptionDoesNotExist(summary) + ? getDefaultNotifyWhenOption(summary) + : frequency.notifyWhen, + throttle: frequency.throttle, + }); + onUseDefaultMessage(); setSummaryMenuOpen(false); - if (selectedOptionDoesNotExist(summary)) { - onNotifyWhenChange(getDefaultNotifyWhenOption(summary)); - } }, - [onSummaryChange, selectedOptionDoesNotExist, onNotifyWhenChange, getDefaultNotifyWhenOption] + [ + frequency, + onUseDefaultMessage, + selectedOptionDoesNotExist, + getDefaultNotifyWhenOption, + onChange, + ] ); const { euiTheme } = useEuiTheme(); @@ -320,7 +322,7 @@ export const RuleActionsNotifyWhen = ({ prepend={hasAlertsMappings ? summaryOrPerRuleSelect : <>} data-test-subj="notifyWhenSelect" options={notifyWhenOptions} - valueOfSelected={notifyWhenValue} + valueOfSelected={frequency.notifyWhen} onChange={onNotifyWhenValueChange} /> {showCustomThrottleOpts && ( @@ -328,7 +330,6 @@ export const RuleActionsNotifyWhen = ({ - parseInt(value, 10)), filter((value) => !isNaN(value)), map((value) => { - onThrottleChange(value, throttleUnit); + onChange({ + ...frequency, + throttle: `${value}${throttleUnit}`, + }); }) ); }} @@ -362,7 +366,10 @@ export const RuleActionsNotifyWhen = ({ value={throttleUnit} options={getTimeOptions(throttle ?? 1)} onChange={(e) => { - onThrottleChange(throttle, e.target.value); + onChange({ + ...frequency, + throttle: `${throttle}${e.target.value}`, + }); }} /> @@ -389,10 +396,3 @@ export const RuleActionsNotifyWhen = ({ ); }; - -const FOR_EACH_ALERT = i18n.translate('alertsUIShared.ruleActionsNotifyWhen.forEachOption', { - defaultMessage: 'For each alert', -}); -const SUMMARY_OF_ALERTS = i18n.translate('alertsUIShared.ruleActionsNotifyWhen.summaryOption', { - defaultMessage: 'Summary of alerts', -}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.test.tsx new file mode 100644 index 000000000000..a9b9a5b9cc45 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.test.tsx @@ -0,0 +1,432 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { RuleActionsSettings } from './rule_actions_settings'; +import { getAction } from '../../common/test_utils/actions_test_utils'; +import { RuleTypeModel } from '../../common'; +import { RuleType } from '@kbn/alerting-types'; +import userEvent from '@testing-library/user-event'; +import type { RuleActionsNotifyWhenProps } from './rule_actions_notify_when'; +import type { RuleActionsAlertsFilterProps } from './rule_actions_alerts_filter'; +import type { RuleActionsAlertsFilterTimeframeProps } from './rule_actions_alerts_filter_timeframe'; + +jest.mock('./rule_actions_notify_when', () => ({ + RuleActionsNotifyWhen: ({ + showMinimumThrottleUnitWarning, + showMinimumThrottleWarning, + onChange, + onUseDefaultMessage, + }: RuleActionsNotifyWhenProps) => ( +
+ RuleActionsNotifyWhen + {showMinimumThrottleUnitWarning &&
showMinimumThrottleUnitWarning
} + {showMinimumThrottleWarning &&
showMinimumThrottleWarning
} + + +
+ ), +})); + +jest.mock('./rule_actions_alerts_filter', () => ({ + RuleActionsAlertsFilter: ({ onChange }: RuleActionsAlertsFilterProps) => ( +
+ RuleActionsAlertsFilter + +
+ ), +})); + +jest.mock('./rule_actions_alerts_filter_timeframe', () => ({ + RuleActionsAlertsFilterTimeframe: ({ onChange }: RuleActionsAlertsFilterTimeframeProps) => ( +
+ RuleActionsAlertsFilterTimeframe + +
+ ), +})); + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), + useRuleFormDispatch: jest.fn(), +})); + +const ruleType = { + id: '.es-query', + name: 'Test', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + { + id: 'recovered', + name: 'Recovered', + }, + ], + defaultActionGroupId: 'testActionGroup', + minimumLicenseRequired: 'basic', + recoveryActionGroup: 'recovered', + producer: 'logs', + authorizedConsumers: { + alerting: { read: true, all: true }, + test: { read: true, all: true }, + stackAlerts: { read: true, all: true }, + logs: { read: true, all: true }, + }, + actionVariables: { + params: [], + state: [], + }, + enabledInLicense: true, +} as unknown as RuleType; + +const ruleModel: RuleTypeModel = { + id: '.es-query', + description: 'Sample rule type model', + iconClass: 'sampleIconClass', + documentationUrl: 'testurl', + validate: (params, isServerless) => ({ errors: {} }), + ruleParamsExpression: () =>
Expression
, + defaultActionMessage: 'Sample default action message', + defaultRecoveryMessage: 'Sample default recovery message', + requiresAppContext: false, +}; + +const mockOnUseDefaultMessageChange = jest.fn(); +const mockOnNotifyWhenChange = jest.fn(); +const mockOnActionGroupChange = jest.fn(); +const mockOnAlertsFilterChange = jest.fn(); +const mockOnTimeframeChange = jest.fn(); + +const mockDispatch = jest.fn(); + +const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); + +describe('ruleActionsSettings', () => { + beforeEach(() => { + useRuleFormState.mockReturnValue({ + plugins: { + settings: {}, + }, + formData: { + consumer: 'stackAlerts', + schedule: { interval: '5m' }, + }, + actionErrors: {}, + validConsumers: ['stackAlerts', 'logs'], + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + }); + useRuleFormDispatch.mockReturnValue(mockDispatch); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + test('should render correctly', () => { + render( + + ); + + expect(screen.getByTestId('ruleActionsSettings')).toBeInTheDocument(); + expect(screen.getByTestId('ruleActionsSettingsSelectActionGroup')).toBeInTheDocument(); + }); + + test('should render notify when component', () => { + render( + + ); + + expect(screen.getByText('RuleActionsNotifyWhen')).toBeInTheDocument(); + + expect(screen.queryByText('showMinimumThrottleUnitWarning')).not.toBeInTheDocument(); + expect(screen.queryByText('showMinimumThrottleWarning')).not.toBeInTheDocument(); + }); + + test('should render show minimum throttle unit warning', () => { + useRuleFormState.mockReturnValue({ + plugins: { + settings: {}, + }, + formData: { + consumer: 'stackAlerts', + schedule: { interval: '5h' }, + }, + actionErrors: {}, + validConsumers: ['stackAlerts', 'logs'], + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + }); + + render( + + ); + + expect(screen.queryByText('showMinimumThrottleUnitWarning')).toBeInTheDocument(); + expect(screen.queryByText('showMinimumThrottleWarning')).not.toBeInTheDocument(); + }); + + test('should render show minimum throttle warning', () => { + useRuleFormState.mockReturnValue({ + plugins: { + settings: {}, + }, + formData: { + consumer: 'stackAlerts', + schedule: { interval: '5h' }, + }, + actionErrors: {}, + validConsumers: ['stackAlerts', 'logs'], + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + }); + + render( + + ); + + expect(screen.queryByText('showMinimumThrottleWarning')).toBeInTheDocument(); + expect(screen.queryByText('showMinimumThrottleUnitWarning')).not.toBeInTheDocument(); + }); + + test('should call notifyWhen component event handlers with the correct parameters', async () => { + render( + + ); + + await userEvent.click(screen.getByText('RuleActionsNotifyWhenOnChange')); + + expect(mockOnNotifyWhenChange).toHaveBeenLastCalledWith({ + notifyWhen: 'onActionGroupChange', + summary: true, + throttle: '5m', + }); + + await userEvent.click(screen.getByText('RuleActionsNotifyWhenOnUseDefaultMessage')); + + expect(mockOnUseDefaultMessageChange).toHaveBeenCalled(); + }); + + test('should allow for selecting of action groups', async () => { + render( + + ); + + await userEvent.click(screen.getByTestId('ruleActionsSettingsSelectActionGroup')); + + await userEvent.click(screen.getByTestId('addNewActionConnectorActionGroup-testActionGroup')); + + expect(mockOnActionGroupChange).toHaveBeenLastCalledWith('testActionGroup'); + }); + + test('should render alerts filter and filter timeframe inputs', () => { + useRuleFormState.mockReturnValue({ + plugins: { + settings: {}, + }, + formData: { + consumer: 'stackAlerts', + schedule: { interval: '5h' }, + }, + actionErrors: {}, + validConsumers: ['stackAlerts', 'logs'], + selectedRuleType: { + ...ruleType, + hasFieldsForAAD: true, + }, + selectedRuleTypeModel: ruleModel, + }); + + render( + + ); + + expect(screen.queryByText('RuleActionsAlertsFilter')).toBeInTheDocument(); + expect(screen.queryByText('RuleActionsAlertsFilterTimeframe')).toBeInTheDocument(); + }); + + test('should call filter and filter timeframe onChange', async () => { + useRuleFormState.mockReturnValue({ + plugins: { + settings: {}, + }, + formData: { + consumer: 'stackAlerts', + schedule: { interval: '5h' }, + }, + actionErrors: {}, + validConsumers: ['stackAlerts', 'logs'], + selectedRuleType: { + ...ruleType, + hasFieldsForAAD: true, + }, + selectedRuleTypeModel: ruleModel, + }); + + render( + + ); + + await userEvent.click(screen.getByText('RuleActionsAlertsFilterButton')); + expect(mockOnAlertsFilterChange).toHaveBeenLastCalledWith({ filters: [], kql: 'test' }); + + await userEvent.click(screen.getByText('RuleActionsAlertsFilterTimeframeButton')); + expect(mockOnTimeframeChange).toHaveBeenLastCalledWith({ + days: [1], + hours: { end: 'now', start: 'now' }, + timezone: 'utc', + }); + }); + + test('should render filter query error', () => { + useRuleFormState.mockReturnValue({ + plugins: { + settings: {}, + }, + formData: { + consumer: 'stackAlerts', + schedule: { interval: '5h' }, + }, + actionsErrors: { + 'uuid-action-1': { filterQuery: ['filter query error'] }, + }, + validConsumers: ['stackAlerts', 'logs'], + selectedRuleType: { + ...ruleType, + hasFieldsForAAD: true, + }, + selectedRuleTypeModel: ruleModel, + }); + + render( + + ); + + expect(screen.queryByText('filter query error')).toBeInTheDocument(); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.tsx new file mode 100644 index 000000000000..4d748b8530cb --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_settings.tsx @@ -0,0 +1,279 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiFormLabel, EuiFormRow, EuiSuperSelect } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { + AlertsFilter, + AlertsFilterTimeframe, + RecoveredActionGroup, + RuleActionFrequency, +} from '@kbn/alerting-types'; +import { AlertConsumers, ValidFeatureId } from '@kbn/rule-data-utils'; +import { useRuleFormState } from '../hooks'; +import { RuleAction, RuleTypeWithDescription } from '../../common'; +import { + getActionGroups, + getDurationNumberInItsUnit, + getDurationUnitValue, + getSelectedActionGroup, + hasFieldsForAad, + parseDuration, +} from '../utils'; +import { DEFAULT_VALID_CONSUMERS } from '../constants'; + +import { RuleActionsNotifyWhen } from './rule_actions_notify_when'; +import { RuleActionsAlertsFilter } from './rule_actions_alerts_filter'; +import { RuleActionsAlertsFilterTimeframe } from './rule_actions_alerts_filter_timeframe'; + +const getMinimumThrottleWarnings = ({ + actionThrottle, + actionThrottleUnit, + minimumActionThrottle, + minimumActionThrottleUnit, +}: { + actionThrottle: number | null; + actionThrottleUnit: string; + minimumActionThrottle: number; + minimumActionThrottleUnit: string; +}) => { + try { + if (!actionThrottle) return [false, false]; + const throttleUnitDuration = parseDuration(`1${actionThrottleUnit}`); + const minThrottleUnitDuration = parseDuration(`1${minimumActionThrottleUnit}`); + const boundedThrottle = + throttleUnitDuration > minThrottleUnitDuration + ? actionThrottle + : Math.max(actionThrottle, minimumActionThrottle); + const boundedThrottleUnit = + parseDuration(`${actionThrottle}${actionThrottleUnit}`) >= minThrottleUnitDuration + ? actionThrottleUnit + : minimumActionThrottleUnit; + return [boundedThrottle !== actionThrottle, boundedThrottleUnit !== actionThrottleUnit]; + } catch (e) { + return [false, false]; + } +}; + +const ACTION_GROUP_NOT_SUPPORTED = (actionGroupName: string) => + i18n.translate('alertsUIShared.ruleActionsSetting.actionGroupNotSupported', { + defaultMessage: '{actionGroupName} (Not Currently Supported)', + values: { actionGroupName }, + }); + +const ACTION_GROUP_RUN_WHEN = i18n.translate( + 'alertsUIShared.ruleActionsSetting.actionGroupRunWhen', + { + defaultMessage: 'Run when', + } +); + +const DisabledActionGroupsByActionType: Record = { + [RecoveredActionGroup.id]: ['.jira', '.resilient'], +}; + +const DisabledActionTypeIdsForActionGroup: Map = new Map( + Object.entries(DisabledActionGroupsByActionType) +); + +function isActionGroupDisabledForActionTypeId(actionGroup: string, actionTypeId: string): boolean { + return ( + DisabledActionTypeIdsForActionGroup.has(actionGroup) && + DisabledActionTypeIdsForActionGroup.get(actionGroup)!.includes(actionTypeId) + ); +} + +const isActionGroupDisabledForActionType = ( + ruleType: RuleTypeWithDescription, + actionGroupId: string, + actionTypeId: string +): boolean => { + return isActionGroupDisabledForActionTypeId( + actionGroupId === ruleType?.recoveryActionGroup?.id ? RecoveredActionGroup.id : actionGroupId, + actionTypeId + ); +}; + +const actionGroupDisplay = ({ + ruleType, + actionGroupId, + actionGroupName, + actionTypeId, +}: { + ruleType: RuleTypeWithDescription; + actionGroupId: string; + actionGroupName: string; + actionTypeId: string; +}): string => { + if (isActionGroupDisabledForActionType(ruleType, actionGroupId, actionTypeId)) { + return ACTION_GROUP_NOT_SUPPORTED(actionGroupName); + } + return actionGroupName; +}; + +export interface RuleActionsSettingsProps { + action: RuleAction; + producerId: string; + onUseDefaultMessageChange: () => void; + onNotifyWhenChange: (frequency: RuleActionFrequency) => void; + onActionGroupChange: (group: string) => void; + onAlertsFilterChange: (query?: AlertsFilter['query']) => void; + onTimeframeChange: (timeframe?: AlertsFilterTimeframe) => void; +} + +export const RuleActionsSettings = (props: RuleActionsSettingsProps) => { + const { + action, + producerId, + onUseDefaultMessageChange, + onNotifyWhenChange, + onActionGroupChange, + onAlertsFilterChange, + onTimeframeChange, + } = props; + + const { + plugins: { settings }, + formData: { + consumer, + schedule: { interval }, + }, + actionsErrors = {}, + validConsumers = DEFAULT_VALID_CONSUMERS, + selectedRuleType, + selectedRuleTypeModel, + } = useRuleFormState(); + + const actionGroups = getActionGroups({ + ruleType: selectedRuleType, + ruleTypeModel: selectedRuleTypeModel, + }); + + const selectedActionGroup = getSelectedActionGroup({ + group: action.group, + ruleType: selectedRuleType, + ruleTypeModel: selectedRuleTypeModel, + }); + + const actionError = actionsErrors[action.uuid!] || {}; + + const showSelectActionGroup = actionGroups && selectedActionGroup && !action.frequency?.summary; + + const intervalNumber = getDurationNumberInItsUnit(interval ?? 1); + + const intervalUnit = getDurationUnitValue(interval); + + const actionThrottle = action.frequency?.throttle + ? getDurationNumberInItsUnit(action.frequency.throttle) + : null; + + const actionThrottleUnit = action.frequency?.throttle + ? getDurationUnitValue(action.frequency?.throttle) + : 'h'; + + const [minimumActionThrottle = -1, minimumActionThrottleUnit] = [ + intervalNumber, + intervalUnit, + ] ?? [-1, 's']; + + const [showMinimumThrottleWarning, showMinimumThrottleUnitWarning] = getMinimumThrottleWarnings({ + actionThrottle, + actionThrottleUnit, + minimumActionThrottle, + minimumActionThrottleUnit, + }); + + const showActionAlertsFilter = + hasFieldsForAad({ + ruleType: selectedRuleType, + consumer, + validConsumers, + }) || producerId === AlertConsumers.SIEM; + + return ( + + + + + + + + {showSelectActionGroup && ( + + {ACTION_GROUP_RUN_WHEN} + + } + data-test-subj="ruleActionsSettingsSelectActionGroup" + fullWidth + id={`addNewActionConnectorActionGroup-${action.actionTypeId}`} + options={actionGroups.map(({ id: value, name }) => ({ + value, + ['data-test-subj']: `addNewActionConnectorActionGroup-${value}`, + inputDisplay: actionGroupDisplay({ + ruleType: selectedRuleType, + actionGroupId: value, + actionGroupName: name, + actionTypeId: action.actionTypeId, + }), + disabled: isActionGroupDisabledForActionType( + selectedRuleType, + value, + action.actionTypeId + ), + }))} + valueOfSelected={selectedActionGroup.id} + onChange={onActionGroupChange} + /> + )} + + + + {showActionAlertsFilter && ( + + + + + + + + + + + + + )} + + ); +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.test.tsx new file mode 100644 index 000000000000..a64dcca57387 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.test.tsx @@ -0,0 +1,263 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { RuleType } from '@kbn/alerting-types'; +import userEvent from '@testing-library/user-event'; +import { TypeRegistry } from '../../common/type_registry'; +import { + getAction, + getActionType, + getActionTypeModel, + getConnector, +} from '../../common/test_utils/actions_test_utils'; +import { ActionTypeModel } from '../../common'; +import { RuleActionsMessageProps } from './rule_actions_message'; +import { RuleActionsSystemActionsItem } from './rule_actions_system_actions_item'; + +jest.mock('../hooks', () => ({ + useRuleFormState: jest.fn(), + useRuleFormDispatch: jest.fn(), +})); + +jest.mock('./rule_actions_message', () => ({ + RuleActionsMessage: ({ onParamsChange, warning }: RuleActionsMessageProps) => ( +
+ RuleActionsMessage + + {warning &&
{warning}
} +
+ ), +})); + +jest.mock('../validation/validate_params_for_warnings', () => ({ + validateParamsForWarnings: jest.fn(), +})); + +const ruleType = { + id: '.es-query', + name: 'Test', + actionGroups: [ + { + id: 'testActionGroup', + name: 'Test Action Group', + }, + { + id: 'recovered', + name: 'Recovered', + }, + ], + defaultActionGroupId: 'testActionGroup', + minimumLicenseRequired: 'basic', + recoveryActionGroup: { + id: 'recovered', + }, + producer: 'logs', + authorizedConsumers: { + alerting: { read: true, all: true }, + test: { read: true, all: true }, + stackAlerts: { read: true, all: true }, + logs: { read: true, all: true }, + }, + actionVariables: { + params: [], + state: [], + }, + enabledInLicense: true, +} as unknown as RuleType; + +const { useRuleFormState, useRuleFormDispatch } = jest.requireMock('../hooks'); + +const { validateParamsForWarnings } = jest.requireMock( + '../validation/validate_params_for_warnings' +); + +const mockConnectors = [getConnector('1', { id: 'action-1' })]; + +const mockActionTypes = [getActionType('1')]; + +const mockOnChange = jest.fn(); + +const mockValidate = jest.fn().mockResolvedValue({ + errors: {}, +}); + +describe('ruleActionsSystemActionsItem', () => { + beforeEach(() => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + validateParams: mockValidate, + }) + ); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + http: { + basePath: { + publicBaseUrl: 'publicUrl', + }, + }, + }, + actionsParamsErrors: {}, + selectedRuleType: ruleType, + aadTemplateFields: [], + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + useRuleFormDispatch.mockReturnValue(mockOnChange); + validateParamsForWarnings.mockReturnValue(null); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + test('should render correctly', () => { + render( + + ); + + expect(screen.getByTestId('ruleActionsSystemActionsItem')).toBeInTheDocument(); + expect(screen.getByText('connector-1')).toBeInTheDocument(); + expect(screen.getByText('actionType: 1')).toBeInTheDocument(); + + expect(screen.getByTestId('ruleActionsSystemActionsItemAccordionContent')).toBeVisible(); + expect(screen.getByText('RuleActionsMessage')).toBeInTheDocument(); + }); + + test('should be able to hide the accordion content', async () => { + render( + + ); + + await userEvent.click(screen.getByTestId('ruleActionsSystemActionsItemAccordionButton')); + + expect(screen.getByTestId('ruleActionsSystemActionsItemAccordionContent')).not.toBeVisible(); + }); + + test('should be able to delete the action', async () => { + render( + + ); + + await userEvent.click(screen.getByTestId('ruleActionsSystemActionsItemDeleteActionButton')); + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { uuid: 'uuid-action-1' }, + type: 'removeAction', + }); + }); + + test('should render error icon if error exists', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + http: { + basePath: { + publicBaseUrl: 'publicUrl', + }, + }, + }, + actionsParamsErrors: { + 'uuid-action-1': { + param: ['something went wrong!'], + }, + }, + selectedRuleType: ruleType, + aadTemplateFields: [], + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + + await userEvent.click(screen.getByTestId('ruleActionsSystemActionsItemAccordionButton')); + + expect(screen.getByTestId('action-group-error-icon')).toBeInTheDocument(); + }); + + test('should allow params to be changed', async () => { + render( + + ); + + await userEvent.click(screen.getByText('RuleActionsMessageButton')); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { uuid: 'uuid-action-1', value: { param: { paramKey: 'someValue' } } }, + type: 'setActionParams', + }); + expect(mockValidate).toHaveBeenCalledWith({ param: { paramKey: 'someValue' } }); + }); + + test('should set warning and error if params have errors', async () => { + validateParamsForWarnings.mockReturnValue('warning message!'); + + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + validateParams: mockValidate.mockResolvedValue({ + errors: { paramsValue: ['something went wrong!'] }, + }), + }) + ); + + render( + + ); + + await userEvent.click(screen.getByText('RuleActionsMessageButton')); + + expect(mockOnChange).toHaveBeenCalledTimes(2); + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { uuid: 'uuid-action-1', value: { param: { paramKey: 'someValue' } } }, + type: 'setActionParams', + }); + + expect(mockOnChange).toHaveBeenCalledWith({ + payload: { errors: { paramsValue: ['something went wrong!'] }, uuid: 'uuid-action-1' }, + type: 'setActionParamsError', + }); + + expect(screen.getByText('warning message!')).toBeInTheDocument(); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.tsx new file mode 100644 index 000000000000..4598d42d91aa --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_actions/rule_actions_system_actions_item.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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { Suspense, useCallback, useMemo, useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { isEmpty, some } from 'lodash'; +import { + EuiAccordion, + EuiBadge, + EuiBetaBadge, + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiPanel, + EuiText, + EuiToolTip, + useEuiBackgroundColor, + useEuiTheme, +} from '@elastic/eui'; +import { RuleActionParam, RuleSystemAction } from '@kbn/alerting-types'; +import { SavedObjectAttribute } from '@kbn/core/types'; +import { css } from '@emotion/react'; +import { useRuleFormDispatch, useRuleFormState } from '../hooks'; +import { RuleFormParamsErrors } from '../../common'; +import { + ACTION_ERROR_TOOLTIP, + ACTION_WARNING_TITLE, + TECH_PREVIEW_DESCRIPTION, + TECH_PREVIEW_LABEL, +} from '../translations'; +import { RuleActionsMessage } from './rule_actions_message'; +import { validateParamsForWarnings } from '../validation'; +import { getAvailableActionVariables } from '../../action_variables'; + +interface RuleActionsSystemActionsItemProps { + action: RuleSystemAction; + index: number; + producerId: string; +} + +export const RuleActionsSystemActionsItem = (props: RuleActionsSystemActionsItemProps) => { + const { action, index, producerId } = props; + + const { + plugins: { actionTypeRegistry, http }, + actionsParamsErrors = {}, + selectedRuleType, + connectorTypes, + connectors, + aadTemplateFields, + } = useRuleFormState(); + + const [isOpen, setIsOpen] = useState(true); + const [storedActionParamsForAadToggle, setStoredActionParamsForAadToggle] = useState< + Record + >({}); + const [warning, setWarning] = useState(null); + + const subdued = useEuiBackgroundColor('subdued'); + const plain = useEuiBackgroundColor('plain'); + const { euiTheme } = useEuiTheme(); + + const dispatch = useRuleFormDispatch(); + const actionTypeModel = actionTypeRegistry.get(action.actionTypeId); + const actionType = connectorTypes.find(({ id }) => id === action.actionTypeId)!; + const connector = connectors.find(({ id }) => id === action.id)!; + + const actionParamsError = actionsParamsErrors[action.uuid!] || {}; + + const availableActionVariables = useMemo(() => { + const messageVariables = selectedRuleType.actionVariables; + + return messageVariables + ? getAvailableActionVariables(messageVariables, undefined, undefined, true) + : []; + }, [selectedRuleType]); + + const showActionGroupErrorIcon = (): boolean => { + return !isOpen && some(actionParamsError, (error) => !isEmpty(error)); + }; + + const onDelete = (id: string) => { + dispatch({ type: 'removeAction', payload: { uuid: id } }); + }; + + const onStoredActionParamsChange = useCallback( + ( + aadParams: Record, + params: Record + ) => { + if (isEmpty(aadParams) && action.params.subAction) { + setStoredActionParamsForAadToggle(params); + } else { + setStoredActionParamsForAadToggle(aadParams); + } + }, + [action] + ); + + const validateActionParams = useCallback( + async (params: RuleActionParam) => { + const res: { errors: RuleFormParamsErrors } = await actionTypeRegistry + .get(action.actionTypeId) + ?.validateParams(params); + + dispatch({ + type: 'setActionParamsError', + payload: { + uuid: action.uuid!, + errors: res.errors, + }, + }); + }, + [actionTypeRegistry, action, dispatch] + ); + + const onParamsChange = useCallback( + (key: string, value: RuleActionParam) => { + const newParams = { + ...action.params, + [key]: value, + }; + + dispatch({ + type: 'setActionParams', + payload: { + uuid: action.uuid!, + value: newParams, + }, + }); + setWarning( + validateParamsForWarnings({ + value, + publicBaseUrl: http.basePath.publicBaseUrl, + actionVariables: availableActionVariables, + }) + ); + validateActionParams(newParams); + onStoredActionParamsChange(storedActionParamsForAadToggle, newParams); + }, + [ + http, + action, + availableActionVariables, + dispatch, + validateActionParams, + onStoredActionParamsChange, + storedActionParamsForAadToggle, + ] + ); + + return ( + onDelete(action.uuid!)} + /> + } + buttonContentClassName="eui-fullWidth" + buttonContent={ + + + + {showActionGroupErrorIcon() ? ( + + + + ) : ( + + + + )} + + + {connector.name} + + + + {actionType?.name} + + + {warning && !isOpen && ( + + + {ACTION_WARNING_TITLE} + + + )} + {actionTypeModel.isExperimental && ( + + + + )} + + + } + > + + + + + + + ); +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.test.tsx index f5124ee7d956..935aec998929 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.test.tsx @@ -52,15 +52,6 @@ describe('RuleConsumerSelection', () => { expect(screen.getByTestId('comboBoxSearchInput')).toHaveValue(''); }); - it('should display nothing if there is only 1 consumer to select', () => { - useRuleFormState.mockReturnValue({ - multiConsumerSelection: null, - }); - render(); - - expect(screen.queryByTestId('ruleConsumerSelection')).not.toBeInTheDocument(); - }); - it('should be able to select logs and call onChange', () => { useRuleFormState.mockReturnValue({ multiConsumerSelection: null, diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.tsx index dbfc597dc6ea..f416a3531895 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_consumer_selection.tsx @@ -91,10 +91,6 @@ export const RuleConsumerSelection = (props: RuleConsumerSelectionProps) => { [dispatch] ); - if (validConsumers.length <= 1 || validConsumers.includes(AlertConsumers.OBSERVABILITY)) { - return null; - } - return ( { expect(screen.queryByTestId('ruleConsumerSelection')).not.toBeInTheDocument(); }); + test('Hides consumer selection if there is only 1 consumer to select', () => { + useRuleFormState.mockReturnValue({ + plugins, + formData: { + id: 'test-id', + params: {}, + schedule: { + interval: '1m', + }, + alertDelay: { + active: 5, + }, + notifyWhen: null, + consumer: 'stackAlerts', + }, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + canShowConsumerSelect: true, + validConsumers: ['logs'], + }); + + render(); + + expect(screen.queryByTestId('ruleConsumerSelection')).not.toBeInTheDocument(); + }); + + test('Hides consumer selection if valid consumers contain observability', () => { + useRuleFormState.mockReturnValue({ + plugins, + formData: { + id: 'test-id', + params: {}, + schedule: { + interval: '1m', + }, + alertDelay: { + active: 5, + }, + notifyWhen: null, + consumer: 'stackAlerts', + }, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + canShowConsumerSelect: true, + validConsumers: ['logs', 'observability'], + }); + + render(); + + expect(screen.queryByTestId('ruleConsumerSelection')).not.toBeInTheDocument(); + }); + test('Can toggle advanced options', async () => { useRuleFormState.mockReturnValue({ plugins, diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.tsx index 6bfdfd54b7d5..fe4812436144 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_definition/rule_definition.tsx @@ -22,7 +22,11 @@ import { EuiPanel, EuiSpacer, EuiErrorBoundary, + useEuiTheme, + COLOR_MODES_STANDARD, } from '@elastic/eui'; +import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; +import { AlertConsumers } from '@kbn/rule-data-utils'; import { DOC_LINK_TITLE, LOADING_RULE_TYPE_PARAMS_TITLE, @@ -56,6 +60,7 @@ export const RuleDefinition = () => { canShowConsumerSelection = false, } = useRuleFormState(); + const { colorMode } = useEuiTheme(); const dispatch = useRuleFormDispatch(); const { charts, data, dataViews, unifiedSearch, docLinks } = plugins; @@ -81,6 +86,12 @@ export const RuleDefinition = () => { if (!authorizedConsumers.length) { return false; } + if ( + authorizedConsumers.length <= 1 || + authorizedConsumers.includes(AlertConsumers.OBSERVABILITY) + ) { + return false; + } return ( selectedRuleTypeModel.id && MULTI_CONSUMER_RULE_TYPE_IDS.includes(selectedRuleTypeModel.id) ); @@ -174,24 +185,26 @@ export const RuleDefinition = () => { - + + + diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/index.ts b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/index.ts index 896d1c46109b..68d0a0415980 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/index.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/index.ts @@ -12,3 +12,4 @@ export * from './rule_form_circuit_breaker_error'; export * from './rule_form_resolve_rule_error'; export * from './rule_form_rule_type_error'; export * from './rule_form_error_prompt_wrapper'; +export * from './rule_form_action_permission_error'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/rule_form_action_permission_error.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/rule_form_action_permission_error.tsx new file mode 100644 index 000000000000..0bf755d0962a --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_errors/rule_form_action_permission_error.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { EuiEmptyPrompt, EuiText } from '@elastic/eui'; +import { + RULE_FORM_PAGE_RULE_ACTIONS_NO_PERMISSION_TITLE, + RULE_FORM_PAGE_RULE_ACTIONS_NO_PERMISSION_DESCRIPTION, +} from '../translations'; + +export const RuleFormActionPermissionError = () => { + return ( + +

{RULE_FORM_PAGE_RULE_ACTIONS_NO_PERMISSION_TITLE}

+ + } + body={ + +

{RULE_FORM_PAGE_RULE_ACTIONS_NO_PERMISSION_DESCRIPTION}

+
+ } + /> + ); +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.test.tsx index 9a37e168da47..81d1aab4b2c3 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.test.tsx @@ -11,6 +11,7 @@ import React, { useReducer } from 'react'; import { act, renderHook } from '@testing-library/react-hooks/dom'; import { ruleFormStateReducer } from './rule_form_state_reducer'; import { RuleFormState } from '../types'; +import { getAction } from '../../common/test_utils/actions_test_utils'; jest.mock('../validation/validate_form', () => ({ validateRuleBase: jest.fn(), @@ -63,6 +64,7 @@ const initialState: RuleFormState = { formData: { name: 'test-rule', tags: [], + actions: [], params: { paramsValue: 'value-1', }, @@ -74,6 +76,9 @@ const initialState: RuleFormState = { selectedRuleType: indexThresholdRuleType, selectedRuleTypeModel: indexThresholdRuleTypeModel, multiConsumerSelection: 'stackAlerts', + connectors: [], + connectorTypes: [], + aadTemplateFields: [], }; describe('ruleFormStateReducer', () => { @@ -97,6 +102,7 @@ describe('ruleFormStateReducer', () => { params: { test: 'hello', }, + actions: [], schedule: { interval: '2m' }, consumer: 'logs', }; @@ -345,4 +351,218 @@ describe('ruleFormStateReducer', () => { expect(validateRuleBase).not.toHaveBeenCalled(); expect(validateRuleParams).not.toHaveBeenCalled(); }); + + test('addAction works correctly', () => { + const { result } = renderHook(() => useReducer(ruleFormStateReducer, initialState)); + + const dispatch = result.current[1]; + + const action = getAction('1'); + + act(() => { + dispatch({ + type: 'addAction', + payload: action, + }); + }); + + expect(result.current[0].formData.actions).toEqual([action]); + + expect(validateRuleBase).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [action] }), + }) + ); + expect(validateRuleParams).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [action] }), + }) + ); + }); + + test('removeAction works correctly', () => { + const action1 = getAction('1'); + const action2 = getAction('2'); + + const { result } = renderHook(() => + useReducer(ruleFormStateReducer, { + ...initialState, + formData: { + ...initialState.formData, + actions: [action1, action2], + }, + }) + ); + + const dispatch = result.current[1]; + + act(() => { + dispatch({ + type: 'removeAction', + payload: { + uuid: action1.uuid!, + }, + }); + }); + + expect(result.current[0].formData.actions).toEqual([action2]); + + expect(validateRuleBase).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [action2] }), + }) + ); + expect(validateRuleParams).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [action2] }), + }) + ); + }); + + test('setActionProperty works correctly', () => { + const action = getAction('1'); + + const { result } = renderHook(() => + useReducer(ruleFormStateReducer, { + ...initialState, + formData: { + ...initialState.formData, + actions: [action], + }, + }) + ); + + const dispatch = result.current[1]; + + act(() => { + dispatch({ + type: 'setActionProperty', + payload: { + uuid: action.uuid!, + key: 'params', + value: { + test: 'value', + }, + }, + }); + }); + + const updatedAction = { + ...action, + params: { + test: 'value', + }, + }; + + expect(result.current[0].formData.actions).toEqual([updatedAction]); + + expect(validateRuleBase).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [updatedAction] }), + }) + ); + expect(validateRuleParams).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [updatedAction] }), + }) + ); + }); + + test('setActionParams works correctly', () => { + const action = getAction('1'); + + const { result } = renderHook(() => + useReducer(ruleFormStateReducer, { + ...initialState, + formData: { + ...initialState.formData, + actions: [action], + }, + }) + ); + + const dispatch = result.current[1]; + + act(() => { + dispatch({ + type: 'setActionParams', + payload: { + uuid: action.uuid!, + value: { + test: 'value', + }, + }, + }); + }); + + const updatedAction = { + ...action, + params: { + test: 'value', + }, + }; + + expect(result.current[0].formData.actions).toEqual([updatedAction]); + + expect(validateRuleBase).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [updatedAction] }), + }) + ); + expect(validateRuleParams).toHaveBeenCalledWith( + expect.objectContaining({ + formData: expect.objectContaining({ actions: [updatedAction] }), + }) + ); + }); + + test('setActionError works correctly', () => { + const { result } = renderHook(() => useReducer(ruleFormStateReducer, initialState)); + + const dispatch = result.current[1]; + + const action = getAction('1'); + + act(() => { + dispatch({ + type: 'setActionError', + payload: { + uuid: action.uuid!, + errors: { ['property' as string]: 'something went wrong' }, + }, + }); + }); + + expect(result.current[0].actionsErrors).toEqual({ + 'uuid-action-1': { property: 'something went wrong' }, + }); + + expect(validateRuleBase).not.toHaveBeenCalled(); + expect(validateRuleParams).not.toHaveBeenCalled(); + }); + + test('setActionParamsError works correctly', () => { + const { result } = renderHook(() => useReducer(ruleFormStateReducer, initialState)); + + const dispatch = result.current[1]; + + const action = getAction('1'); + + act(() => { + dispatch({ + type: 'setActionParamsError', + payload: { + uuid: action.uuid!, + errors: { ['property' as string]: 'something went wrong' }, + }, + }); + }); + + expect(result.current[0].actionsParamsErrors).toEqual({ + 'uuid-action-1': { property: 'something went wrong' }, + }); + + expect(validateRuleBase).not.toHaveBeenCalled(); + expect(validateRuleParams).not.toHaveBeenCalled(); + }); }); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.ts b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.ts index 29fe01b5d718..a65842125b6a 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_form_state/rule_form_state_reducer.ts @@ -7,6 +7,9 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { RuleActionParams } from '@kbn/alerting-types'; +import { omit } from 'lodash'; +import { RuleFormActionsErrors, RuleFormParamsErrors, RuleUiAction } from '../../common'; import { RuleFormData, RuleFormState } from '../types'; import { validateRuleBase, validateRuleParams } from '../validation'; @@ -64,6 +67,45 @@ export type RuleFormStateReducerAction = | { type: 'setMetadata'; payload: Record; + } + | { + type: 'addAction'; + payload: RuleUiAction; + } + | { + type: 'removeAction'; + payload: { + uuid: string; + }; + } + | { + type: 'setActionProperty'; + payload: { + uuid: string; + key: string; + value: unknown; + }; + } + | { + type: 'setActionParams'; + payload: { + uuid: string; + value: RuleActionParams; + }; + } + | { + type: 'setActionError'; + payload: { + uuid: string; + errors: RuleFormActionsErrors; + }; + } + | { + type: 'setActionParamsError'; + payload: { + uuid: string; + errors: RuleFormParamsErrors; + }; }; const getUpdateWithValidation = @@ -189,6 +231,101 @@ export const ruleFormStateReducer = ( metadata: payload, }; } + case 'addAction': { + const { payload } = action; + return updateWithValidation(() => ({ + ...formData, + actions: [...formData.actions, payload], + })); + } + case 'removeAction': { + const { + payload: { uuid }, + } = action; + return { + ...ruleFormState, + ...updateWithValidation(() => ({ + ...formData, + actions: formData.actions.filter((existingAction) => existingAction.uuid !== uuid), + })), + ...(ruleFormState.actionsErrors + ? { + actionsErrors: omit(ruleFormState.actionsErrors, uuid), + } + : {}), + ...(ruleFormState.actionsParamsErrors + ? { + actionsParamsErrors: omit(ruleFormState.actionsParamsErrors, uuid), + } + : {}), + }; + } + case 'setActionProperty': { + const { + payload: { uuid, key, value }, + } = action; + return updateWithValidation(() => ({ + ...formData, + actions: formData.actions.map((existingAction) => { + if (existingAction.uuid === uuid) { + return { + ...existingAction, + [key]: value, + }; + } + return existingAction; + }), + })); + } + case 'setActionParams': { + const { + payload: { uuid, value }, + } = action; + return updateWithValidation(() => ({ + ...formData, + actions: formData.actions.map((existingAction) => { + if (existingAction.uuid === uuid) { + return { + ...existingAction, + params: value, + }; + } + return existingAction; + }), + })); + } + case 'setActionError': { + const { + payload: { uuid, errors }, + } = action; + const newActionsError = { + ...(ruleFormState.actionsErrors || {})[uuid], + ...errors, + }; + return { + ...ruleFormState, + actionsErrors: { + ...ruleFormState.actionsErrors, + [uuid]: newActionsError, + }, + }; + } + case 'setActionParamsError': { + const { + payload: { uuid, errors }, + } = action; + const newActionsParamsError = { + ...(ruleFormState.actionsParamsErrors || {})[uuid], + ...errors, + }; + return { + ...ruleFormState, + actionsParamsErrors: { + ...ruleFormState.actionsParamsErrors, + [uuid]: newActionsParamsError, + }, + }; + } default: { return ruleFormState; } diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.test.tsx index d7300333b79a..ca80c0b77aae 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.test.tsx @@ -50,6 +50,7 @@ const formDataMock: RuleFormData = { index: ['.kibana'], timeField: 'alert.executionStatus.lastExecutionDate', }, + actions: [], consumer: 'stackAlerts', schedule: { interval: '1m' }, tags: [], @@ -64,12 +65,22 @@ useRuleFormState.mockReturnValue({ plugins: { application: { navigateToUrl, + capabilities: { + actions: { + show: true, + save: true, + execute: true, + }, + }, }, }, baseErrors: {}, paramsErrors: {}, multiConsumerSelection: 'logs', formData: formDataMock, + connectors: [], + connectorTypes: [], + aadTemplateFields: [], }); const onSave = jest.fn(); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.tsx index f550c64d5d69..4e2e019d4126 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page.tsx @@ -51,6 +51,8 @@ export const RulePage = (props: RulePageProps) => { multiConsumerSelection, } = useRuleFormState(); + const canReadConnectors = !!application.capabilities.actions?.show; + const styles = useEuiBackgroundColorCSS().transparent; const onCancel = useCallback(() => { @@ -64,22 +66,31 @@ export const RulePage = (props: RulePageProps) => { }); }, [onSave, formData, multiConsumerSelection]); + const actionComponent = useMemo(() => { + if (canReadConnectors) { + return [ + { + title: RULE_FORM_PAGE_RULE_ACTIONS_TITLE, + children: ( + <> + + + + + ), + }, + ]; + } + return []; + }, [canReadConnectors]); + const steps: EuiStepsProps['steps'] = useMemo(() => { return [ { title: RULE_FORM_PAGE_RULE_DEFINITION_TITLE, children: , }, - { - title: RULE_FORM_PAGE_RULE_ACTIONS_TITLE, - children: ( - <> - {}} /> - - - - ), - }, + ...actionComponent, { title: RULE_FORM_PAGE_RULE_DETAILS_TITLE, children: ( @@ -91,7 +102,7 @@ export const RulePage = (props: RulePageProps) => { ), }, ]; - }, []); + }, [actionComponent]); return ( diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.test.tsx index 4631b4d1d4b7..45e200877358 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.test.tsx @@ -35,6 +35,9 @@ hasRuleErrors.mockReturnValue(false); useRuleFormState.mockReturnValue({ baseErrors: {}, paramsErrors: {}, + formData: { + actions: [], + }, }); describe('rulePageFooter', () => { diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.tsx index f0b729748c95..09d2ac429fd5 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_footer.tsx @@ -33,14 +33,31 @@ export const RulePageFooter = (props: RulePageFooterProps) => { const { isEdit = false, isSaving = false, onCancel, onSave } = props; - const { baseErrors, paramsErrors } = useRuleFormState(); + const { + formData: { actions }, + connectors, + baseErrors = {}, + paramsErrors = {}, + actionsErrors = {}, + actionsParamsErrors = {}, + } = useRuleFormState(); const hasErrors = useMemo(() => { + const hasBrokenConnectors = actions.some((action) => { + return !connectors.find((connector) => connector.id === action.id); + }); + + if (hasBrokenConnectors) { + return true; + } + return hasRuleErrors({ - baseErrors: baseErrors || {}, - paramsErrors: paramsErrors || {}, + baseErrors, + paramsErrors, + actionsErrors, + actionsParamsErrors, }); - }, [baseErrors, paramsErrors]); + }, [actions, connectors, baseErrors, paramsErrors, actionsErrors, actionsParamsErrors]); const saveButtonText = useMemo(() => { if (isEdit) { @@ -59,11 +76,13 @@ export const RulePageFooter = (props: RulePageFooterProps) => { const onSaveClick = useCallback(() => { if (isEdit) { - onSave(); - } else { - setShowCreateConfirmation(true); + return onSave(); + } + if (actions.length === 0) { + return setShowCreateConfirmation(true); } - }, [isEdit, onSave]); + onSave(); + }, [actions, isEdit, onSave]); const onCreateConfirmClick = useCallback(() => { setShowCreateConfirmation(false); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.test.tsx index 7159c8603bda..a2ee47de52a6 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.test.tsx @@ -35,6 +35,7 @@ const formData: RuleFormData = { index: ['.kibana'], timeField: 'created_at', }, + actions: [], consumer: 'stackAlerts', ruleTypeId: '.es-query', schedule: { interval: '1m' }, diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.tsx index 0eee53d198cc..f2cd4be5e105 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/rule_page/rule_page_show_request_modal.tsx @@ -25,7 +25,7 @@ import { BASE_ALERTING_API_PATH } from '../../common/constants'; import { RuleFormData } from '../types'; import { CreateRuleBody, - UPDATE_FIELDS, + UPDATE_FIELDS_WITH_ACTIONS, UpdateRuleBody, transformCreateRuleBody, transformUpdateRuleBody, @@ -41,7 +41,7 @@ const stringifyBodyRequest = ({ }): string => { try { const request = isEdit - ? transformUpdateRuleBody(pick(formData, UPDATE_FIELDS) as UpdateRuleBody) + ? transformUpdateRuleBody(pick(formData, UPDATE_FIELDS_WITH_ACTIONS) as UpdateRuleBody) : transformCreateRuleBody(omit(formData, 'id') as CreateRuleBody); return JSON.stringify(request, null, 2); } catch { diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/translations.ts b/packages/kbn-alerts-ui-shared/src/rule_form/translations.ts index 70c6d3528028..e7b060dce983 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/translations.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/translations.ts @@ -337,7 +337,7 @@ export const HEALTH_CHECK_ACTION_TEXT = i18n.translate('alertsUIShared.healthChe export const RULE_FORM_ROUTE_PARAMS_ERROR_TITLE = i18n.translate( 'alertsUIShared.ruleForm.routeParamsErrorTitle', { - defaultMessage: 'Unable to load rule form.', + defaultMessage: 'Unable to load rule form', } ); @@ -351,7 +351,7 @@ export const RULE_FORM_ROUTE_PARAMS_ERROR_TEXT = i18n.translate( export const RULE_FORM_RULE_TYPE_NOT_FOUND_ERROR_TITLE = i18n.translate( 'alertsUIShared.ruleForm.ruleTypeNotFoundErrorTitle', { - defaultMessage: 'Unable to load rule type.', + defaultMessage: 'Unable to load rule type', } ); @@ -374,7 +374,7 @@ export const RULE_FORM_RULE_NOT_FOUND_ERROR_TEXT = i18n.translate( 'alertsUIShared.ruleForm.ruleNotFoundErrorText', { defaultMessage: - 'There was an error loading the rule. Please ensure you have access to the rule selected.', + 'There was an error loading the rule. Please ensure the rule exists and you have access to the rule selected.', } ); @@ -458,6 +458,20 @@ export const RULE_FORM_PAGE_RULE_ACTIONS_TITLE = i18n.translate( } ); +export const RULE_FORM_PAGE_RULE_ACTIONS_NO_PERMISSION_TITLE = i18n.translate( + 'alertsUIShared.ruleForm.ruleActionsNoPermissionTitle', + { + defaultMessage: 'Actions and connectors privileges missing', + } +); + +export const RULE_FORM_PAGE_RULE_ACTIONS_NO_PERMISSION_DESCRIPTION = i18n.translate( + 'alertsUIShared.ruleForm.ruleActionsNoPermissionDescription', + { + defaultMessage: 'You must have read access to actions and connectors to edit rules.', + } +); + export const RULE_FORM_PAGE_RULE_DETAILS_TITLE = i18n.translate( 'alertsUIShared.ruleForm.ruleDetailsTitle', { @@ -468,3 +482,92 @@ export const RULE_FORM_PAGE_RULE_DETAILS_TITLE = i18n.translate( export const RULE_FORM_RETURN_TITLE = i18n.translate('alertsUIShared.ruleForm.returnTitle', { defaultMessage: 'Return', }); + +export const MODAL_SEARCH_PLACEHOLDER = i18n.translate( + 'alertsUIShared.ruleForm.modalSearchPlaceholder', + { + defaultMessage: 'Search', + } +); + +export const MODAL_SEARCH_CLEAR_FILTERS_TEXT = i18n.translate( + 'alertsUIShared.ruleForm.modalSearchClearFiltersText', + { + defaultMessage: 'Clear filters', + } +); + +export const ACTION_TYPE_MODAL_TITLE = i18n.translate( + 'alertsUIShared.ruleForm.actionTypeModalTitle', + { + defaultMessage: 'Select connector', + } +); + +export const ACTION_TYPE_MODAL_FILTER_ALL = i18n.translate( + 'alertsUIShared.ruleForm.actionTypeModalFilterAll', + { + defaultMessage: 'All', + } +); + +export const ACTION_TYPE_MODAL_EMPTY_TITLE = i18n.translate( + 'alertsUIShared.ruleForm.actionTypeModalEmptyTitle', + { + defaultMessage: 'No connectors found', + } +); + +export const ACTION_TYPE_MODAL_EMPTY_TEXT = i18n.translate( + 'alertsUIShared.ruleForm.actionTypeModalEmptyText', + { + defaultMessage: 'Try a different search or change your filter settings.', + } +); + +export const ACTION_ERROR_TOOLTIP = i18n.translate( + 'alertsUIShared.ruleActionsItem.actionErrorToolTip', + { + defaultMessage: 'Action contains errors.', + } +); + +export const ACTION_WARNING_TITLE = i18n.translate( + 'alertsUIShared.ruleActionsItem.actionWarningsTitle', + { + defaultMessage: '1 warning', + } +); + +export const ACTION_UNABLE_TO_LOAD_CONNECTOR_TITLE = i18n.translate( + 'alertsUIShared.ruleActionsItem.actionUnableToLoadConnectorTitle', + { + defaultMessage: 'Unable to find connector', + } +); + +export const ACTION_UNABLE_TO_LOAD_CONNECTOR_DESCRIPTION = i18n.translate( + 'alertsUIShared.ruleActionsItem.actionUnableToLoadConnectorTitle', + { + defaultMessage: `Create a connector and try again. If you can't create a connector, contact your system administrator.`, + } +); + +export const ACTION_USE_AAD_TEMPLATE_FIELDS_LABEL = i18n.translate( + 'alertsUIShared.ruleActionsItem.actionUseAadTemplateFieldsLabel', + { + defaultMessage: 'Use template fields from alerts index', + } +); + +export const TECH_PREVIEW_LABEL = i18n.translate('alertsUIShared.technicalPreviewBadgeLabel', { + defaultMessage: 'Technical preview', +}); + +export const TECH_PREVIEW_DESCRIPTION = i18n.translate( + 'alertsUIShared.technicalPreviewBadgeDescription', + { + defaultMessage: + 'This functionality is in technical preview and may be changed or removed completely in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.', + } +); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/types.ts b/packages/kbn-alerts-ui-shared/src/rule_form/types.ts index 3fb5b04de5c1..ac81f45de19e 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/types.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/types.ts @@ -17,16 +17,23 @@ import type { ChartsPluginSetup } from '@kbn/charts-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; +import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import { RuleCreationValidConsumer } from '@kbn/rule-data-utils'; +import { ActionType } from '@kbn/actions-types'; +import { ActionVariable } from '@kbn/alerting-types'; import { + ActionConnector, + ActionTypeRegistryContract, MinimumScheduleInterval, Rule, + RuleFormActionsErrors, RuleFormBaseErrors, RuleFormParamsErrors, RuleTypeModel, RuleTypeParams, RuleTypeRegistryContract, RuleTypeWithDescription, + RuleUiAction, } from '../common/types'; export interface RuleFormData { @@ -35,6 +42,7 @@ export interface RuleFormData { params: Rule['params']; schedule: Rule['schedule']; consumer: Rule['consumer']; + actions: RuleUiAction[]; alertDelay?: Rule['alertDelay']; notifyWhen?: Rule['notifyWhen']; ruleTypeId?: Rule['ruleTypeId']; @@ -45,24 +53,32 @@ export interface RuleFormPlugins { i18n: I18nStart; theme: ThemeServiceStart; application: ApplicationStart; - notification: NotificationsStart; + notifications: NotificationsStart; charts: ChartsPluginSetup; + settings: SettingsStart; data: DataPublicPluginStart; dataViews: DataViewsPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; docLinks: DocLinksStart; ruleTypeRegistry: RuleTypeRegistryContract; + actionTypeRegistry: ActionTypeRegistryContract; } export interface RuleFormState { id?: string; formData: RuleFormData; plugins: RuleFormPlugins; + connectors: ActionConnector[]; + connectorTypes: ActionType[]; + aadTemplateFields: ActionVariable[]; baseErrors?: RuleFormBaseErrors; paramsErrors?: RuleFormParamsErrors; + actionsErrors?: Record; + actionsParamsErrors?: Record; selectedRuleType: RuleTypeWithDescription; selectedRuleTypeModel: RuleTypeModel; multiConsumerSelection?: RuleCreationValidConsumer | null; + showMustacheAutocompleteSwitch?: boolean; metadata?: Record; minimumScheduleInterval?: MinimumScheduleInterval; canShowConsumerSelection?: boolean; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.scss b/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.scss similarity index 100% rename from x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.scss rename to packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.scss diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.test.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.test.ts similarity index 89% rename from x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.test.tsx rename to packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.test.ts index ad0dfd696184..987d95ef3d07 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.test.tsx +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.test.ts @@ -1,15 +1,18 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ActionType, PreConfiguredActionConnector } from '../../types'; +import { ActionType } from '@kbn/actions-types'; import { checkActionTypeEnabled, checkActionFormActionTypeEnabled, } from './check_action_type_enabled'; +import { PreConfiguredActionConnector } from '../../common'; describe('checkActionTypeEnabled', () => { test(`returns isEnabled:true when action type isn't provided`, async () => { @@ -65,7 +68,7 @@ describe('checkActionTypeEnabled', () => { > , diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.ts new file mode 100644 index 000000000000..891012f0eeb2 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/check_action_type_enabled.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { ActionType } from '@kbn/actions-types'; +import { configurationCheckResult, getLicenseCheckResult } from './get_license_check_result'; +import { ActionConnector } from '../../common'; +import './check_action_type_enabled.scss'; + +export interface IsEnabledResult { + isEnabled: true; +} +export interface IsDisabledResult { + isEnabled: false; + message: string; + messageCard: JSX.Element; +} + +export const checkActionTypeEnabled = ( + actionType?: ActionType +): IsEnabledResult | IsDisabledResult => { + if (actionType?.enabledInLicense === false) { + return getLicenseCheckResult(actionType); + } + + if (actionType?.enabledInConfig === false) { + return configurationCheckResult; + } + + return { isEnabled: true }; +}; + +export const checkActionFormActionTypeEnabled = ( + actionType: ActionType, + preconfiguredConnectors: ActionConnector[] +): IsEnabledResult | IsDisabledResult => { + if (actionType?.enabledInLicense === false) { + return getLicenseCheckResult(actionType); + } + + if ( + actionType?.enabledInConfig === false && + // do not disable action type if it contains preconfigured connectors (is preconfigured) + !preconfiguredConnectors.find( + (preconfiguredConnector) => preconfiguredConnector.actionTypeId === actionType.id + ) + ) { + return configurationCheckResult; + } + + return { isEnabled: true }; +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_initial_multi_consumer.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_initial_multi_consumer.ts index f6dab691f2b7..ee80bf46b99c 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_initial_multi_consumer.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_initial_multi_consumer.ts @@ -75,5 +75,5 @@ export const getInitialMultiConsumer = ({ } // All else fails, just use the first valid consumer - return validConsumers[0]; + return validConsumers[0] || null; }; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_license_check_result.tsx b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_license_check_result.tsx new file mode 100644 index 000000000000..e4477822ca92 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_license_check_result.tsx @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { upperFirst } from 'lodash'; +import { i18n } from '@kbn/i18n'; +import { EuiCard, EuiLink } from '@elastic/eui'; +import { ActionType } from '@kbn/actions-types'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { VIEW_LICENSE_OPTIONS_LINK } from '../../common/constants'; + +export const getLicenseCheckResult = (actionType: ActionType) => { + return { + isEnabled: false, + message: i18n.translate( + 'alertsUIShared.checkActionTypeEnabled.actionTypeDisabledByLicenseMessage', + { + defaultMessage: 'This connector requires a {minimumLicenseRequired} license.', + values: { + minimumLicenseRequired: upperFirst(actionType.minimumLicenseRequired), + }, + } + ), + messageCard: ( + + + + } + /> + ), + }; +}; + +export const configurationCheckResult = { + isEnabled: false, + message: i18n.translate( + 'alertsUIShared.checkActionTypeEnabled.actionTypeDisabledByConfigMessage', + { defaultMessage: 'This connector is disabled by the Kibana configuration.' } + ), + messageCard: ( + + ), +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_selected_action_group.test.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_selected_action_group.test.ts new file mode 100644 index 000000000000..0b91d3dbbec9 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_selected_action_group.test.ts @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { RuleTypeModel, RuleTypeParams, RuleTypeWithDescription } from '../../common'; +import { getActionGroups, getSelectedActionGroup } from './get_selected_action_group'; + +describe('getActionGroups', () => { + test('should get action groups when setting recovery context', () => { + const actionGroups = getActionGroups({ + ruleType: { + actionGroups: [ + { + id: 'group-1', + name: 'group-1', + }, + { + id: 'group-2', + name: 'group-2', + }, + ], + recoveryActionGroup: { + id: 'group-1', + }, + doesSetRecoveryContext: true, + } as RuleTypeWithDescription, + ruleTypeModel: { + defaultRecoveryMessage: 'default recovery message', + defaultActionMessage: 'default action message', + } as RuleTypeModel, + }); + + expect(actionGroups).toEqual([ + { + defaultActionMessage: 'default recovery message', + id: 'group-1', + name: 'group-1', + omitMessageVariables: 'keepContext', + }, + { + defaultActionMessage: 'default action message', + id: 'group-2', + name: 'group-2', + }, + ]); + }); + + test('should get action groups when not setting recovery context', () => { + const actionGroups = getActionGroups({ + ruleType: { + actionGroups: [ + { + id: 'group-1', + name: 'group-1', + }, + { + id: 'group-2', + name: 'group-2', + }, + ], + recoveryActionGroup: { + id: 'group-1', + }, + doesSetRecoveryContext: false, + } as RuleTypeWithDescription, + ruleTypeModel: { + defaultRecoveryMessage: 'default recovery message', + defaultActionMessage: 'default action message', + } as RuleTypeModel, + }); + + expect(actionGroups).toEqual([ + { + defaultActionMessage: 'default recovery message', + id: 'group-1', + name: 'group-1', + omitMessageVariables: 'all', + }, + { + defaultActionMessage: 'default action message', + id: 'group-2', + name: 'group-2', + }, + ]); + }); +}); + +describe('getSelectedActionGroup', () => { + test('should get selected action group', () => { + const result = getSelectedActionGroup({ + group: 'group-1', + ruleType: { + actionGroups: [ + { + id: 'group-1', + name: 'group-1', + }, + { + id: 'group-2', + name: 'group-2', + }, + ], + recoveryActionGroup: { + id: 'group-1', + }, + doesSetRecoveryContext: false, + } as RuleTypeWithDescription, + ruleTypeModel: { + defaultRecoveryMessage: 'default recovery message', + defaultActionMessage: 'default action message', + } as RuleTypeModel, + }); + + expect(result).toEqual({ + defaultActionMessage: 'default recovery message', + id: 'group-1', + name: 'group-1', + omitMessageVariables: 'all', + }); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_selected_action_group.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_selected_action_group.ts new file mode 100644 index 000000000000..36c73c703440 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/get_selected_action_group.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { i18n } from '@kbn/i18n'; +import { RuleTypeModel, RuleTypeParams, RuleTypeWithDescription } from '../../common'; + +const recoveredActionGroupMessage = i18n.translate( + 'alertsUIShared.actionForm.actionGroupRecoveredMessage', + { + defaultMessage: 'Recovered', + } +); + +export const getActionGroups = ({ + ruleType, + ruleTypeModel, +}: { + ruleType: RuleTypeWithDescription; + ruleTypeModel: RuleTypeModel; +}) => { + return ruleType.actionGroups.map((item) => + item.id === ruleType.recoveryActionGroup.id + ? { + ...item, + omitMessageVariables: ruleType.doesSetRecoveryContext ? 'keepContext' : 'all', + defaultActionMessage: ruleTypeModel.defaultRecoveryMessage || recoveredActionGroupMessage, + } + : { ...item, defaultActionMessage: ruleTypeModel.defaultActionMessage } + ); +}; + +export const getSelectedActionGroup = ({ + group, + ruleType, + ruleTypeModel, +}: { + group: string; + ruleType: RuleTypeWithDescription; + ruleTypeModel: RuleTypeModel; +}) => { + const actionGroups = getActionGroups({ + ruleType, + ruleTypeModel, + }); + + const defaultActionGroup = actionGroups?.find(({ id }) => id === ruleType.defaultActionGroupId); + + return actionGroups?.find(({ id }) => id === group) ?? defaultActionGroup; +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/has_fields_for_aad.test.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/has_fields_for_aad.test.ts new file mode 100644 index 000000000000..e7e7f2384468 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/has_fields_for_aad.test.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { AlertConsumers, ES_QUERY_ID } from '@kbn/rule-data-utils'; +import { RuleTypeWithDescription } from '../../common/types'; +import { hasFieldsForAad } from './has_fields_for_aad'; + +describe('hasFieldsForAad', () => { + test('should return true if alert has fields for add', () => { + const hasFields = hasFieldsForAad({ + ruleType: { + hasFieldsForAAD: true, + } as RuleTypeWithDescription, + consumer: 'stackAlerts', + validConsumers: [], + }); + + expect(hasFields).toBeTruthy(); + }); + + test('should return true if producer is SIEM', () => { + const hasFields = hasFieldsForAad({ + ruleType: { + hasFieldsForAAD: false, + producer: AlertConsumers.SIEM, + } as RuleTypeWithDescription, + consumer: 'stackAlerts', + validConsumers: [], + }); + + expect(hasFields).toBeTruthy(); + }); + + test('should return true if has alerts mappings', () => { + const hasFields = hasFieldsForAad({ + ruleType: { + hasFieldsForAAD: false, + hasAlertsMappings: true, + } as RuleTypeWithDescription, + consumer: 'stackAlerts', + validConsumers: [], + }); + + expect(hasFields).toBeTruthy(); + }); + + test('should return true if it is a multi-consumer rule and valid consumer contains it', () => { + const hasFields = hasFieldsForAad({ + ruleType: { + hasFieldsForAAD: true, + id: ES_QUERY_ID, + } as RuleTypeWithDescription, + consumer: 'stackAlerts', + validConsumers: ['stackAlerts'], + }); + + expect(hasFields).toBeTruthy(); + }); + + test('should return false if it is a multi-consumer rule and valid consumer does not contain it', () => { + const hasFields = hasFieldsForAad({ + ruleType: { + hasFieldsForAAD: true, + id: ES_QUERY_ID, + } as RuleTypeWithDescription, + consumer: 'stackAlerts', + validConsumers: ['logs'], + }); + + expect(hasFields).toBeFalsy(); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/has_fields_for_aad.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/has_fields_for_aad.ts new file mode 100644 index 000000000000..c0433898c85d --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/has_fields_for_aad.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { AlertConsumers, RuleCreationValidConsumer } from '@kbn/rule-data-utils'; +import { RuleTypeWithDescription } from '../../common/types'; +import { DEFAULT_VALID_CONSUMERS, MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; + +export const hasFieldsForAad = ({ + ruleType, + consumer, + validConsumers, +}: { + ruleType: RuleTypeWithDescription; + consumer: string; + validConsumers: RuleCreationValidConsumer[]; +}) => { + const hasAlertHasData = ruleType + ? ruleType.hasFieldsForAAD || + ruleType.producer === AlertConsumers.SIEM || + ruleType.hasAlertsMappings + : false; + + if (MULTI_CONSUMER_RULE_TYPE_IDS.includes(ruleType.id)) { + return !!( + (validConsumers || DEFAULT_VALID_CONSUMERS).includes(consumer as RuleCreationValidConsumer) && + hasAlertHasData + ); + } + return !!hasAlertHasData; +}; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/utils/index.ts b/packages/kbn-alerts-ui-shared/src/rule_form/utils/index.ts index e46ba79c74fc..f5b583a1a9c6 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/utils/index.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/utils/index.ts @@ -14,4 +14,6 @@ export * from './get_authorized_rule_types'; export * from './get_authorized_consumers'; export * from './get_initial_multi_consumer'; export * from './get_initial_schedule'; +export * from './has_fields_for_aad'; +export * from './get_selected_action_group'; export * from './get_initial_consumer'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/validation/index.ts b/packages/kbn-alerts-ui-shared/src/rule_form/validation/index.ts index 8e4e1047c6f4..7d43b562b7e2 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/validation/index.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/validation/index.ts @@ -8,3 +8,4 @@ */ export * from './validate_form'; +export * from './validate_params_for_warnings'; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.test.ts b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.test.ts index ba4d7ef1a9ed..c8855c0aa90a 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.test.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.test.ts @@ -7,7 +7,12 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { validateRuleBase, validateRuleParams, hasRuleErrors } from './validate_form'; +import { + validateRuleBase, + validateRuleParams, + hasRuleErrors, + validateAction, +} from './validate_form'; import { RuleFormData } from '../types'; import { CONSUMER_REQUIRED_TEXT, @@ -19,6 +24,7 @@ import { } from '../translations'; import { formatDuration } from '../utils'; import { RuleTypeModel } from '../../common'; +import { getAction } from '../../common/test_utils/actions_test_utils'; const formDataMock: RuleFormData = { params: { @@ -32,6 +38,7 @@ const formDataMock: RuleFormData = { index: ['.kibana'], timeField: 'alert.executionStatus.lastExecutionDate', }, + actions: [], consumer: 'stackAlerts', schedule: { interval: '1m' }, tags: [], @@ -50,6 +57,23 @@ const ruleTypeModelMock = { }), }; +describe('validateAction', () => { + test('should validate filter query', () => { + const result = validateAction({ + action: getAction('1', { + alertsFilter: { + query: { + kql: '', + filters: [], + }, + }, + }), + }); + + expect(result).toEqual({ filterQuery: ['A custom query is required.'] }); + }); +}); + describe('validateRuleBase', () => { test('should validate name', () => { const result = validateRuleBase({ @@ -153,6 +177,8 @@ describe('hasRuleErrors', () => { const result = hasRuleErrors({ baseErrors: {}, paramsErrors: {}, + actionsErrors: {}, + actionsParamsErrors: {}, }); expect(result).toBeFalsy(); @@ -164,6 +190,8 @@ describe('hasRuleErrors', () => { name: ['error'], }, paramsErrors: {}, + actionsErrors: {}, + actionsParamsErrors: {}, }); expect(result).toBeTruthy(); @@ -175,6 +203,19 @@ describe('hasRuleErrors', () => { paramsErrors: { someValue: ['error'], }, + actionsErrors: {}, + actionsParamsErrors: {}, + }); + + expect(result).toBeTruthy(); + + result = hasRuleErrors({ + baseErrors: {}, + paramsErrors: { + someValue: 'error', + }, + actionsErrors: {}, + actionsParamsErrors: {}, }); expect(result).toBeTruthy(); @@ -186,6 +227,8 @@ describe('hasRuleErrors', () => { someValue: ['error'], }, }, + actionsErrors: {}, + actionsParamsErrors: {}, }); expect(result).toBeTruthy(); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.ts b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.ts index 9fdb02a1eacc..d65e9c589393 100644 --- a/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.ts +++ b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_form.ts @@ -8,6 +8,7 @@ */ import { isObject } from 'lodash'; +import { i18n } from '@kbn/i18n'; import { RuleFormData } from '../types'; import { parseDuration, formatDuration } from '../utils'; import { @@ -20,11 +21,32 @@ import { } from '../translations'; import { MinimumScheduleInterval, + RuleFormActionsErrors, RuleFormBaseErrors, RuleFormParamsErrors, RuleTypeModel, + RuleUiAction, } from '../../common'; +export const validateAction = ({ action }: { action: RuleUiAction }): RuleFormActionsErrors => { + const errors = { + filterQuery: new Array(), + }; + + if ('alertsFilter' in action) { + const query = action?.alertsFilter?.query; + if (query && !query.kql) { + errors.filterQuery.push( + i18n.translate('alertsUIShared.ruleForm.actionsForm.requiredFilterQuery', { + defaultMessage: 'A custom query is required.', + }) + ); + } + } + + return errors; +}; + export function validateRuleBase({ formData, minimumScheduleInterval, @@ -93,7 +115,13 @@ const hasRuleBaseErrors = (errors: RuleFormBaseErrors) => { return Object.values(errors).some((error: string[]) => error.length > 0); }; -const hasRuleParamsErrors = (errors: RuleFormParamsErrors): boolean => { +const hasActionsError = (actionsErrors: Record) => { + return Object.values(actionsErrors).some((errors: RuleFormActionsErrors) => { + return Object.values(errors).some((error: string[]) => error.length > 0); + }); +}; + +const hasParamsErrors = (errors: RuleFormParamsErrors): boolean => { const values = Object.values(errors); let hasError = false; for (const value of values) { @@ -104,18 +132,33 @@ const hasRuleParamsErrors = (errors: RuleFormParamsErrors): boolean => { return true; } if (isObject(value)) { - hasError = hasRuleParamsErrors(value as RuleFormParamsErrors); + hasError = hasParamsErrors(value as RuleFormParamsErrors); } } return hasError; }; +const hasActionsParamsErrors = (actionsParamsErrors: Record) => { + return Object.values(actionsParamsErrors).some((errors: RuleFormParamsErrors) => { + return hasParamsErrors(errors); + }); +}; + export const hasRuleErrors = ({ baseErrors, paramsErrors, + actionsErrors, + actionsParamsErrors, }: { baseErrors: RuleFormBaseErrors; paramsErrors: RuleFormParamsErrors; + actionsErrors: Record; + actionsParamsErrors: Record; }): boolean => { - return hasRuleBaseErrors(baseErrors) || hasRuleParamsErrors(paramsErrors); + return ( + hasRuleBaseErrors(baseErrors) || + hasParamsErrors(paramsErrors) || + hasActionsError(actionsErrors) || + hasActionsParamsErrors(actionsParamsErrors) + ); }; diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_params_for_warnings.test.ts b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_params_for_warnings.test.ts new file mode 100644 index 000000000000..021c869d78c1 --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_params_for_warnings.test.ts @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { ActionVariable } from '@kbn/alerting-types'; +import { validateParamsForWarnings } from './validate_params_for_warnings'; + +describe('validateParamsForWarnings', () => { + const actionVariables: ActionVariable[] = [ + { + name: 'context.url', + description: 'Test url', + usesPublicBaseUrl: true, + }, + { + name: 'context.name', + description: 'Test name', + }, + ]; + + test('returns warnings when publicUrl is not set and there are publicUrl variables used', () => { + const warning = + 'server.publicBaseUrl is not set. Generated URLs will be either relative or empty.'; + expect( + validateParamsForWarnings({ + value: 'Test for {{context.url}}', + actionVariables, + }) + ).toEqual(warning); + + expect( + validateParamsForWarnings({ + value: 'link: {{ context.url }}', + actionVariables, + }) + ).toEqual(warning); + + expect( + validateParamsForWarnings({ + value: '{{=<% %>=}}link: <%context.url%>', + actionVariables, + }) + ).toEqual(warning); + }); + + test('does not return warnings when publicUrl is not set and there are publicUrl variables not used', () => { + expect( + validateParamsForWarnings({ + value: 'Test for {{context.name}}', + actionVariables, + }) + ).toBeFalsy(); + }); + + test('does not return warnings when publicUrl is set and there are publicUrl variables used', () => { + expect( + validateParamsForWarnings({ + value: 'Test for {{context.url}}', + publicBaseUrl: 'http://test', + actionVariables, + }) + ).toBeFalsy(); + }); + + test('does not returns warnings when publicUrl is not set and the value is not a string', () => { + expect( + validateParamsForWarnings({ + value: 10, + actionVariables, + }) + ).toBeFalsy(); + }); + + test('does not throw an error when passing in invalid mustache', () => { + expect(() => + validateParamsForWarnings({ + value: '{{', + actionVariables, + }) + ).not.toThrowError(); + }); +}); diff --git a/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_params_for_warnings.ts b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_params_for_warnings.ts new file mode 100644 index 000000000000..035a3408656a --- /dev/null +++ b/packages/kbn-alerts-ui-shared/src/rule_form/validation/validate_params_for_warnings.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { i18n } from '@kbn/i18n'; +import Mustache from 'mustache'; +import { some } from 'lodash'; +import { ActionVariable, RuleActionParam } from '@kbn/alerting-types'; + +const publicUrlWarning = i18n.translate('alertsUIShared.ruleForm.actionsForm.publicBaseUrl', { + defaultMessage: + 'server.publicBaseUrl is not set. Generated URLs will be either relative or empty.', +}); + +export const validateParamsForWarnings = ({ + value, + publicBaseUrl, + actionVariables, +}: { + value: RuleActionParam; + publicBaseUrl?: string; + actionVariables?: ActionVariable[]; +}): string | null => { + if (!publicBaseUrl && value && typeof value === 'string') { + const publicUrlFields = (actionVariables || []).reduce((acc, v) => { + if (v.usesPublicBaseUrl) { + acc.push(v.name.replace(/^(params\.|context\.|state\.)/, '')); + acc.push(v.name); + } + return acc; + }, new Array()); + + try { + const variables = new Set( + (Mustache.parse(value) as Array<[string, string]>) + .filter(([type]) => type === 'name') + .map(([, v]) => v) + ); + const hasUrlFields = some(publicUrlFields, (publicUrlField) => variables.has(publicUrlField)); + if (hasUrlFields) { + return publicUrlWarning; + } + } catch (e) { + // Better to set the warning msg if you do not know if the mustache template is invalid + return publicUrlWarning; + } + } + + return null; +}; diff --git a/packages/kbn-alerts-ui-shared/tsconfig.json b/packages/kbn-alerts-ui-shared/tsconfig.json index 79fc9d6fc9bd..0da17dfe3d1a 100644 --- a/packages/kbn-alerts-ui-shared/tsconfig.json +++ b/packages/kbn-alerts-ui-shared/tsconfig.json @@ -49,5 +49,6 @@ "@kbn/core-ui-settings-browser", "@kbn/core-http-browser-mocks", "@kbn/core-notifications-browser-mocks", + "@kbn/kibana-react-plugin" ] } diff --git a/packages/kbn-discover-utils/index.ts b/packages/kbn-discover-utils/index.ts index ba7e832b8f1c..ed6d58ca3da8 100644 --- a/packages/kbn-discover-utils/index.ts +++ b/packages/kbn-discover-utils/index.ts @@ -56,6 +56,9 @@ export { getFieldValue, getVisibleColumns, canPrependTimeFieldColumn, + DiscoverFlyouts, + dismissAllFlyoutsExceptFor, + dismissFlyouts, } from './src'; export type { LogsContextService } from './src'; diff --git a/packages/kbn-discover-utils/src/utils/dismiss_flyouts.ts b/packages/kbn-discover-utils/src/utils/dismiss_flyouts.ts new file mode 100644 index 000000000000..9ffccfe31cdd --- /dev/null +++ b/packages/kbn-discover-utils/src/utils/dismiss_flyouts.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export enum DiscoverFlyouts { + lensEdit = 'lensEdit', + docViewer = 'docViewer', + esqlDocs = 'esqlDocs', +} + +const AllDiscoverFlyouts = Object.values(DiscoverFlyouts); + +const getFlyoutCloseButton = (flyout: DiscoverFlyouts): HTMLElement | null => { + switch (flyout) { + case DiscoverFlyouts.lensEdit: + return document.getElementById('lnsCancelEditOnFlyFlyout'); + case DiscoverFlyouts.docViewer: + return document.querySelector('[data-test-subj="docViewerFlyoutCloseButton"]'); + case DiscoverFlyouts.esqlDocs: + return document.querySelector( + '[data-test-subj="esqlInlineDocumentationFlyout"] [data-test-subj="euiFlyoutCloseButton"]' + ); + } +}; + +export const dismissFlyouts = ( + selectedFlyouts: DiscoverFlyouts[] = AllDiscoverFlyouts, + excludedFlyout?: DiscoverFlyouts +) => { + selectedFlyouts.forEach((flyout) => { + if (flyout === excludedFlyout) { + return; + } + const closeButton = getFlyoutCloseButton(flyout); + if (closeButton) { + closeButton.click?.(); + } + }); +}; + +export const dismissAllFlyoutsExceptFor = (excludedFlyout: DiscoverFlyouts) => { + dismissFlyouts(AllDiscoverFlyouts, excludedFlyout); +}; diff --git a/packages/kbn-discover-utils/src/utils/index.ts b/packages/kbn-discover-utils/src/utils/index.ts index 201cd10fb4de..01ef6b83f83a 100644 --- a/packages/kbn-discover-utils/src/utils/index.ts +++ b/packages/kbn-discover-utils/src/utils/index.ts @@ -22,3 +22,4 @@ export * from './get_field_value'; export * from './calc_field_counts'; export * from './get_visible_columns'; export { isLegacyTableEnabled } from './is_legacy_table_enabled'; +export { DiscoverFlyouts, dismissAllFlyoutsExceptFor, dismissFlyouts } from './dismiss_flyouts'; diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 0d7760003be6..63b16314bdb1 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -425,6 +425,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D mappingPositionIncrementGap: `${ELASTICSEARCH_DOCS}position-increment-gap.html`, mappingRankFeatureFields: `${ELASTICSEARCH_DOCS}rank-feature.html`, mappingRouting: `${ELASTICSEARCH_DOCS}mapping-routing-field.html`, + mappingSettingsLimit: `${ELASTICSEARCH_DOCS}mapping-settings-limit.html`, mappingSimilarity: `${ELASTICSEARCH_DOCS}similarity.html`, mappingSourceFields: `${ELASTICSEARCH_DOCS}mapping-source-field.html`, mappingSourceFieldsDisable: `${ELASTICSEARCH_DOCS}mapping-source-field.html#disable-source-field`, diff --git a/packages/kbn-language-documentation/src/components/as_flyout/index.tsx b/packages/kbn-language-documentation/src/components/as_flyout/index.tsx index 583fb96c96ce..da6ff14134e1 100644 --- a/packages/kbn-language-documentation/src/components/as_flyout/index.tsx +++ b/packages/kbn-language-documentation/src/components/as_flyout/index.tsx @@ -78,6 +78,7 @@ function DocumentationFlyout({ ownFocus onClose={() => onHelpMenuVisibilityChange(false)} aria-labelledby="esqlInlineDocumentationFlyout" + data-test-subj="esqlInlineDocumentationFlyout" type="push" size={DEFAULT_WIDTH} paddingSize="m" diff --git a/packages/kbn-openapi-generator/src/template_service/templates/api_client_supertest.handlebars b/packages/kbn-openapi-generator/src/template_service/templates/api_client_supertest.handlebars index a51be66f1019..330df21d191c 100644 --- a/packages/kbn-openapi-generator/src/template_service/templates/api_client_supertest.handlebars +++ b/packages/kbn-openapi-generator/src/template_service/templates/api_client_supertest.handlebars @@ -11,6 +11,8 @@ import { ELASTIC_HTTP_VERSION_HEADER, X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from ' import { replaceParams } from '@kbn/openapi-common/shared'; import { FtrProviderContext } from 'x-pack/test/api_integration/ftr_provider_context'; +import { routeWithNamespace } from 'x-pack/test/common/utils/security_solution'; + {{#each operations}} import { {{operationId}}RequestQueryInput, @@ -29,9 +31,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) * {{{description}}} */ {{/if}} - {{camelCase operationId}}({{#if (or requestQuery requestParams requestBody)}}props: {{operationId}}Props{{/if}}) { + {{camelCase operationId}}({{#if (or requestQuery requestParams requestBody)}}props: {{operationId}}Props, {{/if}}kibanaSpace: string = 'default') { return supertest - .{{method}}({{#if requestParams}}replaceParams('{{path}}', props.params){{else}}'{{path}}'{{/if}}) + .{{method}}(routeWithNamespace({{#if requestParams}}replaceParams('{{path}}', props.params){{else}}'{{path}}'{{/if}}, kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '{{version}}') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts index 2ee7ea6701e8..6341c12aaddc 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/actions/actions.test.ts @@ -58,7 +58,8 @@ const { startES } = createTestServers({ }); let esServer: TestElasticsearchUtils; -describe('migration actions', () => { +// Failing: See https://github.com/elastic/kibana/issues/166190 +describe.skip('migration actions', () => { let client: ElasticsearchClient; let esCapabilities: ReturnType; diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/fail_on_rollback.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/fail_on_rollback.test.ts index caf9a9189dfb..bc98dc2b0eec 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/fail_on_rollback.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/fail_on_rollback.test.ts @@ -23,7 +23,8 @@ import { baselineTypes as types } from '../kibana_migrator_test_kit.fixtures'; export const logFilePath = Path.join(__dirname, 'fail_on_rollback.test.log'); -describe('when rolling back to an older version', () => { +// Failing: See https://github.com/elastic/kibana/issues/193756 +describe.skip('when rolling back to an older version', () => { let esServer: TestElasticsearchUtils['es']; beforeAll(async () => { diff --git a/src/dev/build/tasks/os_packages/docker_generator/run.ts b/src/dev/build/tasks/os_packages/docker_generator/run.ts index 3dfdb01a88a9..497bec1a99d7 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -51,7 +51,7 @@ export async function runDockerGenerator( */ if (flags.baseImage === 'wolfi') baseImageName = - 'docker.elastic.co/wolfi/chainguard-base:latest@sha256:6fbf07849a440c8dca9aa7e9cb56ed3ecaa9eb40f8a4f36b39393d7b32d78ecc'; + 'docker.elastic.co/wolfi/chainguard-base:latest@sha256:a51a1cd55a717b170058395f65cd16c3ede419b4fd400f0abaae7244c7a421f9'; let imageFlavor = ''; if (flags.baseImage === 'ubi') imageFlavor += `-ubi`; diff --git a/src/plugins/controls/public/control_factory_registry.ts b/src/plugins/controls/public/control_factory_registry.ts index 40ded8cbcbf0..35488cf3f766 100644 --- a/src/plugins/controls/public/control_factory_registry.ts +++ b/src/plugins/controls/public/control_factory_registry.ts @@ -10,9 +10,9 @@ import { i18n } from '@kbn/i18n'; import { ControlFactory, DefaultControlApi } from './controls/types'; -const registry: { [key: string]: ControlFactory } = {}; +const registry: { [key: string]: () => Promise> } = {}; -export const registerControlFactory = async < +export const registerControlFactory = < State extends object = object, ApiType extends DefaultControlApi = DefaultControlApi >( @@ -26,15 +26,15 @@ export const registerControlFactory = async < values: { key: type }, }) ); - registry[type] = (await getFactory()) as ControlFactory; + registry[type] = getFactory as () => Promise>; }; -export const getControlFactory = < +export const getControlFactory = async < State extends object = object, ApiType extends DefaultControlApi = DefaultControlApi >( key: string -): ControlFactory => { +): Promise> => { if (registry[key] === undefined) throw new Error( i18n.translate('controls.controlFactoryRegistry.factoryNotFoundError', { @@ -42,7 +42,7 @@ export const getControlFactory = < values: { key }, }) ); - return registry[key] as ControlFactory; + return (await registry[key]()) as ControlFactory; }; export const getAllControlTypes = () => { diff --git a/src/plugins/controls/public/control_group/components/control_renderer.tsx b/src/plugins/controls/public/control_group/components/control_renderer.tsx index a30c39f1dfe2..181160fae4d1 100644 --- a/src/plugins/controls/public/control_group/components/control_renderer.tsx +++ b/src/plugins/controls/public/control_group/components/control_renderer.tsx @@ -50,7 +50,7 @@ export const ControlRenderer = < async function buildControl() { const parentApi = getParentApi(); - const factory = getControlFactory(type); + const factory = await getControlFactory(type); const buildApi = ( apiRegistration: ControlApiRegistration, comparators: StateComparators diff --git a/src/plugins/controls/public/controls/data_controls/data_control_editor.test.tsx b/src/plugins/controls/public/controls/data_controls/data_control_editor.test.tsx index 23f9b053d23b..e1ae7a9bfd76 100644 --- a/src/plugins/controls/public/controls/data_controls/data_control_editor.test.tsx +++ b/src/plugins/controls/public/controls/data_controls/data_control_editor.test.tsx @@ -117,15 +117,17 @@ describe('Data control editor', () => { return controlEditor.getByTestId(testId).getAttribute('aria-pressed'); }; - const mockRegistry: { [key: string]: ControlFactory } = { - search: getMockedSearchControlFactory({ parentApi: controlGroupApi }), - optionsList: getMockedOptionsListControlFactory({ parentApi: controlGroupApi }), - rangeSlider: getMockedRangeSliderControlFactory({ parentApi: controlGroupApi }), + const mockRegistry: { + [key: string]: () => Promise>; + } = { + search: async () => getMockedSearchControlFactory({ parentApi: controlGroupApi }), + optionsList: async () => getMockedOptionsListControlFactory({ parentApi: controlGroupApi }), + rangeSlider: async () => getMockedRangeSliderControlFactory({ parentApi: controlGroupApi }), }; beforeAll(() => { (getAllControlTypes as jest.Mock).mockReturnValue(Object.keys(mockRegistry)); - (getControlFactory as jest.Mock).mockImplementation((key) => mockRegistry[key]); + (getControlFactory as jest.Mock).mockImplementation((key) => mockRegistry[key]()); }); describe('creating a new control', () => { @@ -146,33 +148,35 @@ describe('Data control editor', () => { test('CompatibleControlTypesComponent respects ordering', async () => { const tempRegistry: { - [key: string]: ControlFactory; + [key: string]: () => Promise>; } = { ...mockRegistry, - alphabeticalFirstControl: { - type: 'alphabeticalFirst', - getIconType: () => 'lettering', - getDisplayName: () => 'Alphabetically first', - isFieldCompatible: () => true, - buildControl: jest.fn().mockReturnValue({ - api: controlGroupApi, - Component: <>Should be first alphabetically, - }), - } as DataControlFactory, - supremeControl: { - type: 'supremeControl', - order: 100, // force it first despite alphabetical ordering - getIconType: () => 'starFilled', - getDisplayName: () => 'Supreme leader', - isFieldCompatible: () => true, - buildControl: jest.fn().mockReturnValue({ - api: controlGroupApi, - Component: <>This control is forced first via the factory order, - }), - } as DataControlFactory, + alphabeticalFirstControl: async () => + ({ + type: 'alphabeticalFirst', + getIconType: () => 'lettering', + getDisplayName: () => 'Alphabetically first', + isFieldCompatible: () => true, + buildControl: jest.fn().mockReturnValue({ + api: controlGroupApi, + Component: <>Should be first alphabetically, + }), + } as DataControlFactory), + supremeControl: async () => + ({ + type: 'supremeControl', + order: 100, // force it first despite alphabetical ordering + getIconType: () => 'starFilled', + getDisplayName: () => 'Supreme leader', + isFieldCompatible: () => true, + buildControl: jest.fn().mockReturnValue({ + api: controlGroupApi, + Component: <>This control is forced first via the factory order, + }), + } as DataControlFactory), }; (getAllControlTypes as jest.Mock).mockReturnValue(Object.keys(tempRegistry)); - (getControlFactory as jest.Mock).mockImplementation((key) => tempRegistry[key]); + (getControlFactory as jest.Mock).mockImplementation((key) => tempRegistry[key]()); const controlEditor = await mountComponent({}); const menu = controlEditor.getByTestId('controlTypeMenu'); @@ -185,7 +189,7 @@ describe('Data control editor', () => { expect(menu.children[4].textContent).toEqual('Search'); (getAllControlTypes as jest.Mock).mockReturnValue(Object.keys(mockRegistry)); - (getControlFactory as jest.Mock).mockImplementation((key) => mockRegistry[key]); + (getControlFactory as jest.Mock).mockImplementation((key) => mockRegistry[key]()); }); test('selecting a keyword field - can only create an options list control', async () => { diff --git a/src/plugins/controls/public/controls/data_controls/data_control_editor.tsx b/src/plugins/controls/public/controls/data_controls/data_control_editor.tsx index 43d0f4632455..23fd95978ff8 100644 --- a/src/plugins/controls/public/controls/data_controls/data_control_editor.tsx +++ b/src/plugins/controls/public/controls/data_controls/data_control_editor.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { @@ -27,6 +27,7 @@ import { EuiIcon, EuiKeyPadMenu, EuiKeyPadMenuItem, + EuiSkeletonRectangle, EuiSpacer, EuiSwitch, EuiTitle, @@ -39,6 +40,7 @@ import { withSuspense, } from '@kbn/presentation-util-plugin/public'; +import { asyncMap } from '@kbn/std'; import { DEFAULT_CONTROL_GROW, DEFAULT_CONTROL_WIDTH, @@ -56,6 +58,7 @@ import { type DataControlFactory, type DataControlFieldRegistry, } from './types'; +import { ControlFactory } from '../types'; export interface ControlEditorProps< State extends DefaultDataControlState = DefaultDataControlState @@ -83,60 +86,89 @@ const CompatibleControlTypesComponent = ({ selectedControlType?: string; setSelectedControlType: (type: string) => void; }) => { - const dataControlFactories = useMemo(() => { - return getAllControlTypes() - .map((type) => getControlFactory(type)) - .filter((factory) => isDataControlFactory(factory)) - .sort( - ( - { order: orderA = 0, getDisplayName: getDisplayNameA }, - { order: orderB = 0, getDisplayName: getDisplayNameB } - ) => { - const orderComparison = orderB - orderA; // sort descending by order - return orderComparison === 0 - ? getDisplayNameA().localeCompare(getDisplayNameB()) // if equal order, compare display names - : orderComparison; + const [dataControlFactories, setDataControlFactories] = useState< + DataControlFactory[] | undefined + >(undefined); + + useEffect(() => { + let cancelled = false; + + asyncMap(getAllControlTypes(), async (controlType) => + getControlFactory(controlType) + ) + .then((controlFactories) => { + if (!cancelled) { + setDataControlFactories( + controlFactories + .filter((factory) => isDataControlFactory(factory)) + .sort( + ( + { order: orderA = 0, getDisplayName: getDisplayNameA }, + { order: orderB = 0, getDisplayName: getDisplayNameB } + ) => { + const orderComparison = orderB - orderA; // sort descending by order + return orderComparison === 0 + ? getDisplayNameA().localeCompare(getDisplayNameB()) // if equal order, compare display names + : orderComparison; + } + ) as unknown as DataControlFactory[] + ); } - ); + }) + .catch(() => { + if (!cancelled) setDataControlFactories([]); + }); + + return () => { + cancelled = true; + }; }, []); return ( - - {dataControlFactories.map((factory) => { - const disabled = - fieldRegistry && selectedFieldName - ? !fieldRegistry[selectedFieldName]?.compatibleControlTypes.includes(factory.type) - : true; - const keyPadMenuItem = ( - setSelectedControlType(factory.type)} - label={factory.getDisplayName()} - > - - - ); + + + {(dataControlFactories ?? []).map((factory) => { + const disabled = + fieldRegistry && selectedFieldName + ? !fieldRegistry[selectedFieldName]?.compatibleControlTypes.includes(factory.type) + : true; + const keyPadMenuItem = ( + setSelectedControlType(factory.type)} + label={factory.getDisplayName()} + > + + + ); - return disabled ? ( - - {keyPadMenuItem} - - ) : ( - keyPadMenuItem - ); - })} - + return disabled ? ( + + {keyPadMenuItem} + + ) : ( + keyPadMenuItem + ); + })} + + ); }; @@ -186,9 +218,33 @@ export const DataControlEditor = (undefined); + useEffect(() => { + if (!selectedControlType) { + setControlFactory(undefined); + return; + } + + let cancelled = false; + getControlFactory(selectedControlType) + .then((nextControlFactory) => { + if (!cancelled) { + setControlFactory(nextControlFactory as unknown as DataControlFactory); + } + }) + .catch(() => { + if (!cancelled) { + setControlFactory(undefined); + } + }); + + return () => { + cancelled = true; + }; + }, [selectedControlType]); + const CustomSettingsComponent = useMemo(() => { - if (!selectedControlType || !editorState.fieldName || !fieldRegistry) return; - const controlFactory = getControlFactory(selectedControlType) as DataControlFactory; + if (!controlFactory || !editorState.fieldName || !fieldRegistry) return; const CustomSettings = controlFactory.CustomOptionsComponent; if (!CustomSettings) return; @@ -217,7 +273,7 @@ export const DataControlEditor = ); - }, [fieldRegistry, selectedControlType, initialState, editorState, controlGroupApi]); + }, [fieldRegistry, controlFactory, initialState, editorState, controlGroupApi]); return ( <> diff --git a/src/plugins/controls/public/controls/data_controls/data_control_editor_utils.ts b/src/plugins/controls/public/controls/data_controls/data_control_editor_utils.ts index 7bf127462770..d4d0125bd147 100644 --- a/src/plugins/controls/public/controls/data_controls/data_control_editor_utils.ts +++ b/src/plugins/controls/public/controls/data_controls/data_control_editor_utils.ts @@ -10,6 +10,7 @@ import { memoize } from 'lodash'; import type { DataView } from '@kbn/data-views-plugin/common'; +import { asyncMap } from '@kbn/std'; import { getAllControlTypes, getControlFactory } from '../../control_factory_registry'; import { isDataControlFactory, type DataControlFieldRegistry } from './types'; @@ -23,7 +24,7 @@ export const getDataControlFieldRegistry = memoize( const loadFieldRegistryFromDataView = async ( dataView: DataView ): Promise => { - const controlFactories = getAllControlTypes().map((controlType) => + const controlFactories = await asyncMap(getAllControlTypes(), async (controlType) => getControlFactory(controlType) ); const fieldRegistry: DataControlFieldRegistry = {}; diff --git a/src/plugins/controls/tsconfig.json b/src/plugins/controls/tsconfig.json index abcafa291358..e1040faecc1b 100644 --- a/src/plugins/controls/tsconfig.json +++ b/src/plugins/controls/tsconfig.json @@ -37,7 +37,8 @@ "@kbn/content-management-utils", "@kbn/field-formats-plugin", "@kbn/presentation-panel-plugin", - "@kbn/shared-ux-utility" + "@kbn/shared-ux-utility", + "@kbn/std" ], "exclude": ["target/**/*"] } diff --git a/src/plugins/dashboard/jest_setup.ts b/src/plugins/dashboard/jest_setup.ts index 672e476fb852..1b0de7854d3a 100644 --- a/src/plugins/dashboard/jest_setup.ts +++ b/src/plugins/dashboard/jest_setup.ts @@ -7,8 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { setStubDashboardServices } from './public/services/mocks'; - /** * CAUTION: Be very mindful of the things you import in to this `jest_setup` file - anything that is imported * here (either directly or implicitly through dependencies) will be **unable** to be mocked elsewhere! @@ -16,4 +14,36 @@ import { setStubDashboardServices } from './public/services/mocks'; * Refer to the "Caution" section here: * https://jestjs.io/docs/jest-object#jestmockmodulename-factory-options */ -setStubDashboardServices(); +import { + mockDashboardBackupService, + mockDashboardContentManagementCache, + mockDashboardContentManagementService, + setStubKibanaServices, +} from './public/services/mocks'; + +// Start the kibana services with stubs +setStubKibanaServices(); + +// Mock the dashboard services +jest.mock('./public/services/dashboard_content_management_service', () => { + return { + getDashboardContentManagementCache: () => mockDashboardContentManagementCache, + getDashboardContentManagementService: () => mockDashboardContentManagementService, + }; +}); + +jest.mock('./public/services/dashboard_backup_service', () => { + return { + getDashboardBackupService: () => mockDashboardBackupService, + }; +}); + +jest.mock('./public/services/dashboard_recently_accessed_service', () => { + return { + getDashboardRecentlyAccessedService: () => ({ + add: jest.fn(), + get: jest.fn(), + get$: jest.fn(), + }), + }; +}); diff --git a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx index 95eab08a83cc..acd46f2763bb 100644 --- a/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/add_to_library_action.tsx @@ -8,34 +8,36 @@ */ import React from 'react'; + +import { PresentationContainer } from '@kbn/presentation-containers'; import { - apiCanAccessViewMode, - apiHasLibraryTransforms, - EmbeddableApiContext, - getPanelTitle, - PublishesPanelTitle, CanAccessViewMode, - getInheritedViewMode, + EmbeddableApiContext, + HasInPlaceLibraryTransforms, HasLibraryTransforms, + HasParentApi, HasType, HasTypeDisplayName, - apiHasType, HasUniqueId, - HasParentApi, - apiHasUniqueId, - apiHasParentApi, - HasInPlaceLibraryTransforms, + PublishesPanelTitle, + apiCanAccessViewMode, apiHasInPlaceLibraryTransforms, + apiHasLibraryTransforms, + apiHasParentApi, + apiHasType, + apiHasUniqueId, + getInheritedViewMode, + getPanelTitle, } from '@kbn/presentation-publishing'; import { OnSaveProps, - SavedObjectSaveModal, SaveResult, + SavedObjectSaveModal, showSaveModal, } from '@kbn/saved-objects-plugin/public'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { PresentationContainer } from '@kbn/presentation-containers'; -import { pluginServices } from '../services/plugin_services'; + +import { coreServices } from '../services/kibana_services'; import { dashboardAddToLibraryActionStrings } from './_dashboard_actions_strings'; export const ACTION_ADD_TO_LIBRARY = 'saveToLibrary'; @@ -62,14 +64,6 @@ export class AddToLibraryAction implements Action { public readonly id = ACTION_ADD_TO_LIBRARY; public order = 8; - private toastsService; - - constructor() { - ({ - notifications: { toasts: this.toastsService }, - } = pluginServices.getServices()); - } - public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); return dashboardAddToLibraryActionStrings.getDisplayName(); @@ -134,12 +128,12 @@ export class AddToLibraryAction implements Action { initialState: byRefState, }); } - this.toastsService.addSuccess({ + coreServices.notifications.toasts.addSuccess({ title: dashboardAddToLibraryActionStrings.getSuccessMessage(title ? `'${title}'` : ''), 'data-test-subj': 'addPanelToLibrarySuccess', }); } catch (e) { - this.toastsService.addDanger({ + coreServices.notifications.toasts.addDanger({ title: dashboardAddToLibraryActionStrings.getErrorMessage(title), 'data-test-subj': 'addPanelToLibraryError', }); diff --git a/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx b/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx index 856ef173168f..5eec25f1f052 100644 --- a/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/clone_panel_action.tsx @@ -42,8 +42,6 @@ export class ClonePanelAction implements Action { public readonly id = ACTION_CLONE_PANEL; public order = 45; - constructor() {} - public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); return dashboardClonePanelActionStrings.getDisplayName(); diff --git a/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx b/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx index 83762f407f42..fb3188691977 100644 --- a/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_action.tsx @@ -9,26 +9,26 @@ import React from 'react'; -import { CoreStart } from '@kbn/core-lifecycle-browser'; import { - apiIsOfType, - apiHasUniqueId, - apiHasParentApi, - apiPublishesSavedObjectId, - HasType, EmbeddableApiContext, - HasUniqueId, HasParentApi, + HasType, + HasUniqueId, PublishesSavedObjectId, + apiHasParentApi, + apiHasUniqueId, + apiIsOfType, + apiPublishesSavedObjectId, } from '@kbn/presentation-publishing'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { DASHBOARD_CONTAINER_TYPE } from '../dashboard_container'; import { DashboardApi } from '../dashboard_api/types'; -import { pluginServices } from '../services/plugin_services'; -import { CopyToDashboardModal } from './copy_to_dashboard_modal'; +import { DASHBOARD_CONTAINER_TYPE } from '../dashboard_container'; +import { coreServices } from '../services/kibana_services'; +import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; import { dashboardCopyToDashboardActionStrings } from './_dashboard_actions_strings'; +import { CopyToDashboardModal } from './copy_to_dashboard_modal'; export const ACTION_COPY_TO_DASHBOARD = 'copyToDashboard'; @@ -60,16 +60,6 @@ export class CopyToDashboardAction implements Action { public readonly id = ACTION_COPY_TO_DASHBOARD; public order = 1; - private dashboardCapabilities; - private openModal; - - constructor(private core: CoreStart) { - ({ - dashboardCapabilities: this.dashboardCapabilities, - overlays: { openModal: this.openModal }, - } = pluginServices.getServices()); - } - public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!apiIsCompatible(embeddable)) throw new IncompatibleActionError(); @@ -84,15 +74,15 @@ export class CopyToDashboardAction implements Action { public async isCompatible({ embeddable }: EmbeddableApiContext) { if (!apiIsCompatible(embeddable)) return false; const { createNew: canCreateNew, showWriteControls: canEditExisting } = - this.dashboardCapabilities; + getDashboardCapabilities(); return Boolean(canCreateNew || canEditExisting); } public async execute({ embeddable }: EmbeddableApiContext) { if (!apiIsCompatible(embeddable)) throw new IncompatibleActionError(); - const { theme, i18n } = this.core; - const session = this.openModal( + const { theme, i18n } = coreServices; + const session = coreServices.overlays.openModal( toMountPoint( session.close()} api={embeddable} />, { theme, i18n, diff --git a/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx b/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx index 06af2abbe0b0..66b0ed367481 100644 --- a/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/copy_to_dashboard_modal.tsx @@ -22,11 +22,12 @@ import { EmbeddablePackageState, PanelNotFoundError } from '@kbn/embeddable-plug import { apiHasSnapshottableState } from '@kbn/presentation-containers/interfaces/serialized_state'; import { LazyDashboardPicker, withSuspense } from '@kbn/presentation-util-plugin/public'; import { omit } from 'lodash'; -import React, { useCallback, useState } from 'react'; -import { createDashboardEditUrl, CREATE_NEW_DASHBOARD_URL } from '../dashboard_constants'; -import { pluginServices } from '../services/plugin_services'; -import { CopyToDashboardAPI } from './copy_to_dashboard_action'; +import React, { useCallback, useMemo, useState } from 'react'; +import { CREATE_NEW_DASHBOARD_URL, createDashboardEditUrl } from '../dashboard_constants'; +import { embeddableService } from '../services/kibana_services'; +import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; import { dashboardCopyToDashboardActionStrings } from './_dashboard_actions_strings'; +import { CopyToDashboardAPI } from './copy_to_dashboard_action'; interface CopyToDashboardModalProps { api: CopyToDashboardAPI; @@ -36,11 +37,11 @@ interface CopyToDashboardModalProps { const DashboardPicker = withSuspense(LazyDashboardPicker); export function CopyToDashboardModal({ api, closeModal }: CopyToDashboardModalProps) { - const { - embeddable: { getStateTransfer }, - dashboardCapabilities: { createNew: canCreateNew, showWriteControls: canEditExisting }, - } = pluginServices.getServices(); - const stateTransfer = getStateTransfer(); + const stateTransfer = useMemo(() => embeddableService.getStateTransfer(), []); + const { createNew: canCreateNew, showWriteControls: canEditExisting } = useMemo( + () => getDashboardCapabilities(), + [] + ); const [dashboardOption, setDashboardOption] = useState<'new' | 'existing'>('existing'); const [selectedDashboard, setSelectedDashboard] = useState<{ id: string; name: string } | null>( diff --git a/src/plugins/dashboard/public/dashboard_actions/expand_panel_action.tsx b/src/plugins/dashboard/public/dashboard_actions/expand_panel_action.tsx index 8a375734ef1e..b4f2a06e6895 100644 --- a/src/plugins/dashboard/public/dashboard_actions/expand_panel_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/expand_panel_action.tsx @@ -31,8 +31,6 @@ export class ExpandPanelAction implements Action { public readonly id = ACTION_EXPAND_PANEL; public order = 7; - constructor() {} - public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); return embeddable.parentApi.expandedPanelId.value diff --git a/src/plugins/dashboard/public/dashboard_actions/export_csv_action.tsx b/src/plugins/dashboard/public/dashboard_actions/export_csv_action.tsx index fa8f8640cbb3..fd55816134ed 100644 --- a/src/plugins/dashboard/public/dashboard_actions/export_csv_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/export_csv_action.tsx @@ -14,16 +14,16 @@ import { downloadMultipleAs } from '@kbn/share-plugin/public'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import { - apiHasInspectorAdapters, HasInspectorAdapters, + apiHasInspectorAdapters, type Adapters, } from '@kbn/inspector-plugin/public'; import { EmbeddableApiContext, - getPanelTitle, PublishesPanelTitle, + getPanelTitle, } from '@kbn/presentation-publishing'; -import { pluginServices } from '../services/plugin_services'; +import { coreServices, fieldFormatService } from '../services/kibana_services'; import { dashboardExportCsvActionStrings } from './_dashboard_actions_strings'; export const ACTION_EXPORT_CSV = 'ACTION_EXPORT_CSV'; @@ -43,16 +43,6 @@ export class ExportCSVAction implements Action { public readonly type = ACTION_EXPORT_CSV; public readonly order = 18; // right after Export in discover which is 19 - private fieldFormats; - private uiSettings; - - constructor() { - ({ - data: { fieldFormats: this.fieldFormats }, - settings: { uiSettings: this.uiSettings }, - } = pluginServices.getServices()); - } - public getIconType() { return 'exportAction'; } @@ -70,9 +60,7 @@ export class ExportCSVAction implements Action { }; private getFormatter = (): FormatFactory | undefined => { - if (this.fieldFormats) { - return this.fieldFormats.deserialize; - } + return fieldFormatService.deserialize; }; private getDataTableContent = (adapters: Adapters | undefined) => { @@ -105,8 +93,8 @@ export class ExportCSVAction implements Action { memo[`${getPanelTitle(embeddable) || untitledFilename}${postFix}.csv`] = { content: exporters.datatableToCSV(datatable, { - csvSeparator: this.uiSettings.get('csv:separator', ','), - quoteValues: this.uiSettings.get('csv:quoteValues', true), + csvSeparator: coreServices.uiSettings.get('csv:separator', ','), + quoteValues: coreServices.uiSettings.get('csv:quoteValues', true), formatFactory, escapeFormulaValues: false, }), diff --git a/src/plugins/dashboard/public/dashboard_actions/filters_notification_action.tsx b/src/plugins/dashboard/public/dashboard_actions/filters_notification_action.tsx index ef179c006666..854ff5da948f 100644 --- a/src/plugins/dashboard/public/dashboard_actions/filters_notification_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/filters_notification_action.tsx @@ -8,28 +8,28 @@ */ import React from 'react'; +import { merge } from 'rxjs'; import { isOfAggregateQueryType, isOfQueryType } from '@kbn/es-query'; import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public'; -import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; - import { - apiCanAccessViewMode, - apiPublishesPartialUnifiedSearch, - apiHasUniqueId, CanAccessViewMode, EmbeddableApiContext, - getInheritedViewMode, - getViewModeSubject, HasParentApi, - PublishesUnifiedSearch, HasUniqueId, PublishesDataViews, + PublishesUnifiedSearch, + apiCanAccessViewMode, + apiHasUniqueId, + apiPublishesPartialUnifiedSearch, + getInheritedViewMode, + getViewModeSubject, } from '@kbn/presentation-publishing'; -import { merge } from 'rxjs'; -import { pluginServices } from '../services/plugin_services'; -import { FiltersNotificationPopover } from './filters_notification_popover'; +import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; + +import { coreServices } from '../services/kibana_services'; import { dashboardFilterNotificationActionStrings } from './_dashboard_actions_strings'; +import { FiltersNotificationPopover } from './filters_notification_popover'; export const BADGE_FILTERS_NOTIFICATION = 'ACTION_FILTERS_NOTIFICATION'; @@ -58,18 +58,12 @@ export class FiltersNotificationAction implements Action { public readonly type = BADGE_FILTERS_NOTIFICATION; public readonly order = 2; - private settingsService; - - constructor() { - ({ settings: this.settingsService } = pluginServices.getServices()); - } - public readonly MenuItem = ({ context }: { context: EmbeddableApiContext }) => { const { embeddable } = context; if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); const { Provider: KibanaReactContextProvider } = createKibanaReactContext({ - uiSettings: this.settingsService.uiSettings, + uiSettings: coreServices.uiSettings, }); return ( diff --git a/src/plugins/dashboard/public/dashboard_actions/index.ts b/src/plugins/dashboard/public/dashboard_actions/index.ts index 30f6819bd37d..55a371719d95 100644 --- a/src/plugins/dashboard/public/dashboard_actions/index.ts +++ b/src/plugins/dashboard/public/dashboard_actions/index.ts @@ -7,7 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { CoreStart } from '@kbn/core/public'; import { CONTEXT_MENU_TRIGGER, PANEL_NOTIFICATION_TRIGGER } from '@kbn/embeddable-plugin/public'; import { DashboardStartDependencies } from '../plugin'; import { AddToLibraryAction } from './add_to_library_action'; @@ -21,13 +20,11 @@ import { UnlinkFromLibraryAction } from './unlink_from_library_action'; import { LegacyUnlinkFromLibraryAction } from './legacy_unlink_from_library_action'; interface BuildAllDashboardActionsProps { - core: CoreStart; allowByValueEmbeddables?: boolean; plugins: DashboardStartDependencies; } export const buildAllDashboardActions = async ({ - core, plugins, allowByValueEmbeddables, }: BuildAllDashboardActionsProps) => { @@ -66,7 +63,7 @@ export const buildAllDashboardActions = async ({ uiActions.registerAction(legacyUnlinkFromLibraryAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, legacyUnlinkFromLibraryAction.id); - const copyToDashboardAction = new CopyToDashboardAction(core); + const copyToDashboardAction = new CopyToDashboardAction(); uiActions.registerAction(copyToDashboardAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, copyToDashboardAction.id); } diff --git a/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.test.tsx b/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.test.tsx index 7495439e2164..60367d7950d2 100644 --- a/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.test.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.test.tsx @@ -9,11 +9,11 @@ import { PublishesViewMode, ViewMode } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; -import { pluginServices } from '../services/plugin_services'; import { LegacyAddToLibraryAction, LegacyAddPanelToLibraryActionApi, } from './legacy_add_to_library_action'; +import { coreServices } from '../services/kibana_services'; describe('Add to library action', () => { let action: LegacyAddToLibraryAction; @@ -62,7 +62,7 @@ describe('Add to library action', () => { it('shows a toast with a title from the API when successful', async () => { await action.execute(context); - expect(pluginServices.getServices().notifications.toasts.addSuccess).toHaveBeenCalledWith({ + expect(coreServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ 'data-test-subj': 'addPanelToLibrarySuccess', title: "Panel 'A very compatible API' was added to the library", }); @@ -71,7 +71,7 @@ describe('Add to library action', () => { it('shows a danger toast when the link operation is unsuccessful', async () => { context.embeddable.linkToLibrary = jest.fn().mockRejectedValue(new Error('Oh dang')); await action.execute(context); - expect(pluginServices.getServices().notifications.toasts.addDanger).toHaveBeenCalledWith({ + expect(coreServices.notifications.toasts.addDanger).toHaveBeenCalledWith({ 'data-test-subj': 'addPanelToLibraryError', title: 'An error was encountered adding panel A very compatible API to the library', }); diff --git a/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx b/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx index e48fa3a02bd1..dee049dc2874 100644 --- a/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/legacy_add_to_library_action.tsx @@ -18,8 +18,9 @@ import { HasLegacyLibraryTransforms, } from '@kbn/presentation-publishing'; import { Action, IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import { pluginServices } from '../services/plugin_services'; + import { dashboardAddToLibraryActionStrings } from './_dashboard_actions_strings'; +import { coreServices } from '../services/kibana_services'; export const ACTION_LEGACY_ADD_TO_LIBRARY = 'legacySaveToLibrary'; @@ -35,14 +36,6 @@ export class LegacyAddToLibraryAction implements Action { public readonly id = ACTION_LEGACY_ADD_TO_LIBRARY; public order = 15; - private toastsService; - - constructor() { - ({ - notifications: { toasts: this.toastsService }, - } = pluginServices.getServices()); - } - public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); return dashboardAddToLibraryActionStrings.getDisplayName(); @@ -63,14 +56,14 @@ export class LegacyAddToLibraryAction implements Action { const panelTitle = getPanelTitle(embeddable); try { await embeddable.linkToLibrary(); - this.toastsService.addSuccess({ + coreServices.notifications.toasts.addSuccess({ title: dashboardAddToLibraryActionStrings.getSuccessMessage( panelTitle ? `'${panelTitle}'` : '' ), 'data-test-subj': 'addPanelToLibrarySuccess', }); } catch (e) { - this.toastsService.addDanger({ + coreServices.notifications.toasts.addDanger({ title: dashboardAddToLibraryActionStrings.getErrorMessage(panelTitle), 'data-test-subj': 'addPanelToLibraryError', }); diff --git a/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.test.tsx b/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.test.tsx index 135aac2cbf86..7a7e8836a305 100644 --- a/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.test.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.test.tsx @@ -9,7 +9,7 @@ import { PublishesViewMode, ViewMode } from '@kbn/presentation-publishing'; import { BehaviorSubject } from 'rxjs'; -import { pluginServices } from '../services/plugin_services'; +import { coreServices } from '../services/kibana_services'; import { LegacyUnlinkFromLibraryAction, LegacyUnlinkPanelFromLibraryActionApi, @@ -61,7 +61,7 @@ describe('Unlink from library action', () => { it('shows a toast with a title from the API when successful', async () => { await action.execute(context); - expect(pluginServices.getServices().notifications.toasts.addSuccess).toHaveBeenCalledWith({ + expect(coreServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ 'data-test-subj': 'unlinkPanelSuccess', title: "Panel 'A very compatible API' is no longer connected to the library.", }); @@ -70,7 +70,7 @@ describe('Unlink from library action', () => { it('shows a danger toast when the link operation is unsuccessful', async () => { context.embeddable.unlinkFromLibrary = jest.fn().mockRejectedValue(new Error('Oh dang')); await action.execute(context); - expect(pluginServices.getServices().notifications.toasts.addDanger).toHaveBeenCalledWith({ + expect(coreServices.notifications.toasts.addDanger).toHaveBeenCalledWith({ 'data-test-subj': 'unlinkPanelFailure', title: "An error occured while unlinking 'A very compatible API' from the library.", }); diff --git a/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx b/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx index 40e2ca12e42c..96daab215dec 100644 --- a/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx +++ b/src/plugins/dashboard/public/dashboard_actions/legacy_unlink_from_library_action.tsx @@ -19,8 +19,8 @@ import { PublishesPanelTitle, HasLegacyLibraryTransforms, } from '@kbn/presentation-publishing'; -import { pluginServices } from '../services/plugin_services'; import { dashboardUnlinkFromLibraryActionStrings } from './_dashboard_actions_strings'; +import { coreServices } from '../services/kibana_services'; export const ACTION_LEGACY_UNLINK_FROM_LIBRARY = 'legacyUnlinkFromLibrary'; @@ -38,14 +38,6 @@ export class LegacyUnlinkFromLibraryAction implements Action { public readonly id = ACTION_UNLINK_FROM_LIBRARY; public order = 15; - private toastsService; - - constructor() { - ({ - notifications: { toasts: this.toastsService }, - } = pluginServices.getServices()); - } - public getDisplayName({ embeddable }: EmbeddableApiContext) { if (!isApiCompatible(embeddable)) throw new IncompatibleActionError(); return dashboardUnlinkFromLibraryActionStrings.getDisplayName(); @@ -107,12 +99,12 @@ export class UnlinkFromLibraryAction implements Action { } else { throw new IncompatibleActionError(); } - this.toastsService.addSuccess({ + coreServices.notifications.toasts.addSuccess({ title: dashboardUnlinkFromLibraryActionStrings.getSuccessMessage(title ? `'${title}'` : ''), 'data-test-subj': 'unlinkPanelSuccess', }); } catch (e) { - this.toastsService.addDanger({ + coreServices.notifications.toasts.addDanger({ title: dashboardUnlinkFromLibraryActionStrings.getFailureMessage(title ? `'${title}'` : ''), 'data-test-subj': 'unlinkPanelFailure', }); diff --git a/src/plugins/dashboard/public/dashboard_api/types.ts b/src/plugins/dashboard/public/dashboard_api/types.ts index 01d12c27ce44..bdd72afe9dc4 100644 --- a/src/plugins/dashboard/public/dashboard_api/types.ts +++ b/src/plugins/dashboard/public/dashboard_api/types.ts @@ -31,7 +31,7 @@ import { ControlGroupApi, ControlGroupSerializedState } from '@kbn/controls-plug import { Filter, Query, TimeRange } from '@kbn/es-query'; import { DefaultEmbeddableApi, ErrorEmbeddable, IEmbeddable } from '@kbn/embeddable-plugin/public'; import { DashboardPanelMap, DashboardPanelState } from '../../common'; -import { SaveDashboardReturn } from '../services/dashboard_content_management/types'; +import { SaveDashboardReturn } from '../services/dashboard_content_management_service/types'; import { DashboardStateFromSettingsFlyout, UnsavedPanelState } from '../dashboard_container/types'; export type DashboardApi = CanExpandPanels & diff --git a/src/plugins/dashboard/public/dashboard_app/dashboard_app.test.tsx b/src/plugins/dashboard/public/dashboard_app/dashboard_app.test.tsx index f04528e7bde2..2bed3ce44ea6 100644 --- a/src/plugins/dashboard/public/dashboard_app/dashboard_app.test.tsx +++ b/src/plugins/dashboard/public/dashboard_app/dashboard_app.test.tsx @@ -7,22 +7,25 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { render, waitFor } from '@testing-library/react'; import { MemoryHistory, createMemoryHistory } from 'history'; import React, { useEffect } from 'react'; + +import { render, waitFor } from '@testing-library/react'; + +import { DashboardApi } from '..'; import type { DashboardRendererProps } from '../dashboard_container/external_api/dashboard_renderer'; +import { LazyDashboardRenderer } from '../dashboard_container/external_api/lazy_dashboard_renderer'; +import { DashboardTopNav } from '../dashboard_top_nav'; import { buildMockDashboard } from '../mocks'; +import { dataService } from '../services/kibana_services'; import { DashboardApp } from './dashboard_app'; -import * as dashboardRendererStuff from '../dashboard_container/external_api/lazy_dashboard_renderer'; -import { DashboardApi } from '..'; - -/* These tests circumvent the need to test the router and legacy code -/* the dashboard app will be passed the expanded panel id from the DashboardRouter through mountApp() -/* @link https://github.com/elastic/kibana/pull/190086/ -*/ +jest.mock('../dashboard_container/external_api/lazy_dashboard_renderer'); +jest.mock('../dashboard_top_nav'); describe('Dashboard App', () => { + dataService.query.filterManager.getFilters = jest.fn().mockImplementation(() => []); + const mockDashboard = buildMockDashboard(); let mockHistory: MemoryHistory; // this is in url_utils dashboardApi expandedPanel subscription @@ -35,19 +38,20 @@ describe('Dashboard App', () => { historySpy = jest.spyOn(mockHistory, 'replace'); /** - * Mock the LazyDashboardRenderer component to avoid rendering the actual dashboard + * Mock the DashboardTopNav + LazyDashboardRenderer component to avoid rendering the actual dashboard * and hitting errors that aren't relevant */ - jest - .spyOn(dashboardRendererStuff, 'LazyDashboardRenderer') - // we need overwrite the onApiAvailable prop to get the dashboard Api in the dashboard app - .mockImplementation(({ onApiAvailable }: DashboardRendererProps) => { + (DashboardTopNav as jest.Mock).mockImplementation(() => <>Top nav); + (LazyDashboardRenderer as jest.Mock).mockImplementation( + ({ onApiAvailable }: DashboardRendererProps) => { + // we need overwrite the onApiAvailable prop to get access to the dashboard API in this test useEffect(() => { onApiAvailable?.(mockDashboard as DashboardApi); }, [onApiAvailable]); return
Test renderer
; - }); + } + ); }); beforeEach(() => { diff --git a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx index 759d817432c6..ecb62bf8fc2b 100644 --- a/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx +++ b/src/plugins/dashboard/public/dashboard_app/dashboard_app.tsx @@ -7,46 +7,52 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { v4 as uuidv4 } from 'uuid'; import { History } from 'history'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import useMount from 'react-use/lib/useMount'; import useObservable from 'react-use/lib/useObservable'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { debounceTime } from 'rxjs'; +import { v4 as uuidv4 } from 'uuid'; +import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; import { createKbnUrlStateStorage, withNotifyOnErrors } from '@kbn/kibana-utils-plugin/public'; -import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; -import { debounceTime } from 'rxjs'; -import { - DashboardAppNoDataPage, - isDashboardAppInNoDataState, -} from './no_data/dashboard_app_no_data'; -import { loadAndRemoveDashboardState, startSyncingExpandedPanelState } from './url/url_utils'; -import { - getSessionURLObservable, - getSearchSessionIdFromURL, - removeSearchSessionIdFromURL, - createSessionRestorationDataProvider, -} from './url/search_sessions_integration'; import { DashboardApi, DashboardRenderer } from '..'; -import { type DashboardEmbedSettings } from './types'; -import { pluginServices } from '../services/plugin_services'; -import { DashboardRedirect } from '../dashboard_container/types'; -import { useDashboardMountContext } from './hooks/dashboard_mount_context'; +import { SharedDashboardState } from '../../common'; import { - createDashboardEditUrl, DASHBOARD_APP_ID, DASHBOARD_STATE_STORAGE_KEY, + createDashboardEditUrl, } from '../dashboard_constants'; -import { useDashboardOutcomeValidation } from './hooks/use_dashboard_outcome_validation'; -import { loadDashboardHistoryLocationState } from './locator/load_dashboard_history_location_state'; import type { DashboardCreationOptions } from '../dashboard_container/embeddable/dashboard_container_factory'; +import { DashboardRedirect } from '../dashboard_container/types'; import { DashboardTopNav } from '../dashboard_top_nav'; -import { DashboardTabTitleSetter } from './tab_title_setter/dashboard_tab_title_setter'; +import { + coreServices, + dataService, + embeddableService, + screenshotModeService, + shareService, +} from '../services/kibana_services'; +import { useDashboardMountContext } from './hooks/dashboard_mount_context'; +import { useDashboardOutcomeValidation } from './hooks/use_dashboard_outcome_validation'; import { useObservabilityAIAssistantContext } from './hooks/use_observability_ai_assistant_context'; -import { SharedDashboardState } from '../../common'; +import { loadDashboardHistoryLocationState } from './locator/load_dashboard_history_location_state'; +import { + DashboardAppNoDataPage, + isDashboardAppInNoDataState, +} from './no_data/dashboard_app_no_data'; +import { DashboardTabTitleSetter } from './tab_title_setter/dashboard_tab_title_setter'; +import { type DashboardEmbedSettings } from './types'; +import { + createSessionRestorationDataProvider, + getSearchSessionIdFromURL, + getSessionURLObservable, + removeSearchSessionIdFromURL, +} from './url/search_sessions_integration'; +import { loadAndRemoveDashboardState, startSyncingExpandedPanelState } from './url/url_utils'; export interface DashboardAppProps { history: History; @@ -71,31 +77,15 @@ export function DashboardApp({ }); const [dashboardApi, setDashboardApi] = useState(undefined); - /** - * Unpack & set up dashboard services - */ - const { - screenshotMode: { isScreenshotMode, getScreenshotContext }, - coreContext: { executionContext }, - embeddable: { getStateTransfer }, - notifications: { toasts }, - settings: { uiSettings }, - data: { search, dataViews }, - customBranding, - share: { url }, - observabilityAIAssistant, - } = pluginServices.getServices(); - const showPlainSpinner = useObservable(customBranding.hasCustomBranding$, false); + const showPlainSpinner = useObservable(coreServices.customBranding.hasCustomBranding$, false); + const { scopedHistory: getScopedHistory } = useDashboardMountContext(); useObservabilityAIAssistantContext({ - observabilityAIAssistant: observabilityAIAssistant.start, dashboardApi, - search, - dataViews, }); - useExecutionContext(executionContext, { + useExecutionContext(coreServices.executionContext, { type: 'application', page: 'app', id: savedDashboardId || 'new', @@ -105,10 +95,10 @@ export function DashboardApp({ () => createKbnUrlStateStorage({ history, - useHash: uiSettings.get('state:storeInSessionStorage'), - ...withNotifyOnErrors(toasts), + useHash: coreServices.uiSettings.get('state:storeInSessionStorage'), + ...withNotifyOnErrors(coreServices.notifications.toasts), }), - [toasts, history, uiSettings] + [history] ); /** @@ -116,9 +106,9 @@ export function DashboardApp({ */ useEffect(() => { return () => { - search.session.clear(); + dataService.search.session.clear(); }; - }, [search.session]); + }, []); /** * Validate saved object load outcome @@ -141,7 +131,8 @@ export function DashboardApp({ ...stateFromLocator, // if print mode is active, force viewMode.PRINT - ...(isScreenshotMode() && getScreenshotContext('layout') === 'print' + ...(screenshotModeService.isScreenshotMode() && + screenshotModeService.getScreenshotContext('layout') === 'print' ? { viewMode: ViewMode.PRINT } : {}), }; @@ -149,7 +140,7 @@ export function DashboardApp({ return Promise.resolve({ getIncomingEmbeddable: () => - getStateTransfer().getIncomingEmbeddablePackage(DASHBOARD_APP_ID, true), + embeddableService.getStateTransfer().getIncomingEmbeddablePackage(DASHBOARD_APP_ID, true), // integrations useControlGroupIntegration: true, @@ -174,16 +165,7 @@ export function DashboardApp({ getCurrentPath: () => `#${createDashboardEditUrl(dashboardId)}`, }), }); - }, [ - history, - embedSettings, - validateOutcome, - getScopedHistory, - isScreenshotMode, - getStateTransfer, - kbnUrlStateStorage, - getScreenshotContext, - ]); + }, [history, embedSettings, validateOutcome, getScopedHistory, kbnUrlStateStorage]); useEffect(() => { if (!dashboardApi) return; @@ -208,7 +190,7 @@ export function DashboardApp({ return () => appStateSubscription.unsubscribe(); }, [dashboardApi, kbnUrlStateStorage, savedDashboardId]); - const locator = useMemo(() => url?.locators.get(DASHBOARD_APP_LOCATOR), [url]); + const locator = useMemo(() => shareService?.url.locators.get(DASHBOARD_APP_LOCATOR), []); return showNoDataPage ? ( setShowNoDataPage(false)} /> diff --git a/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx b/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx index 8449ed9de108..6ceaede806fe 100644 --- a/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx +++ b/src/plugins/dashboard/public/dashboard_app/dashboard_router.tsx @@ -9,32 +9,33 @@ import './_dashboard_app.scss'; -import React from 'react'; -import { parse, ParsedQuery } from 'query-string'; -import { render, unmountComponentAtNode } from 'react-dom'; -import { HashRouter, RouteComponentProps, Redirect } from 'react-router-dom'; -import { Routes, Route } from '@kbn/shared-ux-router'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; import { AppMountParameters, CoreStart } from '@kbn/core/public'; -import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; import { createKbnUrlStateStorage, withNotifyOnErrors } from '@kbn/kibana-utils-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { Route, Routes } from '@kbn/shared-ux-router'; +import { parse, ParsedQuery } from 'query-string'; +import React from 'react'; +import { render, unmountComponentAtNode } from 'react-dom'; +import { HashRouter, Redirect, RouteComponentProps } from 'react-router-dom'; import { - createDashboardListingFilterUrl, CREATE_NEW_DASHBOARD_URL, + createDashboardEditUrl, + createDashboardListingFilterUrl, DASHBOARD_APP_ID, LANDING_PAGE_PATH, VIEW_DASHBOARD_URL, } from '../dashboard_constants'; -import { DashboardApp } from './dashboard_app'; -import { pluginServices } from '../services/plugin_services'; import { RedirectToProps } from '../dashboard_container/types'; -import { createDashboardEditUrl } from '../dashboard_constants'; -import { DashboardNoMatch } from './listing_page/dashboard_no_match'; +import { coreServices, dataService, embeddableService } from '../services/kibana_services'; +import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; +import { dashboardReadonlyBadge, getDashboardPageTitle } from './_dashboard_app_strings'; +import { DashboardApp } from './dashboard_app'; import { DashboardMountContext } from './hooks/dashboard_mount_context'; -import { DashboardEmbedSettings, DashboardMountContextProps } from './types'; import { DashboardListingPage } from './listing_page/dashboard_listing_page'; -import { dashboardReadonlyBadge, getDashboardPageTitle } from './_dashboard_app_strings'; +import { DashboardNoMatch } from './listing_page/dashboard_no_match'; +import { DashboardEmbedSettings, DashboardMountContextProps } from './types'; export const dashboardUrlParams = { showTopMenu: 'show-top-menu', @@ -56,24 +57,13 @@ export async function mountApp({ appUnMounted, mountContext, }: DashboardMountProps) { - const { - chrome: { setBadge, docTitle, setHelpExtension }, - dashboardCapabilities: { showWriteControls }, - documentationLinks: { dashboardDocLink }, - application: { navigateToApp }, - settings: { uiSettings }, - data: dataStart, - notifications, - embeddable, - } = pluginServices.getServices(); - let globalEmbedSettings: DashboardEmbedSettings | undefined; const getUrlStateStorage = (history: RouteComponentProps['history']) => createKbnUrlStateStorage({ history, - useHash: uiSettings.get('state:storeInSessionStorage'), - ...withNotifyOnErrors(notifications.toasts), + useHash: coreServices.uiSettings.get('state:storeInSessionStorage'), + ...withNotifyOnErrors(coreServices.notifications.toasts), }); const redirect = (redirectTo: RedirectToProps) => { @@ -87,7 +77,11 @@ export async function mountApp({ } else { path = createDashboardListingFilterUrl(redirectTo.filter); } - navigateToApp(DASHBOARD_APP_ID, { path: `#/${path}`, state, replace: redirectTo.useReplace }); + coreServices.application.navigateToApp(DASHBOARD_APP_ID, { + path: `#/${path}`, + state, + replace: redirectTo.useReplace, + }); }; const getDashboardEmbedSettings = ( @@ -120,7 +114,7 @@ export async function mountApp({ }; const renderListingPage = (routeProps: RouteComponentProps) => { - docTitle.change(getDashboardPageTitle()); + coreServices.chrome.docTitle.change(getDashboardPageTitle()); const routeParams = parse(routeProps.history.location.search); const title = (routeParams.title as string) || undefined; const filter = (routeParams.filter as string) || undefined; @@ -139,10 +133,10 @@ export async function mountApp({ }; const hasEmbeddableIncoming = Boolean( - embeddable.getStateTransfer().getIncomingEmbeddablePackage(DASHBOARD_APP_ID, false) + embeddableService.getStateTransfer().getIncomingEmbeddablePackage(DASHBOARD_APP_ID, false) ); if (!hasEmbeddableIncoming) { - dataStart.dataViews.clearCache(); + dataService.dataViews.clearCache(); } // dispatch synthetic hash change event to update hash history objects @@ -175,18 +169,18 @@ export async function mountApp({ ); - setHelpExtension({ + coreServices.chrome.setHelpExtension({ appName: getDashboardPageTitle(), links: [ { linkType: 'documentation', - href: `${dashboardDocLink}`, + href: `${coreServices.docLinks.links.dashboard.guide}`, }, ], }); - if (!showWriteControls) { - setBadge({ + if (!getDashboardCapabilities().showWriteControls) { + coreServices.chrome.setBadge({ text: dashboardReadonlyBadge.getText(), tooltip: dashboardReadonlyBadge.getTooltip(), iconType: 'glasses', @@ -194,7 +188,7 @@ export async function mountApp({ } render(app, element); return () => { - dataStart.search.session.clear(); + dataService.search.session.clear(); unlistenParentHistory(); unmountComponentAtNode(element); appUnMounted(); diff --git a/src/plugins/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx b/src/plugins/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx index 493c5b5f1c67..fbcdb82ec341 100644 --- a/src/plugins/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx +++ b/src/plugins/dashboard/public/dashboard_app/hooks/use_dashboard_outcome_validation.tsx @@ -9,11 +9,11 @@ import { useCallback, useMemo, useState } from 'react'; -import { pluginServices } from '../../services/plugin_services'; +import { DashboardCreationOptions } from '../..'; import { createDashboardEditUrl } from '../../dashboard_constants'; +import { LoadDashboardReturn } from '../../services/dashboard_content_management_service/types'; +import { screenshotModeService, spacesService } from '../../services/kibana_services'; import { useDashboardMountContext } from './dashboard_mount_context'; -import { LoadDashboardReturn } from '../../services/dashboard_content_management/types'; -import { DashboardCreationOptions } from '../..'; export const useDashboardOutcomeValidation = () => { const [aliasId, setAliasId] = useState(); @@ -23,11 +23,6 @@ export const useDashboardOutcomeValidation = () => { const { scopedHistory: getScopedHistory } = useDashboardMountContext(); const scopedHistory = getScopedHistory?.(); - /** - * Unpack dashboard services - */ - const { screenshotMode, spaces } = pluginServices.getServices(); - const validateOutcome: DashboardCreationOptions['validateLoadedSavedObject'] = useCallback( ({ dashboardFound, resolveMeta, dashboardId }: LoadDashboardReturn) => { if (!dashboardFound) { @@ -41,10 +36,10 @@ export const useDashboardOutcomeValidation = () => { */ if (loadOutcome === 'aliasMatch' && dashboardId && alias) { const path = scopedHistory.location.hash.replace(dashboardId, alias); - if (screenshotMode.isScreenshotMode()) { + if (screenshotModeService.isScreenshotMode()) { scopedHistory.replace(path); // redirect without the toast when in screenshot mode. } else { - spaces.redirectLegacyUrl?.({ path, aliasPurpose }); + spacesService?.ui.redirectLegacyUrl({ path, aliasPurpose }); } return 'redirected'; // redirected. Stop loading dashboard. } @@ -54,20 +49,20 @@ export const useDashboardOutcomeValidation = () => { } return 'valid'; }, - [scopedHistory, screenshotMode, spaces] + [scopedHistory] ); const getLegacyConflictWarning = useMemo(() => { if (savedObjectId && outcome === 'conflict' && aliasId) { return () => - spaces.getLegacyUrlConflict?.({ + spacesService?.ui.components.getLegacyUrlConflict({ currentObjectId: savedObjectId, otherObjectId: aliasId, otherObjectPath: `#${createDashboardEditUrl(aliasId)}${scopedHistory.location.search}`, }); } return null; - }, [aliasId, outcome, savedObjectId, scopedHistory, spaces]); + }, [aliasId, outcome, savedObjectId, scopedHistory]); return { validateOutcome, getLegacyConflictWarning }; }; diff --git a/src/plugins/dashboard/public/dashboard_app/hooks/use_observability_ai_assistant_context.tsx b/src/plugins/dashboard/public/dashboard_app/hooks/use_observability_ai_assistant_context.tsx index 0348e68f7741..c20e8fcd1dc7 100644 --- a/src/plugins/dashboard/public/dashboard_app/hooks/use_observability_ai_assistant_context.tsx +++ b/src/plugins/dashboard/public/dashboard_app/hooks/use_observability_ai_assistant_context.tsx @@ -7,28 +7,26 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; -import { useEffect } from 'react'; import { getESQLQueryColumns } from '@kbn/esql-utils'; -import type { ISearchStart } from '@kbn/data-plugin/public'; import { LensConfigBuilder, + LensDataset, type LensConfig, - type LensMetricConfig, - type LensPieConfig, type LensGaugeConfig, - type LensXYConfig, type LensHeatmapConfig, + type LensMetricConfig, type LensMosaicConfig, + type LensPieConfig, type LensRegionMapConfig, type LensTableConfig, type LensTagCloudConfig, type LensTreeMapConfig, - LensDataset, + type LensXYConfig, } from '@kbn/lens-embeddable-utils/config_builder'; -import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { LensEmbeddableInput } from '@kbn/lens-plugin/public'; +import { useEffect } from 'react'; import { DashboardApi } from '../../dashboard_api/types'; +import { dataService, observabilityAssistantService } from '../../services/kibana_services'; const chartTypes = [ 'xy', @@ -45,25 +43,19 @@ const chartTypes = [ ] as const; export function useObservabilityAIAssistantContext({ - observabilityAIAssistant, dashboardApi, - search, - dataViews, }: { - observabilityAIAssistant: ObservabilityAIAssistantPublicStart | undefined; dashboardApi: DashboardApi | undefined; - search: ISearchStart; - dataViews: DataViewsPublicPluginStart; }) { useEffect(() => { - if (!observabilityAIAssistant) { + if (!observabilityAssistantService) { return; } const { service: { setScreenContext }, createScreenContextAction, - } = observabilityAIAssistant; + } = observabilityAssistantService; return setScreenContext({ screenDescription: @@ -205,12 +197,12 @@ export function useObservabilityAIAssistantContext({ const [columns] = await Promise.all([ getESQLQueryColumns({ esqlQuery: query, - search: search.search, + search: dataService.search.search, signal, }), ]); - const configBuilder = new LensConfigBuilder(dataViews); + const configBuilder = new LensConfigBuilder(dataService.dataViews); let config: LensConfig; @@ -382,5 +374,5 @@ export function useObservabilityAIAssistantContext({ ] : [], }); - }, [observabilityAIAssistant, dashboardApi, search, dataViews]); + }, [dashboardApi]); } diff --git a/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.test.tsx b/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.test.tsx index 4b0ad49ec9b1..5f41a0a87280 100644 --- a/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.test.tsx +++ b/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.test.tsx @@ -13,7 +13,6 @@ import { mount, ReactWrapper, ComponentType } from 'enzyme'; import { I18nProvider } from '@kbn/i18n-react'; import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; -import { pluginServices } from '../../services/plugin_services'; import { DashboardListingPage, DashboardListingPageProps } from './dashboard_listing_page'; // Mock child components. The Dashboard listing page mostly passes down props to shared UX components which are tested in their own packages. @@ -26,7 +25,12 @@ jest.mock('../../dashboard_listing/dashboard_listing', () => { }); import { DashboardAppNoDataPage } from '../no_data/dashboard_app_no_data'; +import { dataService } from '../../services/kibana_services'; +import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; + +const dashboardContentManagementService = getDashboardContentManagementService(); const mockIsDashboardAppInNoDataState = jest.fn().mockResolvedValue(false); + jest.mock('../no_data/dashboard_app_no_data', () => { const originalModule = jest.requireActual('../no_data/dashboard_app_no_data'); return { @@ -59,9 +63,7 @@ function mountWith({ props: incomingProps }: { props?: DashboardListingPageProps test('renders analytics no data page when the user has no data view', async () => { mockIsDashboardAppInNoDataState.mockResolvedValueOnce(true); - pluginServices.getServices().data.dataViews.hasData.hasUserDataView = jest - .fn() - .mockResolvedValue(false); + dataService.dataViews.hasData.hasUserDataView = jest.fn().mockResolvedValue(false); let component: ReactWrapper; await act(async () => { @@ -93,9 +95,9 @@ test('When given a title that matches multiple dashboards, filter on the title', const props = makeDefaultProps(); props.title = title; - ( - pluginServices.getServices().dashboardContentManagement.findDashboards.findByTitle as jest.Mock - ).mockResolvedValue(undefined); + (dashboardContentManagementService.findDashboards.findByTitle as jest.Mock).mockResolvedValue( + undefined + ); let component: ReactWrapper; @@ -115,9 +117,9 @@ test('When given a title that matches one dashboard, redirect to dashboard', asy const title = 'search by title'; const props = makeDefaultProps(); props.title = title; - ( - pluginServices.getServices().dashboardContentManagement.findDashboards.findByTitle as jest.Mock - ).mockResolvedValue({ id: 'you_found_me' }); + (dashboardContentManagementService.findDashboards.findByTitle as jest.Mock).mockResolvedValue({ + id: 'you_found_me', + }); let component: ReactWrapper; diff --git a/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.tsx b/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.tsx index 9b036ac98f6c..034ee2f8e45f 100644 --- a/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.tsx +++ b/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_listing_page.tsx @@ -9,19 +9,20 @@ import React, { useEffect, useState } from 'react'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; import { syncGlobalQueryStateWithUrl } from '@kbn/data-plugin/public'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; import type { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; +import { DashboardRedirect } from '../../dashboard_container/types'; +import { DashboardListing } from '../../dashboard_listing/dashboard_listing'; +import { coreServices, dataService, serverlessService } from '../../services/kibana_services'; +import { getDashboardBreadcrumb } from '../_dashboard_app_strings'; import { DashboardAppNoDataPage, isDashboardAppInNoDataState, } from '../no_data/dashboard_app_no_data'; -import { pluginServices } from '../../services/plugin_services'; -import { getDashboardBreadcrumb } from '../_dashboard_app_strings'; -import { DashboardRedirect } from '../../dashboard_container/types'; import { getDashboardListItemLink } from './get_dashboard_list_item_link'; -import { DashboardListing } from '../../dashboard_listing/dashboard_listing'; +import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; export interface DashboardListingPageProps { kbnUrlStateStorage: IKbnUrlStateStorage; @@ -36,13 +37,6 @@ export const DashboardListingPage = ({ initialFilter, kbnUrlStateStorage, }: DashboardListingPageProps) => { - const { - data: { query }, - serverless, - chrome: { setBreadcrumbs }, - dashboardContentManagement: { findDashboards }, - } = pluginServices.getServices(); - const [showNoDataPage, setShowNoDataPage] = useState(); useEffect(() => { let isMounted = true; @@ -56,40 +50,42 @@ export const DashboardListingPage = ({ }, []); useEffect(() => { - setBreadcrumbs([ + coreServices.chrome.setBreadcrumbs([ { text: getDashboardBreadcrumb(), }, ]); - if (serverless?.setBreadcrumbs) { + if (serverlessService) { // if serverless breadcrumbs available, // reset any deeper context breadcrumbs to only keep the main "dashboard" part that comes from the navigation config - serverless.setBreadcrumbs([]); + serverlessService.setBreadcrumbs([]); } - }, [setBreadcrumbs, serverless]); + }, []); useEffect(() => { // syncs `_g` portion of url with query services const { stop: stopSyncingQueryServiceStateWithUrl } = syncGlobalQueryStateWithUrl( - query, + dataService.query, kbnUrlStateStorage ); if (title) { - findDashboards.findByTitle(title).then((result) => { - if (!result) return; - redirectTo({ - destination: 'dashboard', - id: result.id, - useReplace: true, + getDashboardContentManagementService() + .findDashboards.findByTitle(title) + .then((result) => { + if (!result) return; + redirectTo({ + destination: 'dashboard', + id: result.id, + useReplace: true, + }); }); - }); } return () => { stopSyncingQueryServiceStateWithUrl(); }; - }, [title, redirectTo, query, kbnUrlStateStorage, findDashboards]); + }, [title, redirectTo, kbnUrlStateStorage]); const titleFilter = title ? `${title}` : ''; diff --git a/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx b/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx index b89f993546cd..3ad35d34b7fd 100644 --- a/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx +++ b/src/plugins/dashboard/public/dashboard_app/listing_page/dashboard_no_match.tsx @@ -10,29 +10,23 @@ import React, { useEffect } from 'react'; import { RouteComponentProps } from 'react-router-dom'; -import { i18n } from '@kbn/i18n'; import { EuiCallOut } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { LANDING_PAGE_PATH } from '../../dashboard_constants'; -import { pluginServices } from '../../services/plugin_services'; +import { coreServices, urlForwardingService } from '../../services/kibana_services'; import { useDashboardMountContext } from '../hooks/dashboard_mount_context'; let bannerId: string | undefined; export const DashboardNoMatch = ({ history }: { history: RouteComponentProps['history'] }) => { const { restorePreviousUrl } = useDashboardMountContext(); - const { - analytics, - settings: { i18n: i18nStart, theme }, - overlays: { banners }, - urlForwarding: { navigateToLegacyKibanaUrl }, - } = pluginServices.getServices(); useEffect(() => { restorePreviousUrl(); - const { navigated } = navigateToLegacyKibanaUrl( + const { navigated } = urlForwardingService.navigateToLegacyKibanaUrl( history.location.pathname + history.location.search ); @@ -41,7 +35,7 @@ export const DashboardNoMatch = ({ history }: { history: RouteComponentProps['hi defaultMessage: 'Page not found', }); - bannerId = banners.replace( + bannerId = coreServices.overlays.banners.replace( bannerId, toMountPoint( @@ -55,28 +49,20 @@ export const DashboardNoMatch = ({ history }: { history: RouteComponentProps['hi />

, - { analytics, i18n: i18nStart, theme } + { analytics: coreServices.analytics, i18n: coreServices.i18n, theme: coreServices.theme } ) ); // hide the message after the user has had a chance to acknowledge it -- so it doesn't permanently stick around setTimeout(() => { if (bannerId) { - banners.remove(bannerId); + coreServices.overlays.banners.remove(bannerId); } }, 15000); history.replace(LANDING_PAGE_PATH); } - }, [ - restorePreviousUrl, - navigateToLegacyKibanaUrl, - banners, - analytics, - i18nStart, - theme, - history, - ]); + }, [restorePreviousUrl, history]); return null; }; diff --git a/src/plugins/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts b/src/plugins/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts index 4483634ddda8..aa932ebd8bf3 100644 --- a/src/plugins/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts +++ b/src/plugins/dashboard/public/dashboard_app/listing_page/get_dashboard_list_item_link.ts @@ -8,27 +8,23 @@ */ import type { QueryState } from '@kbn/data-plugin/public'; -import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; -import { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; +import { IKbnUrlStateStorage, setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; + import { DASHBOARD_APP_ID, - createDashboardEditUrl, GLOBAL_STATE_STORAGE_KEY, + createDashboardEditUrl, } from '../../dashboard_constants'; -import { pluginServices } from '../../services/plugin_services'; +import { coreServices } from '../../services/kibana_services'; export const getDashboardListItemLink = ( kbnUrlStateStorage: IKbnUrlStateStorage, id: string, timeRestore: boolean ) => { - const { - application: { getUrlForApp }, - settings: { uiSettings }, - } = pluginServices.getServices(); - const useHash = uiSettings.get('state:storeInSessionStorage'); // use hash + const useHash = coreServices.uiSettings.get('state:storeInSessionStorage'); // use hash - let url = getUrlForApp(DASHBOARD_APP_ID, { + let url = coreServices.application.getUrlForApp(DASHBOARD_APP_ID, { path: `#${createDashboardEditUrl(id)}`, }); const globalStateInUrl = kbnUrlStateStorage.get(GLOBAL_STATE_STORAGE_KEY) || {}; diff --git a/src/plugins/dashboard/public/dashboard_app/no_data/dashboard_app_no_data.tsx b/src/plugins/dashboard/public/dashboard_app/no_data/dashboard_app_no_data.tsx index abf779936928..15b3d00d07ec 100644 --- a/src/plugins/dashboard/public/dashboard_app/no_data/dashboard_app_no_data.tsx +++ b/src/plugins/dashboard/public/dashboard_app/no_data/dashboard_app_no_data.tsx @@ -10,44 +10,30 @@ import React from 'react'; import { withSuspense } from '@kbn/shared-ux-utility'; -import { pluginServices } from '../../services/plugin_services'; + import { DASHBOARD_APP_ID } from '../../dashboard_constants'; +import { + coreServices, + dataService, + dataViewEditorService, + embeddableService, + noDataPageService, + shareService, +} from '../../services/kibana_services'; +import { getDashboardBackupService } from '../../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; export const DashboardAppNoDataPage = ({ onDataViewCreated, }: { onDataViewCreated: () => void; }) => { - const { - application, - data: { dataViews }, - dataViewEditor, - http: { basePath, get }, - documentationLinks: { indexPatternsDocLink, kibanaGuideDocLink, esqlDocLink }, - customBranding, - noDataPage, - share, - } = pluginServices.getServices(); - const analyticsServices = { - coreStart: { - docLinks: { - links: { - kibana: { guide: kibanaGuideDocLink }, - indexPatterns: { introduction: indexPatternsDocLink }, - query: { queryESQL: esqlDocLink }, - }, - }, - application, - http: { basePath, get }, - customBranding: { - hasCustomBranding$: customBranding.hasCustomBranding$, - }, - }, - dataViews, - dataViewEditor, - noDataPage, - share: share.url ? { url: share.url } : undefined, + coreStart: coreServices, + dataViews: dataService.dataViews, + dataViewEditor: dataViewEditorService, + noDataPage: noDataPageService, + share: shareService, }; const importPromise = import('@kbn/shared-ux-page-analytics-no-data'); @@ -74,29 +60,22 @@ export const DashboardAppNoDataPage = ({ }; export const isDashboardAppInNoDataState = async () => { - const { - data: { dataViews }, - embeddable, - dashboardContentManagement, - dashboardBackup, - } = pluginServices.getServices(); - - const hasUserDataView = await dataViews.hasData.hasUserDataView().catch(() => false); + const hasUserDataView = await dataService.dataViews.hasData.hasUserDataView().catch(() => false); if (hasUserDataView) return false; // consider has data if there is an incoming embeddable - const hasIncomingEmbeddable = embeddable + const hasIncomingEmbeddable = embeddableService .getStateTransfer() .getIncomingEmbeddablePackage(DASHBOARD_APP_ID, false); if (hasIncomingEmbeddable) return false; // consider has data if there is unsaved dashboard with edits - if (dashboardBackup.dashboardHasUnsavedEdits()) return false; + if (getDashboardBackupService().dashboardHasUnsavedEdits()) return false; // consider has data if there is at least one dashboard - const { total } = await dashboardContentManagement.findDashboards - .search({ search: '', size: 1 }) + const { total } = await getDashboardContentManagementService() + .findDashboards.search({ search: '', size: 1 }) .catch(() => ({ total: 0 })); if (total > 0) return false; diff --git a/src/plugins/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx b/src/plugins/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx index fab0a3cb91c3..e102e6f898c9 100644 --- a/src/plugins/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx +++ b/src/plugins/dashboard/public/dashboard_app/tab_title_setter/dashboard_tab_title_setter.tsx @@ -10,14 +10,11 @@ import { useEffect } from 'react'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import { pluginServices } from '../../services/plugin_services'; import { DashboardApi } from '../..'; import { getNewDashboardTitle } from '../_dashboard_app_strings'; +import { coreServices } from '../../services/kibana_services'; export const DashboardTabTitleSetter = ({ dashboardApi }: { dashboardApi: DashboardApi }) => { - const { - chrome: { docTitle: chromeDocTitle }, - } = pluginServices.getServices(); const [title, lastSavedId] = useBatchedPublishingSubjects( dashboardApi.panelTitle, dashboardApi.savedObjectId @@ -27,8 +24,10 @@ export const DashboardTabTitleSetter = ({ dashboardApi }: { dashboardApi: Dashbo * Set chrome tab title when dashboard's title changes */ useEffect(() => { - chromeDocTitle.change(!lastSavedId ? getNewDashboardTitle() : title ?? lastSavedId); - }, [title, chromeDocTitle, lastSavedId]); + coreServices.chrome.docTitle.change( + !lastSavedId ? getNewDashboardTitle() : title ?? lastSavedId + ); + }, [title, lastSavedId]); return null; }; diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.test.ts b/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.test.ts index 13ba9e7e3751..7a5a77bfc14f 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.test.ts +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.test.ts @@ -7,14 +7,20 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { renderHook } from '@testing-library/react-hooks'; -import { ADD_PANEL_TRIGGER } from '@kbn/ui-actions-plugin/public'; -import type { PresentationContainer } from '@kbn/presentation-containers'; -import type { Action } from '@kbn/ui-actions-plugin/public'; -import { type BaseVisType, VisGroups, VisTypeAlias } from '@kbn/visualizations-plugin/public'; import { COMMON_EMBEDDABLE_GROUPING } from '@kbn/embeddable-plugin/public'; +import type { PresentationContainer } from '@kbn/presentation-containers'; +import type { Action, UiActionsService } from '@kbn/ui-actions-plugin/public'; +import { ADD_PANEL_TRIGGER } from '@kbn/ui-actions-plugin/public'; +import { + VisGroups, + VisTypeAlias, + VisualizationsStart, + type BaseVisType, +} from '@kbn/visualizations-plugin/public'; +import { renderHook } from '@testing-library/react-hooks'; + +import { uiActionsService, visualizationsService } from '../../../services/kibana_services'; import { useGetDashboardPanels } from './use_get_dashboard_panels'; -import { pluginServices } from '../../../services/plugin_services'; const mockApi = { addNewPanel: jest.fn() } as unknown as jest.Mocked; @@ -24,34 +30,25 @@ describe('Get dashboard panels hook', () => { createNewVisType: jest.fn(), }; - type PluginServices = ReturnType; - let compatibleTriggerActionsRequestSpy: jest.SpyInstance< - ReturnType> + ReturnType> >; let dashboardVisualizationGroupGetterSpy: jest.SpyInstance< - ReturnType + ReturnType >; let dashboardVisualizationAliasesGetterSpy: jest.SpyInstance< - ReturnType + ReturnType >; beforeAll(() => { - const _pluginServices = pluginServices.getServices(); - compatibleTriggerActionsRequestSpy = jest.spyOn( - _pluginServices.uiActions, + uiActionsService, 'getTriggerCompatibleActions' ); - - dashboardVisualizationGroupGetterSpy = jest.spyOn(_pluginServices.visualizations, 'getByGroup'); - - dashboardVisualizationAliasesGetterSpy = jest.spyOn( - _pluginServices.visualizations, - 'getAliases' - ); + dashboardVisualizationGroupGetterSpy = jest.spyOn(visualizationsService, 'getByGroup'); + dashboardVisualizationAliasesGetterSpy = jest.spyOn(visualizationsService, 'getAliases'); }); beforeEach(() => { diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.ts b/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.ts index 493eeb004dd8..d074bcb98bd1 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.ts +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/add_new_panel/use_get_dashboard_panels.ts @@ -7,19 +7,20 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { useMemo, useRef, useCallback } from 'react'; +import { useCallback, useMemo, useRef } from 'react'; +import { AsyncSubject, defer, from, lastValueFrom, map, type Subscription } from 'rxjs'; + import type { IconType } from '@elastic/eui'; -import { ADD_PANEL_TRIGGER } from '@kbn/ui-actions-plugin/public'; -import { type Subscription, AsyncSubject, from, defer, map, lastValueFrom } from 'rxjs'; -import { EmbeddableFactory, COMMON_EMBEDDABLE_GROUPING } from '@kbn/embeddable-plugin/public'; +import { COMMON_EMBEDDABLE_GROUPING, EmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { PresentationContainer } from '@kbn/presentation-containers'; -import { type BaseVisType, VisGroups, type VisTypeAlias } from '@kbn/visualizations-plugin/public'; +import { ADD_PANEL_TRIGGER } from '@kbn/ui-actions-plugin/public'; +import { VisGroups, type BaseVisType, type VisTypeAlias } from '@kbn/visualizations-plugin/public'; -import { pluginServices } from '../../../services/plugin_services'; +import { uiActionsService, visualizationsService } from '../../../services/kibana_services'; import { getAddPanelActionMenuItemsGroup, - type PanelSelectionMenuItem, type GroupedAddPanelActions, + type PanelSelectionMenuItem, } from './add_panel_action_menu_items'; interface UseGetDashboardPanelsArgs { @@ -46,13 +47,9 @@ export const useGetDashboardPanels = ({ api, createNewVisType }: UseGetDashboard const panelsComputeResultCache = useRef(new AsyncSubject()); const panelsComputeSubscription = useRef(null); - const { - uiActions, - visualizations: { getAliases: getVisTypeAliases, getByGroup: getVisTypesByGroup }, - } = pluginServices.getServices(); - const getSortedVisTypesByGroup = (group: VisGroups) => - getVisTypesByGroup(group) + visualizationsService + .getByGroup(group) .sort((a: BaseVisType | VisTypeAlias, b: BaseVisType | VisTypeAlias) => { const labelA = 'titleInWizard' in a ? a.titleInWizard || a.title : a.title; const labelB = 'titleInWizard' in b ? b.titleInWizard || a.title : a.title; @@ -70,7 +67,8 @@ export const useGetDashboardPanels = ({ api, createNewVisType }: UseGetDashboard const toolVisTypes = getSortedVisTypesByGroup(VisGroups.TOOLS); const legacyVisTypes = getSortedVisTypesByGroup(VisGroups.LEGACY); - const visTypeAliases = getVisTypeAliases() + const visTypeAliases = visualizationsService + .getAliases() .sort(({ promotion: a = false }: VisTypeAlias, { promotion: b = false }: VisTypeAlias) => a === b ? 0 : a ? -1 : 1 ) @@ -133,12 +131,12 @@ export const useGetDashboardPanels = ({ api, createNewVisType }: UseGetDashboard () => defer(() => { return from( - uiActions?.getTriggerCompatibleActions?.(ADD_PANEL_TRIGGER, { + uiActionsService.getTriggerCompatibleActions?.(ADD_PANEL_TRIGGER, { embeddable: api, }) ?? [] ); }), - [api, uiActions] + [api] ); const computeAvailablePanels = useCallback( diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx index ae91af4891bf..ddc629854aff 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/dashboard_editing_toolbar.tsx @@ -7,40 +7,35 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/react'; -import React, { useCallback } from 'react'; import { METRIC_TYPE } from '@kbn/analytics'; -import { useEuiTheme } from '@elastic/eui'; +import React, { useCallback, useMemo } from 'react'; import { AddFromLibraryButton, Toolbar, ToolbarButton } from '@kbn/shared-ux-button-toolbar'; import { BaseVisType, VisTypeAlias } from '@kbn/visualizations-plugin/public'; import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; +import { useDashboardApi } from '../../dashboard_api/use_dashboard_api'; +import { DASHBOARD_UI_METRIC_ID } from '../../dashboard_constants'; +import { + dataService, + embeddableService, + usageCollectionService, + visualizationsService, +} from '../../services/kibana_services'; import { getCreateVisualizationButtonTitle } from '../_dashboard_app_strings'; -import { EditorMenu } from './editor_menu'; -import { pluginServices } from '../../services/plugin_services'; import { ControlsToolbarButton } from './controls_toolbar_button'; -import { DASHBOARD_UI_METRIC_ID } from '../../dashboard_constants'; -import { useDashboardApi } from '../../dashboard_api/use_dashboard_api'; +import { EditorMenu } from './editor_menu'; export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean }) { - const { - usageCollection, - data: { search }, - embeddable: { getStateTransfer }, - visualizations: { getAliases: getVisTypeAliases }, - } = pluginServices.getServices(); const { euiTheme } = useEuiTheme(); const dashboardApi = useDashboardApi(); - const stateTransferService = getStateTransfer(); - - const lensAlias = getVisTypeAliases().find(({ name }) => name === 'lens'); - - const trackUiMetric = usageCollection.reportUiCounter?.bind( - usageCollection, - DASHBOARD_UI_METRIC_ID + const lensAlias = useMemo( + () => visualizationsService.getAliases().find(({ name }) => name === 'lens'), + [] ); const createNewVisType = useCallback( @@ -49,6 +44,10 @@ export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean } let appId = ''; if (visType) { + const trackUiMetric = usageCollectionService?.reportUiCounter.bind( + usageCollectionService, + DASHBOARD_UI_METRIC_ID + ); if (trackUiMetric) { trackUiMetric(METRIC_TYPE.CLICK, `${visType.name}:create`); } @@ -67,16 +66,17 @@ export function DashboardEditingToolbar({ isDisabled }: { isDisabled?: boolean } path = '#/create?'; } + const stateTransferService = embeddableService.getStateTransfer(); stateTransferService.navigateToEditor(appId, { path, state: { originatingApp: dashboardApi.getAppContext()?.currentAppId, originatingPath: dashboardApi.getAppContext()?.getCurrentPath?.(), - searchSessionId: search.session.getSessionId(), + searchSessionId: dataService.search.session.getSessionId(), }, }); }, - [stateTransferService, dashboardApi, search.session, trackUiMetric] + [dashboardApi] ); /** diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.test.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.test.tsx index a867d0133b46..7850c1e9ed74 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.test.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.test.tsx @@ -7,35 +7,23 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React from 'react'; import { render } from '@testing-library/react'; -import { EditorMenu } from './editor_menu'; +import React from 'react'; import { buildMockDashboard } from '../../mocks'; +import { EditorMenu } from './editor_menu'; -import { pluginServices } from '../../services/plugin_services'; -import { DashboardContext } from '../../dashboard_api/use_dashboard_api'; import { DashboardApi } from '../../dashboard_api/types'; +import { DashboardContext } from '../../dashboard_api/use_dashboard_api'; +import { + embeddableService, + uiActionsService, + visualizationsService, +} from '../../services/kibana_services'; -jest.mock('../../services/plugin_services', () => { - const module = jest.requireActual('../../services/plugin_services'); - - const _pluginServices = (module.pluginServices as typeof pluginServices).getServices(); - - jest - .spyOn(_pluginServices.embeddable, 'getEmbeddableFactories') - .mockReturnValue(new Map().values()); - jest.spyOn(_pluginServices.uiActions, 'getTriggerCompatibleActions').mockResolvedValue([]); - jest.spyOn(_pluginServices.visualizations, 'getByGroup').mockReturnValue([]); - jest.spyOn(_pluginServices.visualizations, 'getAliases').mockReturnValue([]); - - return { - ...module, - pluginServices: { - ...module.pluginServices, - getServices: jest.fn().mockReturnValue(_pluginServices), - }, - }; -}); +jest.spyOn(embeddableService, 'getEmbeddableFactories').mockReturnValue(new Map().values()); +jest.spyOn(uiActionsService, 'getTriggerCompatibleActions').mockResolvedValue([]); +jest.spyOn(visualizationsService, 'getByGroup').mockReturnValue([]); +jest.spyOn(visualizationsService, 'getAliases').mockReturnValue([]); describe('editor menu', () => { it('renders without crashing', async () => { diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx index a79024fe8b9d..2cad63c44202 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/editor_menu.tsx @@ -16,8 +16,8 @@ import { toMountPoint } from '@kbn/react-kibana-mount'; import { ToolbarButton } from '@kbn/shared-ux-button-toolbar'; import { useGetDashboardPanels, DashboardPanelSelectionListFlyout } from './add_new_panel'; -import { pluginServices } from '../../services/plugin_services'; import { useDashboardApi } from '../../dashboard_api/use_dashboard_api'; +import { coreServices } from '../../services/kibana_services'; interface EditorMenuProps extends Pick[0], 'createNewVisType'> { @@ -27,12 +27,6 @@ interface EditorMenuProps export const EditorMenu = ({ createNewVisType, isDisabled }: EditorMenuProps) => { const dashboardApi = useDashboardApi(); - const { - overlays, - analytics, - settings: { i18n: i18nStart, theme }, - } = pluginServices.getServices(); - const fetchDashboardPanels = useGetDashboardPanels({ api: dashboardApi, createNewVisType, @@ -63,11 +57,11 @@ export const EditorMenu = ({ createNewVisType, isDisabled }: EditorMenuProps) => /> ); }), - { analytics, theme, i18n: i18nStart } + { analytics: coreServices.analytics, theme: coreServices.theme, i18n: coreServices.i18n } ); dashboardApi.openOverlay( - overlays.openFlyout(mount, { + coreServices.overlays.openFlyout(mount, { size: 'm', maxWidth: 500, paddingSize: flyoutPanelPaddingSize, @@ -80,7 +74,7 @@ export const EditorMenu = ({ createNewVisType, isDisabled }: EditorMenuProps) => }) ); }, - [analytics, theme, i18nStart, dashboardApi, overlays, fetchDashboardPanels] + [dashboardApi, fetchDashboardPanels] ); return ( diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx index ff91eaf89648..41c4a55f6ab8 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.test.tsx @@ -8,11 +8,12 @@ */ import { Capabilities } from '@kbn/core/public'; -import { DashboardLocatorParams } from '../../../dashboard_container'; import { convertPanelMapToSavedPanels, DashboardContainerInput } from '../../../../common'; +import { DashboardLocatorParams } from '../../../dashboard_container'; -import { pluginServices } from '../../../services/plugin_services'; +import { shareService } from '../../../services/kibana_services'; import { showPublicUrlSwitch, ShowShareModal, ShowShareModalProps } from './show_share_modal'; +import { getDashboardBackupService } from '../../../services/dashboard_backup_service'; describe('showPublicUrlSwitch', () => { test('returns false if "dashboard" app is not available', () => { @@ -56,13 +57,11 @@ describe('showPublicUrlSwitch', () => { }); describe('ShowShareModal', () => { + const dashboardBackupService = getDashboardBackupService(); const unsavedStateKeys = ['query', 'filters', 'options', 'savedQuery', 'panels'] as Array< keyof DashboardLocatorParams >; - const toggleShareMenuSpy = jest.spyOn( - pluginServices.getServices().share, - 'toggleShareContextMenu' - ); + const toggleShareMenuSpy = jest.spyOn(shareService!, 'toggleShareContextMenu'); afterEach(() => { jest.clearAllMocks(); @@ -71,9 +70,7 @@ describe('ShowShareModal', () => { const getPropsAndShare = ( unsavedState?: Partial ): ShowShareModalProps => { - pluginServices.getServices().dashboardBackup.getState = jest - .fn() - .mockReturnValue({ dashboardState: unsavedState }); + dashboardBackupService.getState = jest.fn().mockReturnValue({ dashboardState: unsavedState }); return { isDirty: true, anchorElement: document.createElement('div'), @@ -169,7 +166,7 @@ describe('ShowShareModal', () => { }, }; const props = getPropsAndShare(unsavedDashboardState); - pluginServices.getServices().dashboardBackup.getState = jest.fn().mockReturnValue({ + dashboardBackupService.getState = jest.fn().mockReturnValue({ dashboardState: unsavedDashboardState, panels: { panel_1: { changedKey1: 'changed' }, diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx index 81226fbb5b29..5dd56465de92 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/share/show_share_modal.tsx @@ -7,6 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { omit } from 'lodash'; +import moment from 'moment'; +import React, { ReactElement, useState } from 'react'; + import { EuiCheckboxGroup } from '@elastic/eui'; import type { Capabilities } from '@kbn/core/public'; import { QueryState } from '@kbn/data-plugin/common'; @@ -14,15 +18,17 @@ import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; import { getStateFromKbnUrl, setStateToKbnUrl, unhashUrl } from '@kbn/kibana-utils-plugin/public'; -import { omit } from 'lodash'; -import moment from 'moment'; -import React, { ReactElement, useState } from 'react'; + import { convertPanelMapToSavedPanels, DashboardPanelMap } from '../../../../common'; import { DashboardLocatorParams } from '../../../dashboard_container'; -import { pluginServices } from '../../../services/plugin_services'; -import { dashboardUrlParams } from '../../dashboard_router'; +import { + getDashboardBackupService, + PANELS_CONTROL_GROUP_KEY, +} from '../../../services/dashboard_backup_service'; +import { coreServices, dataService, shareService } from '../../../services/kibana_services'; +import { getDashboardCapabilities } from '../../../utils/get_dashboard_capabilities'; import { shareModalStrings } from '../../_dashboard_app_strings'; -import { PANELS_CONTROL_GROUP_KEY } from '../../../services/dashboard_backup/dashboard_backup_service'; +import { dashboardUrlParams } from '../../dashboard_router'; const showFilterBarId = 'showFilterBar'; @@ -49,21 +55,7 @@ export function ShowShareModal({ dashboardTitle, getPanelsState, }: ShowShareModalProps) { - const { - dashboardCapabilities: { createShortUrl: allowShortUrl }, - dashboardBackup, - data: { - query: { - timefilter: { - timefilter: { getTime }, - }, - }, - }, - notifications, - share: { toggleShareContextMenu }, - } = pluginServices.getServices(); - - if (!toggleShareContextMenu) return; // TODO: Make this logic cleaner once share is an optional service + if (!shareService) return; const EmbedUrlParamExtension = ({ setParamValue, @@ -125,7 +117,7 @@ export function ShowShareModal({ let unsavedStateForLocator: DashboardLocatorParams = {}; const { dashboardState: unsavedDashboardState, panels: panelModifications } = - dashboardBackup.getState(savedObjectId) ?? {}; + getDashboardBackupService().getState(savedObjectId) ?? {}; const allUnsavedPanels = (() => { if ( @@ -186,7 +178,7 @@ export function ShowShareModal({ refreshInterval: undefined, // We don't share refresh interval externally viewMode: ViewMode.VIEW, // For share locators we always load the dashboard in view mode useHash: false, - timeRange: getTime(), + timeRange: dataService.query.timefilter.timefilter.getTime(), ...unsavedStateForLocator, }; @@ -203,11 +195,11 @@ export function ShowShareModal({ unhashUrl(baseUrl) ); - toggleShareContextMenu({ + shareService.toggleShareContextMenu({ isDirty, anchorElement, allowEmbed: true, - allowShortUrl, + allowShortUrl: getDashboardCapabilities().createShortUrl, shareableUrl, objectId: savedObjectId, objectType: 'dashboard', @@ -238,6 +230,6 @@ export function ShowShareModal({ snapshotShareWarning: Boolean(unsavedDashboardState?.panels) ? shareModalStrings.getSnapshotShareWarning() : undefined, - toasts: notifications.toasts, + toasts: coreServices.notifications.toasts, }); } diff --git a/src/plugins/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx b/src/plugins/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx index 41ddee24a933..ca58d3c74bd3 100644 --- a/src/plugins/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx +++ b/src/plugins/dashboard/public/dashboard_app/top_nav/use_dashboard_menu_items.tsx @@ -7,23 +7,25 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { batch } from 'react-redux'; import { Dispatch, SetStateAction, useCallback, useMemo, useState } from 'react'; +import { batch } from 'react-redux'; import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { TopNavMenuData } from '@kbn/navigation-plugin/public'; +import type { TopNavMenuData } from '@kbn/navigation-plugin/public'; import useMountedState from 'react-use/lib/useMountedState'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { UI_SETTINGS } from '../../../common'; -import { topNavStrings } from '../_dashboard_app_strings'; -import { ShowShareModal } from './share/show_share_modal'; -import { pluginServices } from '../../services/plugin_services'; -import { CHANGE_CHECK_DEBOUNCE } from '../../dashboard_constants'; -import { confirmDiscardUnsavedChanges } from '../../dashboard_listing/confirm_overlays'; -import { SaveDashboardReturn } from '../../services/dashboard_content_management/types'; import { useDashboardApi } from '../../dashboard_api/use_dashboard_api'; +import { CHANGE_CHECK_DEBOUNCE } from '../../dashboard_constants'; import { openSettingsFlyout } from '../../dashboard_container/embeddable/api'; +import { confirmDiscardUnsavedChanges } from '../../dashboard_listing/confirm_overlays'; +import { getDashboardBackupService } from '../../services/dashboard_backup_service'; +import { SaveDashboardReturn } from '../../services/dashboard_content_management_service/types'; +import { coreServices, shareService } from '../../services/kibana_services'; +import { getDashboardCapabilities } from '../../utils/get_dashboard_capabilities'; +import { topNavStrings } from '../_dashboard_app_strings'; +import { ShowShareModal } from './share/show_share_modal'; export const useDashboardMenuItems = ({ isLabsShown, @@ -40,17 +42,6 @@ export const useDashboardMenuItems = ({ const [isSaveInProgress, setIsSaveInProgress] = useState(false); - /** - * Unpack dashboard services - */ - const { - share, - dashboardBackup, - settings: { uiSettings }, - dashboardCapabilities: { showWriteControls }, - } = pluginServices.getServices(); - const isLabsEnabled = uiSettings.get(UI_SETTINGS.ENABLE_LABS_UI); - /** * Unpack dashboard state from redux */ @@ -120,7 +111,7 @@ export const useDashboardMenuItems = ({ const switchModes = switchToViewMode ? () => { dashboardApi.setViewMode(ViewMode.VIEW); - dashboardBackup.storeViewMode(ViewMode.VIEW); + getDashboardBackupService().storeViewMode(ViewMode.VIEW); } : undefined; if (!hasUnsavedChanges) { @@ -138,7 +129,7 @@ export const useDashboardMenuItems = ({ }); }, viewMode as ViewMode); }, - [dashboardApi, dashboardBackup, hasUnsavedChanges, viewMode, isMounted] + [dashboardApi, hasUnsavedChanges, viewMode, isMounted] ); /** @@ -170,7 +161,7 @@ export const useDashboardMenuItems = ({ testId: 'dashboardEditMode', className: 'eui-hideFor--s eui-hideFor--xs', // hide for small screens - editing doesn't work in mobile mode. run: () => { - dashboardBackup.storeViewMode(ViewMode.EDIT); + getDashboardBackupService().storeViewMode(ViewMode.EDIT); dashboardApi.setViewMode(ViewMode.EDIT); dashboardApi.clearOverlays(); }, @@ -243,7 +234,6 @@ export const useDashboardMenuItems = ({ dashboardApi, setIsLabsShown, isLabsShown, - dashboardBackup, quickSaveDashboard, resetChanges, isResetting, @@ -275,9 +265,13 @@ export const useDashboardMenuItems = ({ /** * Build ordered menus for view and edit mode. */ + const isLabsEnabled = useMemo(() => coreServices.uiSettings.get(UI_SETTINGS.ENABLE_LABS_UI), []); + const viewModeTopNavConfig = useMemo(() => { + const { showWriteControls } = getDashboardCapabilities(); + const labsMenuItem = isLabsEnabled ? [menuItems.labs] : []; - const shareMenuItem = share ? [menuItems.share] : []; + const shareMenuItem = shareService ? [menuItems.share] : []; const duplicateMenuItem = showWriteControls ? [menuItems.interactiveSave] : []; const editMenuItem = showWriteControls && !managed ? [menuItems.edit] : []; const mayberesetChangesMenuItem = showResetChange ? [resetChangesMenuItem] : []; @@ -290,19 +284,11 @@ export const useDashboardMenuItems = ({ ...mayberesetChangesMenuItem, ...editMenuItem, ]; - }, [ - isLabsEnabled, - menuItems, - share, - showWriteControls, - managed, - showResetChange, - resetChangesMenuItem, - ]); + }, [isLabsEnabled, menuItems, managed, showResetChange, resetChangesMenuItem]); const editModeTopNavConfig = useMemo(() => { const labsMenuItem = isLabsEnabled ? [menuItems.labs] : []; - const shareMenuItem = share ? [menuItems.share] : []; + const shareMenuItem = shareService ? [menuItems.share] : []; const editModeItems: TopNavMenuData[] = []; if (lastSavedId) { @@ -317,7 +303,7 @@ export const useDashboardMenuItems = ({ editModeItems.push(menuItems.switchToViewMode, menuItems.interactiveSave); } return [...labsMenuItem, menuItems.settings, ...shareMenuItem, ...editModeItems]; - }, [isLabsEnabled, menuItems, share, lastSavedId, showResetChange, resetChangesMenuItem]); + }, [isLabsEnabled, menuItems, lastSavedId, showResetChange, resetChangesMenuItem]); return { viewModeTopNavConfig, editModeTopNavConfig }; }; diff --git a/src/plugins/dashboard/public/dashboard_app/url/search_sessions_integration.ts b/src/plugins/dashboard/public/dashboard_app/url/search_sessions_integration.ts index 8092f99a0bb3..5ec8a0716d41 100644 --- a/src/plugins/dashboard/public/dashboard_app/url/search_sessions_integration.ts +++ b/src/plugins/dashboard/public/dashboard_app/url/search_sessions_integration.ts @@ -23,7 +23,7 @@ import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; import { SEARCH_SESSION_ID } from '../../dashboard_constants'; import { DashboardContainer, DashboardLocatorParams } from '../../dashboard_container'; import { convertPanelMapToSavedPanels } from '../../../common'; -import { pluginServices } from '../../services/plugin_services'; +import { dataService } from '../../services/kibana_services'; export const removeSearchSessionIdFromURL = (kbnUrlStateStorage: IKbnUrlStateStorage) => { kbnUrlStateStorage.kbnUrlControls.updateAsync((nextUrl) => { @@ -69,17 +69,6 @@ function getLocatorParams({ container: DashboardContainer; shouldRestoreSearchSession: boolean; }): DashboardLocatorParams { - const { - data: { - query: { - queryString, - filterManager, - timefilter: { timefilter }, - }, - search: { session }, - }, - } = pluginServices.getServices(); - const { componentState: { lastSavedId }, explicitInput: { panels, query, viewMode }, @@ -89,11 +78,15 @@ function getLocatorParams({ viewMode, useHash: false, preserveSavedFilters: false, - filters: filterManager.getFilters(), - query: queryString.formatQuery(query) as Query, + filters: dataService.query.filterManager.getFilters(), + query: dataService.query.queryString.formatQuery(query) as Query, dashboardId: container.getDashboardSavedObjectId(), - searchSessionId: shouldRestoreSearchSession ? session.getSessionId() : undefined, - timeRange: shouldRestoreSearchSession ? timefilter.getAbsoluteTime() : timefilter.getTime(), + searchSessionId: shouldRestoreSearchSession + ? dataService.search.session.getSessionId() + : undefined, + timeRange: shouldRestoreSearchSession + ? dataService.query.timefilter.timefilter.getAbsoluteTime() + : dataService.query.timefilter.timefilter.getTime(), refreshInterval: shouldRestoreSearchSession ? { pause: true, // force pause refresh interval when restoring a session diff --git a/src/plugins/dashboard/public/dashboard_app/url/url_utils.ts b/src/plugins/dashboard/public/dashboard_app/url/url_utils.ts index 09e15abe5eea..b748909eac9a 100644 --- a/src/plugins/dashboard/public/dashboard_app/url/url_utils.ts +++ b/src/plugins/dashboard/public/dashboard_app/url/url_utils.ts @@ -7,26 +7,26 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { History } from 'history'; import _ from 'lodash'; import { skip } from 'rxjs'; import semverSatisfies from 'semver/functions/satisfies'; -import { History } from 'history'; -import { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { replaceUrlHashQuery } from '@kbn/kibana-utils-plugin/common'; +import { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { + DashboardContainerInput, DashboardPanelMap, SharedDashboardState, convertSavedPanelsToPanelMap, - DashboardContainerInput, } from '../../../common'; -import { pluginServices } from '../../services/plugin_services'; -import { getPanelTooOldErrorString } from '../_dashboard_app_strings'; -import { DASHBOARD_STATE_STORAGE_KEY, createDashboardEditUrl } from '../../dashboard_constants'; import { SavedDashboardPanel } from '../../../common/content_management'; -import { migrateLegacyQuery } from '../../services/dashboard_content_management/lib/load_dashboard_state'; import { DashboardApi } from '../../dashboard_api/types'; +import { DASHBOARD_STATE_STORAGE_KEY, createDashboardEditUrl } from '../../dashboard_constants'; +import { migrateLegacyQuery } from '../../services/dashboard_content_management_service/lib/load_dashboard_state'; +import { coreServices } from '../../services/kibana_services'; +import { getPanelTooOldErrorString } from '../_dashboard_app_strings'; /** * We no longer support loading panels from a version older than 7.3 in the URL. @@ -54,7 +54,7 @@ function getPanelsMap(appStateInUrl: SharedDashboardState): DashboardPanelMap | } if (isPanelVersionTooOld(appStateInUrl.panels)) { - pluginServices.getServices().notifications.toasts.addWarning(getPanelTooOldErrorString()); + coreServices.notifications.toasts.addWarning(getPanelTooOldErrorString()); return undefined; } diff --git a/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx b/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx index 4204953e2269..b167f68e1595 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.test.tsx @@ -7,20 +7,18 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React from 'react'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; import { findTestSubject } from '@elastic/eui/lib/test'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; +import React from 'react'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { DashboardApi } from '../../../dashboard_api/types'; +import { DashboardContext } from '../../../dashboard_api/use_dashboard_api'; import { buildMockDashboard } from '../../../mocks'; +import { coreServices, visualizationsService } from '../../../services/kibana_services'; import { DashboardEmptyScreen } from './dashboard_empty_screen'; -import { pluginServices } from '../../../services/plugin_services'; -import { DashboardContext } from '../../../dashboard_api/use_dashboard_api'; -import { DashboardApi } from '../../../dashboard_api/types'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; -pluginServices.getServices().visualizations.getAliases = jest - .fn() - .mockReturnValue([{ name: 'lens' }]); +visualizationsService.getAliases = jest.fn().mockReturnValue([{ name: 'lens' }]); describe('DashboardEmptyScreen', () => { function mountComponent(viewMode: ViewMode) { @@ -57,7 +55,7 @@ describe('DashboardEmptyScreen', () => { }); test('renders correctly with readonly mode', () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; const component = mountComponent(ViewMode.VIEW); expect(component.render()).toMatchSnapshot(); @@ -72,7 +70,7 @@ describe('DashboardEmptyScreen', () => { // even when in edit mode, readonly users should not have access to the editing buttons in the empty prompt. test('renders correctly with readonly and edit mode', () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; const component = mountComponent(ViewMode.EDIT); expect(component.render()).toMatchSnapshot(); diff --git a/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx b/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx index 91edfcc5fc3b..e4e82339e7c2 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/empty_screen/dashboard_empty_screen.tsx @@ -21,33 +21,31 @@ import { } from '@elastic/eui'; import { METRIC_TYPE } from '@kbn/analytics'; import { ViewMode } from '@kbn/embeddable-plugin/public'; - import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; -import { DASHBOARD_UI_METRIC_ID } from '../../../dashboard_constants'; -import { pluginServices } from '../../../services/plugin_services'; + import { useDashboardApi } from '../../../dashboard_api/use_dashboard_api'; +import { DASHBOARD_UI_METRIC_ID } from '../../../dashboard_constants'; +import { + coreServices, + dataService, + embeddableService, + usageCollectionService, + visualizationsService, +} from '../../../services/kibana_services'; +import { getDashboardCapabilities } from '../../../utils/get_dashboard_capabilities'; import { emptyScreenStrings } from '../../_dashboard_container_strings'; export function DashboardEmptyScreen() { - const { - settings: { - theme: { theme$ }, - }, - usageCollection, - data: { search }, - http: { basePath }, - embeddable: { getStateTransfer }, - dashboardCapabilities: { showWriteControls }, - visualizations: { getAliases: getVisTypeAliases }, - } = pluginServices.getServices(); - const lensAlias = useMemo( - () => getVisTypeAliases().find(({ name }) => name === 'lens'), - [getVisTypeAliases] + () => visualizationsService.getAliases().find(({ name }) => name === 'lens'), + [] ); + const { showWriteControls } = useMemo(() => { + return getDashboardCapabilities(); + }, []); const dashboardApi = useDashboardApi(); - const isDarkTheme = useObservable(theme$)?.darkMode; + const isDarkTheme = useObservable(coreServices.theme.theme$)?.darkMode; const viewMode = useStateFromPublishingSubject(dashboardApi.viewMode); const isEditMode = useMemo(() => { return viewMode === 'edit'; @@ -55,8 +53,8 @@ export function DashboardEmptyScreen() { const goToLens = useCallback(() => { if (!lensAlias || !lensAlias.alias) return; - const trackUiMetric = usageCollection.reportUiCounter?.bind( - usageCollection, + const trackUiMetric = usageCollectionService?.reportUiCounter.bind( + usageCollectionService, DASHBOARD_UI_METRIC_ID ); @@ -64,18 +62,18 @@ export function DashboardEmptyScreen() { trackUiMetric(METRIC_TYPE.CLICK, `${lensAlias.name}:create`); } const appContext = dashboardApi.getAppContext(); - getStateTransfer().navigateToEditor(lensAlias.alias.app, { + embeddableService.getStateTransfer().navigateToEditor(lensAlias.alias.app, { path: lensAlias.alias.path, state: { originatingApp: appContext?.currentAppId, originatingPath: appContext?.getCurrentPath?.() ?? '', - searchSessionId: search.session.getSessionId(), + searchSessionId: dataService.search.session.getSessionId(), }, }); - }, [getStateTransfer, lensAlias, dashboardApi, search.session, usageCollection]); + }, [lensAlias, dashboardApi]); // TODO replace these SVGs with versions from EuiIllustration as soon as it becomes available. - const imageUrl = basePath.prepend( + const imageUrl = coreServices.http.basePath.prepend( `/plugins/dashboard/assets/${isDarkTheme ? 'dashboards_dark' : 'dashboards_light'}.svg` ); diff --git a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx index 0a116eae997d..518b009571e2 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/grid/dashboard_grid_item.tsx @@ -7,15 +7,17 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import classNames from 'classnames'; +import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; + import { EuiLoadingChart } from '@elastic/eui'; import { css } from '@emotion/react'; import { EmbeddablePanel, ReactEmbeddableRenderer } from '@kbn/embeddable-plugin/public'; -import classNames from 'classnames'; -import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; + import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { DashboardPanelState } from '../../../../common'; -import { pluginServices } from '../../../services/plugin_services'; import { useDashboardApi } from '../../../dashboard_api/use_dashboard_api'; +import { embeddableService, presentationUtilService } from '../../../services/kibana_services'; type DivProps = Pick, 'className' | 'style' | 'children'>; @@ -97,10 +99,6 @@ export const Item = React.forwardRef( : undefined; const renderedEmbeddable = useMemo(() => { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); - const panelProps = { showBadges: true, showBorder: useMargins, @@ -109,7 +107,7 @@ export const Item = React.forwardRef( }; // render React embeddable - if (reactEmbeddableRegistryHasKey(type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(type)) { return ( ((props, pane // ReactGridLayout passes ref to children. Functional component children require forwardRef to avoid react warning // https://github.com/react-grid-layout/react-grid-layout#custom-child-components-and-draggable-handles export const DashboardGridItem = React.forwardRef((props, ref) => { - const { - settings: { isProjectEnabledInLabs }, - } = pluginServices.getServices(); const dashboardApi = useDashboardApi(); const [focusedPanelId, viewMode] = useBatchedPublishingSubjects( dashboardApi.focusedPanelId$, dashboardApi.viewMode ); + const deferBelowFoldEnabled = useMemo( + () => presentationUtilService.labsService.isProjectEnabled('labs:dashboard:deferBelowFold'), + [] + ); + const isEnabled = viewMode !== 'print' && - isProjectEnabledInLabs('labs:dashboard:deferBelowFold') && + deferBelowFoldEnabled && (!focusedPanelId || focusedPanelId === props.id); return isEnabled ? : ; diff --git a/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx b/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx index d4160d700294..20fd2b93119d 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx @@ -9,29 +9,32 @@ import React, { useCallback, useState } from 'react'; import useMountedState from 'react-use/lib/useMountedState'; -import { i18n } from '@kbn/i18n'; + import { - EuiFormRow, - EuiFieldText, - EuiTextArea, - EuiForm, EuiButton, EuiButtonEmpty, + EuiCallOut, + EuiFieldText, EuiFlexGroup, EuiFlexItem, EuiFlyoutBody, EuiFlyoutFooter, EuiFlyoutHeader, - EuiTitle, - EuiCallOut, + EuiForm, + EuiFormRow, + EuiIconTip, EuiSwitch, EuiText, - EuiIconTip, + EuiTextArea, + EuiTitle, } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; + import { DashboardContainerInput } from '../../../../common'; -import { pluginServices } from '../../../services/plugin_services'; import { useDashboardApi } from '../../../dashboard_api/use_dashboard_api'; +import { getDashboardContentManagementService } from '../../../services/dashboard_content_management_service'; +import { savedObjectsTaggingService } from '../../../services/kibana_services'; interface DashboardSettingsProps { onClose: () => void; @@ -40,11 +43,6 @@ interface DashboardSettingsProps { const DUPLICATE_TITLE_CALLOUT_ID = 'duplicateTitleCallout'; export const DashboardSettings = ({ onClose }: DashboardSettingsProps) => { - const { - savedObjectsTagging: { components }, - dashboardContentManagement: { checkForDuplicateDashboardTitle }, - } = pluginServices.getServices(); - const dashboardApi = useDashboardApi(); const [localSettings, setLocalSettings] = useState(dashboardApi.getSettings()); @@ -63,13 +61,15 @@ export const DashboardSettings = ({ onClose }: DashboardSettingsProps) => { const onApply = async () => { setIsApplying(true); - const validTitle = await checkForDuplicateDashboardTitle({ - title: localSettings.title, - copyOnSave: false, - lastSavedTitle: dashboardApi.panelTitle.value ?? '', - onTitleDuplicate, - isTitleDuplicateConfirmed, - }); + const validTitle = await getDashboardContentManagementService().checkForDuplicateDashboardTitle( + { + title: localSettings.title, + copyOnSave: false, + lastSavedTitle: dashboardApi.panelTitle.value ?? '', + onTitleDuplicate, + isTitleDuplicateConfirmed, + } + ); if (!isMounted()) return; @@ -121,7 +121,9 @@ export const DashboardSettings = ({ onClose }: DashboardSettingsProps) => { }; const renderTagSelector = () => { - if (!components) return; + const savedObjectsTaggingApi = savedObjectsTaggingService?.getTaggingApi(); + if (!savedObjectsTaggingApi) return; + return ( { /> } > - updateDashboardSetting({ tags: selectedTags })} /> diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.test.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.test.tsx index 72dfc8659ae2..47732d52ad40 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.test.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.test.tsx @@ -15,11 +15,11 @@ import { ReferenceOrValueEmbeddable, } from '@kbn/embeddable-plugin/public'; import { + CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddable, ContactCardEmbeddableFactory, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, - CONTACT_CARD_EMBEDDABLE, } from '@kbn/embeddable-plugin/public/lib/test_samples/embeddables'; import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks'; import { @@ -34,7 +34,7 @@ import { render } from '@testing-library/react'; import React from 'react'; import { BehaviorSubject, lastValueFrom, Subject } from 'rxjs'; import { buildMockDashboard, getSampleDashboardPanel } from '../../../mocks'; -import { pluginServices } from '../../../services/plugin_services'; +import { embeddableService } from '../../../services/kibana_services'; import { DashboardContainer } from '../dashboard_container'; import { duplicateDashboardPanel, incrementPanelTitle } from './duplicate_dashboard_panel'; @@ -54,9 +54,7 @@ describe('Legacy embeddables', () => { const mockEmbeddableFactory = new ContactCardEmbeddableFactory((() => null) as any, {} as any); - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockEmbeddableFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockEmbeddableFactory); container = buildMockDashboard({ overrides: { panels: { diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.ts index 76a600a10dec..d62bb78b3b64 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/duplicate_dashboard_panel.ts @@ -7,6 +7,9 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { filter, map, max } from 'lodash'; +import { v4 as uuidv4 } from 'uuid'; + import { isReferenceOrValueEmbeddable, PanelNotFoundError } from '@kbn/embeddable-plugin/public'; import { apiHasSnapshottableState } from '@kbn/presentation-containers/interfaces/serialized_state'; import { @@ -16,11 +19,10 @@ import { getPanelTitle, stateHasTitles, } from '@kbn/presentation-publishing'; -import { filter, map, max } from 'lodash'; -import { v4 as uuidv4 } from 'uuid'; + import { DashboardPanelState, prefixReferencesFromPanel } from '../../../../common'; import { dashboardClonePanelActionStrings } from '../../../dashboard_actions/_dashboard_actions_strings'; -import { pluginServices } from '../../../services/plugin_services'; +import { coreServices, embeddableService } from '../../../services/kibana_services'; import { placeClonePanel } from '../../panel_placement'; import { DashboardContainer } from '../dashboard_container'; @@ -105,17 +107,13 @@ const duplicateReactEmbeddableInput = async ( }; export async function duplicateDashboardPanel(this: DashboardContainer, idToDuplicate: string) { - const { - notifications: { toasts }, - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); const panelToClone = await this.getDashboardPanelFromId(idToDuplicate); - const duplicatedPanelState = reactEmbeddableRegistryHasKey(panelToClone.type) + const duplicatedPanelState = embeddableService.reactEmbeddableRegistryHasKey(panelToClone.type) ? await duplicateReactEmbeddableInput(this, panelToClone, idToDuplicate) : await duplicateLegacyInput(this, panelToClone, idToDuplicate); - toasts.addSuccess({ + coreServices.notifications.toasts.addSuccess({ title: dashboardClonePanelActionStrings.getSuccessMessage(), 'data-test-subj': 'addObjectToContainerSuccess', }); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/open_settings_flyout.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/api/open_settings_flyout.tsx index 70955ea67d78..867e6ae9d047 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/open_settings_flyout.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/open_settings_flyout.tsx @@ -11,20 +11,14 @@ import React from 'react'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { pluginServices } from '../../../services/plugin_services'; -import { DashboardSettings } from '../../component/settings/settings_flyout'; -import { DashboardContext } from '../../../dashboard_api/use_dashboard_api'; import { DashboardApi } from '../../../dashboard_api/types'; +import { DashboardContext } from '../../../dashboard_api/use_dashboard_api'; +import { coreServices } from '../../../services/kibana_services'; +import { DashboardSettings } from '../../component/settings/settings_flyout'; export function openSettingsFlyout(dashboardApi: DashboardApi) { - const { - analytics, - settings: { i18n, theme }, - overlays, - } = pluginServices.getServices(); - dashboardApi.openOverlay( - overlays.openFlyout( + coreServices.overlays.openFlyout( toMountPoint( , - { analytics, i18n, theme } + { analytics: coreServices.analytics, i18n: coreServices.i18n, theme: coreServices.theme } ), { size: 's', diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx index 318dcb71f7f9..681be0ac9bef 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/overlays/save_modal.tsx @@ -7,14 +7,15 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { i18n } from '@kbn/i18n'; import React, { Fragment, useCallback } from 'react'; + +import { EuiFlexGroup, EuiFlexItem, EuiFormRow, EuiIconTip, EuiSwitch } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiFormRow, EuiSwitch, EuiIconTip, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { SavedObjectSaveModal } from '@kbn/saved-objects-plugin/public'; +import { savedObjectsTaggingService } from '../../../../services/kibana_services'; import type { DashboardSaveOptions } from '../../../types'; -import { pluginServices } from '../../../../services/plugin_services'; /** * TODO: Portable Dashboard followup, use redux for the state. @@ -79,12 +80,9 @@ export const DashboardSaveModal: React.FC = ({ ); const renderDashboardSaveOptions = useCallback(() => { - const { - savedObjectsTagging: { components }, - } = pluginServices.getServices(); - - const tagSelector = components ? ( - { setSelectedTags(selectedTagIds); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx index 244638fffe90..7230ff4fcb61 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx @@ -7,6 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { cloneDeep } from 'lodash'; +import React from 'react'; +import { batch } from 'react-redux'; + import type { Reference } from '@kbn/content-management-utils'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { @@ -14,12 +18,10 @@ import { isReferenceOrValueEmbeddable, ViewMode, } from '@kbn/embeddable-plugin/public'; +import { i18n } from '@kbn/i18n'; import { apiHasSerializableState, SerializedPanelState } from '@kbn/presentation-containers'; import { showSaveModal } from '@kbn/saved-objects-plugin/public'; -import { cloneDeep } from 'lodash'; -import React from 'react'; -import { batch } from 'react-redux'; -import { i18n } from '@kbn/i18n'; + import { DashboardContainerInput, DashboardPanelMap, @@ -29,8 +31,14 @@ import { DASHBOARD_CONTENT_ID, SAVED_OBJECT_POST_TIME } from '../../../dashboard import { SaveDashboardReturn, SavedDashboardInput, -} from '../../../services/dashboard_content_management/types'; -import { pluginServices } from '../../../services/plugin_services'; +} from '../../../services/dashboard_content_management_service/types'; +import { getDashboardContentManagementService } from '../../../services/dashboard_content_management_service'; +import { + coreServices, + dataService, + embeddableService, + savedObjectsTaggingService, +} from '../../../services/kibana_services'; import { DashboardSaveOptions, DashboardStateFromSaveModal } from '../../types'; import { DashboardContainer } from '../dashboard_container'; import { extractTitleAndCount } from './lib/extract_title_and_count'; @@ -39,9 +47,6 @@ import { DashboardSaveModal } from './overlays/save_modal'; const serializeAllPanelState = async ( dashboard: DashboardContainer ): Promise<{ panels: DashboardContainerInput['panels']; references: Reference[] }> => { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); const references: Reference[] = []; const panels = cloneDeep(dashboard.getInput().panels); @@ -49,7 +54,7 @@ const serializeAllPanelState = async ( Promise<{ uuid: string; serialized: SerializedPanelState }> > = []; for (const [uuid, panel] of Object.entries(panels)) { - if (!reactEmbeddableRegistryHasKey(panel.type)) continue; + if (!embeddableService.reactEmbeddableRegistryHasKey(panel.type)) continue; const api = dashboard.children$.value[uuid]; if (api && apiHasSerializableState(api)) { @@ -75,10 +80,6 @@ const serializeAllPanelState = async ( * Save the current state of this dashboard to a saved object without showing any save modal. */ export async function runQuickSave(this: DashboardContainer) { - const { - dashboardContentManagement: { saveDashboardState }, - } = pluginServices.getServices(); - const { explicitInput: currentState, componentState: { lastSavedId, managed }, @@ -98,7 +99,7 @@ export async function runQuickSave(this: DashboardContainer) { stateToSave = { ...stateToSave, controlGroupInput: controlGroupSerializedState }; } - const saveResult = await saveDashboardState({ + const saveResult = await getDashboardContentManagementService().saveDashboardState({ controlGroupReferences, panelReferences: references, currentState: stateToSave, @@ -118,20 +119,11 @@ export async function runQuickSave(this: DashboardContainer) { * accounts for scenarios of cloning elastic managed dashboard into user managed dashboards */ export async function runInteractiveSave(this: DashboardContainer, interactionMode: ViewMode) { - const { - data: { - query: { - timefilter: { timefilter }, - }, - }, - savedObjectsTagging: { hasApi: hasSavedObjectsTagging }, - dashboardContentManagement: { checkForDuplicateDashboardTitle, saveDashboardState }, - } = pluginServices.getServices(); - const { explicitInput: currentState, componentState: { lastSavedId, managed }, } = this.getState(); + const dashboardContentManagementService = getDashboardContentManagementService(); return new Promise((resolve, reject) => { if (interactionMode === ViewMode.EDIT && managed) { @@ -156,7 +148,7 @@ export async function runInteractiveSave(this: DashboardContainer, interactionMo try { if ( - !(await checkForDuplicateDashboardTitle({ + !(await dashboardContentManagementService.checkForDuplicateDashboardTitle({ title: newTitle, onTitleDuplicate, lastSavedTitle: currentState.title, @@ -172,11 +164,13 @@ export async function runInteractiveSave(this: DashboardContainer, interactionMo tags: [] as string[], description: newDescription, timeRestore: newTimeRestore, - timeRange: newTimeRestore ? timefilter.getTime() : undefined, - refreshInterval: newTimeRestore ? timefilter.getRefreshInterval() : undefined, + timeRange: newTimeRestore ? dataService.query.timefilter.timefilter.getTime() : undefined, + refreshInterval: newTimeRestore + ? dataService.query.timefilter.timefilter.getRefreshInterval() + : undefined, }; - if (hasSavedObjectsTagging && newTags) { + if (savedObjectsTaggingService && newTags) { // remove `hasSavedObjectsTagging` once the savedObjectsTagging service is optional stateFromSaveModal.tags = newTags; } @@ -226,7 +220,7 @@ export async function runInteractiveSave(this: DashboardContainer, interactionMo const beforeAddTime = window.performance.now(); - const saveResult = await saveDashboardState({ + const saveResult = await dashboardContentManagementService.saveDashboardState({ controlGroupReferences, panelReferences: references, saveOptions, @@ -240,7 +234,7 @@ export async function runInteractiveSave(this: DashboardContainer, interactionMo const addDuration = window.performance.now() - beforeAddTime; - reportPerformanceMetricEvent(pluginServices.getServices().analytics, { + reportPerformanceMetricEvent(coreServices.analytics, { eventName: SAVED_OBJECT_POST_TIME, duration: addDuration, meta: { @@ -279,7 +273,7 @@ export async function runInteractiveSave(this: DashboardContainer, interactionMo newTitle = `${baseTitle} (${baseCount + 1})`; - await checkForDuplicateDashboardTitle({ + await dashboardContentManagementService.checkForDuplicateDashboardTitle({ title: newTitle, lastSavedTitle: currentState.title, copyOnSave: true, diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts index 7a02b3479a2a..1ecc06d90e84 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.test.ts @@ -7,34 +7,34 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { EmbeddablePackageState, ViewMode } from '@kbn/embeddable-plugin/public'; import { + CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddable, ContactCardEmbeddableFactory, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, - CONTACT_CARD_EMBEDDABLE, } from '@kbn/embeddable-plugin/public/lib/test_samples'; import { Filter } from '@kbn/es-query'; -import { EmbeddablePackageState, ViewMode } from '@kbn/embeddable-plugin/public'; import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; -import { createDashboard } from './create_dashboard'; -import { getSampleDashboardPanel } from '../../../mocks'; -import { pluginServices } from '../../../services/plugin_services'; -import { DashboardCreationOptions } from '../dashboard_container_factory'; import { DEFAULT_DASHBOARD_INPUT } from '../../../dashboard_constants'; -import { mockControlGroupApi } from '../../../mocks'; +import { getSampleDashboardPanel, mockControlGroupApi } from '../../../mocks'; +import { dataService, embeddableService } from '../../../services/kibana_services'; +import { DashboardCreationOptions } from '../dashboard_container_factory'; +import { createDashboard } from './create_dashboard'; +import { getDashboardContentManagementService } from '../../../services/dashboard_content_management_service'; +import { getDashboardBackupService } from '../../../services/dashboard_backup_service'; + +const dashboardBackupService = getDashboardBackupService(); +const dashboardContentManagementService = getDashboardContentManagementService(); test("doesn't throw error when no data views are available", async () => { - pluginServices.getServices().data.dataViews.defaultDataViewExists = jest - .fn() - .mockReturnValue(false); + dataService.dataViews.defaultDataViewExists = jest.fn().mockReturnValue(false); expect(await createDashboard()).toBeDefined(); // reset get default data view - pluginServices.getServices().data.dataViews.defaultDataViewExists = jest - .fn() - .mockResolvedValue(true); + dataService.dataViews.defaultDataViewExists = jest.fn().mockResolvedValue(true); }); test('throws error when provided validation function returns invalid', async () => { @@ -73,79 +73,63 @@ test('does not get initial input when provided validation function returns redir }); test('pulls state from dashboard saved object when given a saved object id', async () => { - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: { - ...DEFAULT_DASHBOARD_INPUT, - description: `wow would you look at that? Wow.`, - }, - }); + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: { + ...DEFAULT_DASHBOARD_INPUT, + description: `wow would you look at that? Wow.`, + }, + }); const dashboard = await createDashboard({}, 0, 'wow-such-id'); - expect( - pluginServices.getServices().dashboardContentManagement.loadDashboardState - ).toHaveBeenCalledWith({ id: 'wow-such-id' }); + expect(dashboardContentManagementService.loadDashboardState).toHaveBeenCalledWith({ + id: 'wow-such-id', + }); expect(dashboard).toBeDefined(); expect(dashboard!.getState().explicitInput.description).toBe(`wow would you look at that? Wow.`); }); test('passes managed state from the saved object into the Dashboard component state', async () => { - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: { - ...DEFAULT_DASHBOARD_INPUT, - description: 'wow this description is okay', - }, - managed: true, - }); + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: { + ...DEFAULT_DASHBOARD_INPUT, + description: 'wow this description is okay', + }, + managed: true, + }); const dashboard = await createDashboard({}, 0, 'what-an-id'); expect(dashboard).toBeDefined(); expect(dashboard!.getState().componentState.managed).toBe(true); }); test('pulls view mode from dashboard backup', async () => { - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: DEFAULT_DASHBOARD_INPUT, - }); - pluginServices.getServices().dashboardBackup.getViewMode = jest - .fn() - .mockReturnValue(ViewMode.EDIT); + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: DEFAULT_DASHBOARD_INPUT, + }); + dashboardBackupService.getViewMode = jest.fn().mockReturnValue(ViewMode.EDIT); const dashboard = await createDashboard({ useSessionStorageIntegration: true }, 0, 'what-an-id'); expect(dashboard).toBeDefined(); expect(dashboard!.getState().explicitInput.viewMode).toBe(ViewMode.EDIT); }); test('new dashboards start in edit mode', async () => { - pluginServices.getServices().dashboardBackup.getViewMode = jest - .fn() - .mockReturnValue(ViewMode.VIEW); - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - newDashboardCreated: true, - dashboardInput: { - ...DEFAULT_DASHBOARD_INPUT, - description: 'wow this description is okay', - }, - }); + dashboardBackupService.getViewMode = jest.fn().mockReturnValue(ViewMode.VIEW); + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + newDashboardCreated: true, + dashboardInput: { + ...DEFAULT_DASHBOARD_INPUT, + description: 'wow this description is okay', + }, + }); const dashboard = await createDashboard({ useSessionStorageIntegration: true }, 0, 'wow-such-id'); expect(dashboard).toBeDefined(); expect(dashboard!.getState().explicitInput.viewMode).toBe(ViewMode.EDIT); }); test('managed dashboards start in view mode', async () => { - pluginServices.getServices().dashboardBackup.getViewMode = jest - .fn() - .mockReturnValue(ViewMode.EDIT); - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: DEFAULT_DASHBOARD_INPUT, - managed: true, - }); + dashboardBackupService.getViewMode = jest.fn().mockReturnValue(ViewMode.EDIT); + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: DEFAULT_DASHBOARD_INPUT, + managed: true, + }); const dashboard = await createDashboard({}, 0, 'what-an-id'); expect(dashboard).toBeDefined(); expect(dashboard!.getState().componentState.managed).toBe(true); @@ -153,15 +137,13 @@ test('managed dashboards start in view mode', async () => { }); test('pulls state from backup which overrides state from saved object', async () => { - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: { - ...DEFAULT_DASHBOARD_INPUT, - description: 'wow this description is okay', - }, - }); - pluginServices.getServices().dashboardBackup.getState = jest + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: { + ...DEFAULT_DASHBOARD_INPUT, + description: 'wow this description is okay', + }, + }); + dashboardBackupService.getState = jest .fn() .mockReturnValue({ dashboardState: { description: 'wow this description marginally better' } }); const dashboard = await createDashboard({ useSessionStorageIntegration: true }, 0, 'wow-such-id'); @@ -172,15 +154,13 @@ test('pulls state from backup which overrides state from saved object', async () }); test('pulls state from override input which overrides all other state sources', async () => { - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: { - ...DEFAULT_DASHBOARD_INPUT, - description: 'wow this description is okay', - }, - }); - pluginServices.getServices().dashboardBackup.getState = jest + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: { + ...DEFAULT_DASHBOARD_INPUT, + description: 'wow this description is okay', + }, + }); + dashboardBackupService.getState = jest .fn() .mockReturnValue({ description: 'wow this description marginally better' }); const dashboard = await createDashboard( @@ -198,35 +178,33 @@ test('pulls state from override input which overrides all other state sources', }); test('pulls panels from override input', async () => { - pluginServices.getServices().embeddable.reactEmbeddableRegistryHasKey = jest + embeddableService.reactEmbeddableRegistryHasKey = jest .fn() .mockImplementation((type: string) => type === 'reactEmbeddable'); - pluginServices.getServices().dashboardContentManagement.loadDashboardState = jest - .fn() - .mockResolvedValue({ - dashboardInput: { - ...DEFAULT_DASHBOARD_INPUT, - panels: { - ...DEFAULT_DASHBOARD_INPUT.panels, - someLegacyPanel: { - type: 'legacy', - gridData: { x: 0, y: 0, w: 0, h: 0, i: 'someLegacyPanel' }, - explicitInput: { - id: 'someLegacyPanel', - title: 'stateFromSavedObject', - }, + dashboardContentManagementService.loadDashboardState = jest.fn().mockResolvedValue({ + dashboardInput: { + ...DEFAULT_DASHBOARD_INPUT, + panels: { + ...DEFAULT_DASHBOARD_INPUT.panels, + someLegacyPanel: { + type: 'legacy', + gridData: { x: 0, y: 0, w: 0, h: 0, i: 'someLegacyPanel' }, + explicitInput: { + id: 'someLegacyPanel', + title: 'stateFromSavedObject', }, - someReactEmbeddablePanel: { - type: 'reactEmbeddable', - gridData: { x: 0, y: 0, w: 0, h: 0, i: 'someReactEmbeddablePanel' }, - explicitInput: { - id: 'someReactEmbeddablePanel', - title: 'stateFromSavedObject', - }, + }, + someReactEmbeddablePanel: { + type: 'reactEmbeddable', + gridData: { x: 0, y: 0, w: 0, h: 0, i: 'someReactEmbeddablePanel' }, + explicitInput: { + id: 'someReactEmbeddablePanel', + title: 'stateFromSavedObject', }, }, }, - }); + }, + }); const dashboard = await createDashboard( { useSessionStorageIntegration: true, @@ -286,10 +264,8 @@ test('applies filters and query from state to query service', async () => { }, getInitialInput: () => ({ filters, query }), }); - expect(pluginServices.getServices().data.query.queryString.setQuery).toHaveBeenCalledWith(query); - expect(pluginServices.getServices().data.query.filterManager.setAppFilters).toHaveBeenCalledWith( - filters - ); + expect(dataService.query.queryString.setQuery).toHaveBeenCalledWith(query); + expect(dataService.query.filterManager.setAppFilters).toHaveBeenCalledWith(filters); }); test('applies time range and refresh interval from initial input to query service if time restore is on', async () => { @@ -302,20 +278,16 @@ test('applies time range and refresh interval from initial input to query servic }, getInitialInput: () => ({ timeRange, refreshInterval, timeRestore: true }), }); - expect( - pluginServices.getServices().data.query.timefilter.timefilter.setTime - ).toHaveBeenCalledWith(timeRange); - expect( - pluginServices.getServices().data.query.timefilter.timefilter.setRefreshInterval - ).toHaveBeenCalledWith(refreshInterval); + expect(dataService.query.timefilter.timefilter.setTime).toHaveBeenCalledWith(timeRange); + expect(dataService.query.timefilter.timefilter.setRefreshInterval).toHaveBeenCalledWith( + refreshInterval + ); }); test('applies time range from query service to initial input if time restore is on but there is an explicit time range in the URL', async () => { const urlTimeRange = { from: new Date().toISOString(), to: new Date().toISOString() }; const savedTimeRange = { from: 'now - 7 days', to: 'now' }; - pluginServices.getServices().data.query.timefilter.timefilter.getTime = jest - .fn() - .mockReturnValue(urlTimeRange); + dataService.query.timefilter.timefilter.getTime = jest.fn().mockReturnValue(urlTimeRange); const kbnUrlStateStorage = createKbnUrlStateStorage(); kbnUrlStateStorage.get = jest.fn().mockReturnValue({ time: urlTimeRange }); @@ -335,9 +307,7 @@ test('applies time range from query service to initial input if time restore is test('applies time range from query service to initial input if time restore is off', async () => { const timeRange = { from: new Date().toISOString(), to: new Date().toISOString() }; - pluginServices.getServices().data.query.timefilter.timefilter.getTime = jest - .fn() - .mockReturnValue(timeRange); + dataService.query.timefilter.timefilter.getTime = jest.fn().mockReturnValue(timeRange); const dashboard = await createDashboard({ useUnifiedSearchIntegration: true, unifiedSearchSettings: { @@ -393,9 +363,7 @@ test('creates new embeddable with incoming embeddable if id does not match exist create: jest.fn().mockReturnValue({ destroy: jest.fn() }), getDefaultInput: jest.fn().mockResolvedValue({}), }; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockContactCardFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockContactCardFactory); const dashboard = await createDashboard({ getIncomingEmbeddable: () => incomingEmbeddable, @@ -454,9 +422,7 @@ test('creates new embeddable with specified size if size is provided', async () create: jest.fn().mockReturnValue({ destroy: jest.fn() }), getDefaultInput: jest.fn().mockResolvedValue({}), }; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockContactCardFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockContactCardFactory); const dashboard = await createDashboard({ getIncomingEmbeddable: () => incomingEmbeddable, @@ -513,11 +479,9 @@ test('searchSessionId is updated prior to child embeddable parent subscription e }, }), }; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(embeddableFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(embeddableFactory); let sessionCount = 0; - pluginServices.getServices().data.search.session.start = () => { + dataService.search.session.start = () => { sessionCount++; return `searchSessionId${sessionCount}`; }; diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts index 48a9a8283846..2b44abe481b7 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/create_dashboard.ts @@ -7,13 +7,16 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { cloneDeep, omit } from 'lodash'; +import { Subject } from 'rxjs'; +import { v4 } from 'uuid'; + +import { ContentInsightsClient } from '@kbn/content-management-content-insights-public'; import { GlobalQueryStateFromUrl, syncGlobalQueryStateWithUrl } from '@kbn/data-plugin/public'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { TimeRange } from '@kbn/es-query'; import { lazyLoadReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; -import { cloneDeep, omit } from 'lodash'; -import { Subject } from 'rxjs'; -import { v4 } from 'uuid'; + import { DashboardContainerInput, DashboardPanelMap, @@ -26,11 +29,17 @@ import { GLOBAL_STATE_STORAGE_KEY, PanelPlacementStrategy, } from '../../../dashboard_constants'; +import { + PANELS_CONTROL_GROUP_KEY, + getDashboardBackupService, +} from '../../../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../../../services/dashboard_content_management_service'; import { LoadDashboardReturn, SavedDashboardInput, -} from '../../../services/dashboard_content_management/types'; -import { pluginServices } from '../../../services/plugin_services'; +} from '../../../services/dashboard_content_management_service/types'; +import { coreServices, dataService, embeddableService } from '../../../services/kibana_services'; +import { getDashboardCapabilities } from '../../../utils/get_dashboard_capabilities'; import { runPanelPlacementStrategy } from '../../panel_placement/place_new_panel_strategies'; import { startDiffingDashboardState } from '../../state/diffing/dashboard_diffing_integration'; import { DashboardPublicState, UnsavedPanelState } from '../../types'; @@ -40,7 +49,6 @@ import { startSyncingDashboardDataViews } from './data_views/sync_dashboard_data import { startQueryPerformanceTracking } from './performance/query_performance_tracking'; import { startDashboardSearchSessionIntegration } from './search_sessions/start_dashboard_search_session_integration'; import { syncUnifiedSearchState } from './unified_search/sync_dashboard_unified_search_state'; -import { PANELS_CONTROL_GROUP_KEY } from '../../../services/dashboard_backup/dashboard_backup_service'; /** * Builds a new Dashboard from scratch. @@ -50,11 +58,6 @@ export const createDashboard = async ( dashboardCreationStartTime?: number, savedObjectId?: string ): Promise => { - const { - data: { dataViews }, - dashboardContentManagement: { loadDashboardState }, - } = pluginServices.getServices(); - // -------------------------------------------------------------------------------------- // Create method which allows work to be done on the dashboard container when it's ready. // -------------------------------------------------------------------------------------- @@ -71,8 +74,11 @@ export const createDashboard = async ( // Lazy load required systems and Dashboard saved object. // -------------------------------------------------------------------------------------- const reduxEmbeddablePackagePromise = lazyLoadReduxToolsPackage(); - const defaultDataViewExistsPromise = dataViews.defaultDataViewExists(); - const dashboardSavedObjectPromise = loadDashboardState({ id: savedObjectId }); + const defaultDataViewExistsPromise = dataService.dataViews.defaultDataViewExists(); + const dashboardContentManagementService = getDashboardContentManagementService(); + const dashboardSavedObjectPromise = dashboardContentManagementService.loadDashboardState({ + id: savedObjectId, + }); const [reduxEmbeddablePackage, savedObjectResult] = await Promise.all([ reduxEmbeddablePackagePromise, @@ -140,21 +146,12 @@ export const initializeDashboard = async ({ untilDashboardReady: () => Promise; creationOptions?: DashboardCreationOptions; }) => { - const { - dashboardBackup, - dashboardCapabilities: { showWriteControls }, - embeddable: { reactEmbeddableRegistryHasKey }, - data: { - query: queryService, - search: { session }, - }, - dashboardContentInsights, - } = pluginServices.getServices(); const { queryString, filterManager, timefilter: { timefilter: timefilterService }, - } = queryService; + } = dataService.query; + const dashboardBackupService = getDashboardBackupService(); const { getInitialInput, @@ -179,7 +176,7 @@ export const initializeDashboard = async ({ // -------------------------------------------------------------------------------------- // Combine input from saved object, and session storage // -------------------------------------------------------------------------------------- - const dashboardBackupState = dashboardBackup.getState(loadDashboardReturn.dashboardId); + const dashboardBackupState = dashboardBackupService.getState(loadDashboardReturn.dashboardId); const runtimePanelsToRestore: UnsavedPanelState = useSessionStorageIntegration ? dashboardBackupState?.panels ?? {} : {}; @@ -189,15 +186,16 @@ export const initializeDashboard = async ({ return dashboardBackupState?.dashboardState; })(); const initialViewMode = (() => { - if (loadDashboardReturn.managed || !showWriteControls) return ViewMode.VIEW; + if (loadDashboardReturn.managed || !getDashboardCapabilities().showWriteControls) + return ViewMode.VIEW; if ( loadDashboardReturn.newDashboardCreated || - dashboardBackup.dashboardHasUnsavedEdits(loadDashboardReturn.dashboardId) + dashboardBackupService.dashboardHasUnsavedEdits(loadDashboardReturn.dashboardId) ) { return ViewMode.EDIT; } - return dashboardBackup.getViewMode(); + return dashboardBackupService.getViewMode(); })(); const combinedSessionInput: DashboardContainerInput = { @@ -218,7 +216,7 @@ export const initializeDashboard = async ({ const overridePanels: DashboardPanelMap = {}; for (const panel of Object.values(overrideInput?.panels)) { - if (reactEmbeddableRegistryHasKey(panel.type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(panel.type)) { overridePanels[panel.explicitInput.id] = { ...panel, @@ -263,7 +261,7 @@ export const initializeDashboard = async ({ // Back up any view mode passed in explicitly. if (overrideInput?.viewMode) { - dashboardBackup.storeViewMode(overrideInput?.viewMode); + dashboardBackupService.storeViewMode(overrideInput?.viewMode); } initialDashboardInput.executionContext = { @@ -319,7 +317,7 @@ export const initializeDashboard = async ({ // start syncing global query state with the URL. const { stop: stopSyncingQueryServiceStateWithUrl } = syncGlobalQueryStateWithUrl( - queryService, + dataService.query, kbnUrlStateStorage ); @@ -363,7 +361,7 @@ export const initializeDashboard = async ({ // maintain hide panel titles setting. hidePanelTitles: panelToUpdate.explicitInput.hidePanelTitles, }; - if (reactEmbeddableRegistryHasKey(incomingEmbeddable.type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(incomingEmbeddable.type)) { panelToUpdate.explicitInput = { id: panelToUpdate.explicitInput.id }; runtimePanelsToRestore[incomingEmbeddable.embeddableId] = nextRuntimeState; } else { @@ -399,7 +397,7 @@ export const initializeDashboard = async ({ } ); const newPanelState: DashboardPanelState = (() => { - if (reactEmbeddableRegistryHasKey(incomingEmbeddable.type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(incomingEmbeddable.type)) { runtimePanelsToRestore[embeddableId] = incomingEmbeddable.input; return { explicitInput: { id: embeddableId }, @@ -487,16 +485,18 @@ export const initializeDashboard = async ({ // if this incoming embeddable has a session, continue it. if (incomingEmbeddable?.searchSessionId) { - session.continue(incomingEmbeddable.searchSessionId); + dataService.search.session.continue(incomingEmbeddable.searchSessionId); } if (sessionIdToRestore) { - session.restore(sessionIdToRestore); + dataService.search.session.restore(sessionIdToRestore); } - const existingSession = session.getSessionId(); + const existingSession = dataService.search.session.getSessionId(); initialSearchSessionId = sessionIdToRestore ?? - (existingSession && incomingEmbeddable ? existingSession : session.start()); + (existingSession && incomingEmbeddable + ? existingSession + : dataService.search.session.start()); untilDashboardReady().then(async (container) => { await container.untilContainerInitialized(); @@ -511,7 +511,11 @@ export const initializeDashboard = async ({ // We don't count views when a user is editing a dashboard and is returning from an editor after saving // however, there is an edge case that we now count a new view when a user is editing a dashboard and is returning from an editor by canceling // TODO: this should be revisited by making embeddable transfer support canceling logic https://github.com/elastic/kibana/issues/190485 - dashboardContentInsights.trackDashboardView(loadDashboardReturn.dashboardId); + const contentInsightsClient = new ContentInsightsClient( + { http: coreServices.http }, + { domainId: 'dashboard' } + ); + contentInsightsClient.track(loadDashboardReturn.dashboardId, 'viewed'); } return { input: initialDashboardInput, searchSessionId: initialSearchSessionId }; diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/data_views/sync_dashboard_data_views.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/data_views/sync_dashboard_data_views.ts index 8954155d8093..3060987e296c 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/data_views/sync_dashboard_data_views.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/data_views/sync_dashboard_data_views.ts @@ -7,19 +7,17 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { uniqBy } from 'lodash'; +import { combineLatest, Observable, of, switchMap } from 'rxjs'; + import { DataView } from '@kbn/data-views-plugin/common'; import { combineCompatibleChildrenApis } from '@kbn/presentation-containers'; import { apiPublishesDataViews, PublishesDataViews } from '@kbn/presentation-publishing'; -import { uniqBy } from 'lodash'; -import { combineLatest, Observable, of, switchMap } from 'rxjs'; -import { pluginServices } from '../../../../services/plugin_services'; + +import { dataService } from '../../../../services/kibana_services'; import { DashboardContainer } from '../../dashboard_container'; export function startSyncingDashboardDataViews(this: DashboardContainer) { - const { - data: { dataViews }, - } = pluginServices.getServices(); - const controlGroupDataViewsPipe: Observable = this.controlGroupApi$.pipe( switchMap((controlGroupApi) => { return controlGroupApi ? controlGroupApi.dataViews : of([]); @@ -42,8 +40,8 @@ export function startSyncingDashboardDataViews(this: DashboardContainer) { ]; if (allDataViews.length === 0) { return (async () => { - const defaultDataViewId = await dataViews.getDefaultId(); - return [await dataViews.get(defaultDataViewId!)]; + const defaultDataViewId = await dataService.dataViews.getDefaultId(); + return [await dataService.dataViews.get(defaultDataViewId!)]; })(); } return of(uniqBy(allDataViews, 'id')); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.test.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.test.ts index 2caf5af31164..963914bea1c3 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.test.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.test.ts @@ -7,18 +7,18 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import type { CoreStart } from '@kbn/core/public'; import { PerformanceMetricEvent } from '@kbn/ebt-tools'; import { PresentationContainer, TracksQueryPerformance } from '@kbn/presentation-containers'; import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; -import { apiPublishesPhaseEvents, PhaseEvent, PhaseEventType } from '@kbn/presentation-publishing'; +import { PhaseEvent, PhaseEventType, apiPublishesPhaseEvents } from '@kbn/presentation-publishing'; import { waitFor } from '@testing-library/react'; import { BehaviorSubject } from 'rxjs'; -import { DashboardAnalyticsService } from '../../../../services/analytics/types'; import { startQueryPerformanceTracking } from './query_performance_tracking'; const mockMetricEvent = jest.fn(); jest.mock('@kbn/ebt-tools', () => ({ - reportPerformanceMetricEvent: (_: DashboardAnalyticsService, args: PerformanceMetricEvent) => { + reportPerformanceMetricEvent: (_: CoreStart['analytics'], args: PerformanceMetricEvent) => { mockMetricEvent(args); }, })); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts index a8ea06d25eff..ecf990675483 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/performance/query_performance_tracking.ts @@ -7,12 +7,14 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { combineLatest, map, of, pairwise, startWith, switchMap } from 'rxjs'; + import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import { PresentationContainer, TracksQueryPerformance } from '@kbn/presentation-containers'; -import { apiPublishesPhaseEvents, PublishesPhaseEvents } from '@kbn/presentation-publishing'; -import { combineLatest, map, of, pairwise, startWith, switchMap } from 'rxjs'; +import { PublishesPhaseEvents, apiPublishesPhaseEvents } from '@kbn/presentation-publishing'; + import { DASHBOARD_LOADED_EVENT } from '../../../../dashboard_constants'; -import { pluginServices } from '../../../../services/plugin_services'; +import { coreServices } from '../../../../services/kibana_services'; import { DashboardLoadType } from '../../../types'; let isFirstDashboardLoadOfSession = true; @@ -26,7 +28,6 @@ const loadTypesMapping: { [key in DashboardLoadType]: number } = { export const startQueryPerformanceTracking = ( dashboard: PresentationContainer & TracksQueryPerformance ) => { - const { analytics } = pluginServices.getServices(); const reportPerformanceMetrics = ({ timeToData, panelCount, @@ -41,7 +42,7 @@ export const startQueryPerformanceTracking = ( const duration = loadType === 'dashboardSubsequentLoad' ? timeToData : Math.max(timeToData, totalLoadTime); - reportPerformanceMetricEvent(analytics, { + reportPerformanceMetricEvent(coreServices.analytics, { eventName: DASHBOARD_LOADED_EVENT, duration, key1: 'time_to_data', diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/search_sessions/start_dashboard_search_session_integration.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/search_sessions/start_dashboard_search_session_integration.ts index ee74efbb75d5..8150ee7a7238 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/search_sessions/start_dashboard_search_session_integration.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/search_sessions/start_dashboard_search_session_integration.ts @@ -11,10 +11,11 @@ import { skip } from 'rxjs'; import { noSearchSessionStorageCapabilityMessage } from '@kbn/data-plugin/public'; +import { dataService } from '../../../../services/kibana_services'; import { DashboardContainer } from '../../dashboard_container'; -import { pluginServices } from '../../../../services/plugin_services'; import { DashboardCreationOptions } from '../../dashboard_container_factory'; import { newSession$ } from './new_session'; +import { getDashboardCapabilities } from '../../../../utils/get_dashboard_capabilities'; /** * Enables dashboard search sessions. @@ -25,13 +26,6 @@ export function startDashboardSearchSessionIntegration( ) { if (!searchSessionSettings) return; - const { - data: { - search: { session }, - }, - dashboardCapabilities: { storeSearchSession: canStoreSearchSession }, - } = pluginServices.getServices(); - const { sessionIdUrlChangeObservable, getSearchSessionIdFromURL, @@ -39,9 +33,9 @@ export function startDashboardSearchSessionIntegration( createSessionRestorationDataProvider, } = searchSessionSettings; - session.enableStorage(createSessionRestorationDataProvider(this), { + dataService.search.session.enableStorage(createSessionRestorationDataProvider(this), { isDisabled: () => - canStoreSearchSession + getDashboardCapabilities().storeSearchSession ? { disabled: false } : { disabled: true, @@ -60,15 +54,18 @@ export function startDashboardSearchSessionIntegration( const updatedSearchSessionId: string | undefined = (() => { let searchSessionIdFromURL = getSearchSessionIdFromURL(); if (searchSessionIdFromURL) { - if (session.isRestore() && session.isCurrentSession(searchSessionIdFromURL)) { + if ( + dataService.search.session.isRestore() && + dataService.search.session.isCurrentSession(searchSessionIdFromURL) + ) { // we had previously been in a restored session but have now changed state so remove the session id from the URL. removeSessionIdFromUrl(); searchSessionIdFromURL = undefined; } else { - session.restore(searchSessionIdFromURL); + dataService.search.session.restore(searchSessionIdFromURL); } } - return searchSessionIdFromURL ?? session.start(); + return searchSessionIdFromURL ?? dataService.search.session.start(); })(); if (updatedSearchSessionId && updatedSearchSessionId !== currentSearchSessionId) { diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/create/unified_search/sync_dashboard_unified_search_state.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/create/unified_search/sync_dashboard_unified_search_state.ts index 184b97c893a2..160af8a005b1 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/create/unified_search/sync_dashboard_unified_search_state.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/create/unified_search/sync_dashboard_unified_search_state.ts @@ -21,9 +21,9 @@ import { } from '@kbn/data-plugin/public'; import { DashboardContainer } from '../../dashboard_container'; -import { pluginServices } from '../../../../services/plugin_services'; import { GLOBAL_STATE_STORAGE_KEY } from '../../../../dashboard_constants'; import { areTimesEqual } from '../../../state/diffing/dashboard_diffing_utils'; +import { dataService } from '../../../../services/kibana_services'; /** * Sets up syncing and subscriptions between the filter state from the Data plugin @@ -33,11 +33,7 @@ export function syncUnifiedSearchState( this: DashboardContainer, kbnUrlStateStorage: IKbnUrlStateStorage ) { - const { - data: { query: queryService, search }, - } = pluginServices.getServices(); - const { queryString, timefilter } = queryService; - const { timefilter: timefilterService } = timefilter; + const timefilterService = dataService.query.timefilter.timefilter; // get Observable for when the dashboard's saved filters or query change. const OnFiltersChange$ = new Subject<{ filters: Filter[]; query: Query }>(); @@ -47,7 +43,7 @@ export function syncUnifiedSearchState( } = this.getState(); OnFiltersChange$.next({ filters: filters ?? [], - query: query ?? queryString.getDefaultQuery(), + query: query ?? dataService.query.queryString.getDefaultQuery(), }); }); @@ -56,12 +52,12 @@ export function syncUnifiedSearchState( explicitInput: { filters, query }, } = this.getState(); const intermediateFilterState: { filters: Filter[]; query: Query } = { - query: query ?? queryString.getDefaultQuery(), + query: query ?? dataService.query.queryString.getDefaultQuery(), filters: filters ?? [], }; const stopSyncingAppFilters = connectToQueryState( - queryService, + dataService.query, { get: () => intermediateFilterState, set: ({ filters: newFilters, query: newQuery }) => { @@ -144,7 +140,7 @@ export function syncUnifiedSearchState( }), switchMap((done) => // best way on a dashboard to estimate that panels are updated is to rely on search session service state - waitUntilNextSessionCompletes$(search.session).pipe(finalize(done)) + waitUntilNextSessionCompletes$(dataService.search.session).pipe(finalize(done)) ) ) .subscribe(); diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.test.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.test.tsx index eb798049ec48..83efeab804ba 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.test.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.test.tsx @@ -9,11 +9,11 @@ import { isErrorEmbeddable, ViewMode } from '@kbn/embeddable-plugin/public'; import { + CONTACT_CARD_EMBEDDABLE, ContactCardEmbeddable, ContactCardEmbeddableFactory, ContactCardEmbeddableInput, ContactCardEmbeddableOutput, - CONTACT_CARD_EMBEDDABLE, EMPTY_EMBEDDABLE, } from '@kbn/embeddable-plugin/public/lib/test_samples/embeddables'; import type { TimeRange } from '@kbn/es-query'; @@ -25,13 +25,11 @@ import { getSampleDashboardPanel, mockControlGroupApi, } from '../../mocks'; -import { pluginServices } from '../../services/plugin_services'; +import { embeddableService } from '../../services/kibana_services'; import { DashboardContainer } from './dashboard_container'; const embeddableFactory = new ContactCardEmbeddableFactory((() => null) as any, {} as any); -pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(embeddableFactory); +embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(embeddableFactory); test('DashboardContainer initializes embeddables', (done) => { const container = buildMockDashboard({ diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx index 43f733895f1f..161b2f93f12a 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container.tsx @@ -7,59 +7,69 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import deepEqual from 'fast-deep-equal'; +import { omit } from 'lodash'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { batch } from 'react-redux'; +import { + BehaviorSubject, + Subject, + Subscription, + distinctUntilChanged, + first, + map, + skipWhile, + switchMap, +} from 'rxjs'; +import { v4 } from 'uuid'; + import { METRIC_TYPE } from '@kbn/analytics'; import type { Reference } from '@kbn/content-management-utils'; -import type { I18nStart, KibanaExecutionContext, OverlayRef } from '@kbn/core/public'; -import { - type PublishingSubject, - apiPublishesPanelTitle, - apiPublishesUnsavedChanges, - getPanelTitle, - PublishesViewMode, - PublishesDataLoading, - apiPublishesDataLoading, -} from '@kbn/presentation-publishing'; +import { ControlGroupApi, ControlGroupSerializedState } from '@kbn/controls-plugin/public'; +import type { KibanaExecutionContext, OverlayRef } from '@kbn/core/public'; import { RefreshInterval } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import { Container, DefaultEmbeddableApi, EmbeddableFactoryNotFoundError, - embeddableInputToSubject, - isExplicitInputWithAttributes, PanelNotFoundError, ViewMode, + embeddableInputToSubject, + isExplicitInputWithAttributes, type EmbeddableFactory, type EmbeddableInput, type EmbeddableOutput, type IEmbeddable, } from '@kbn/embeddable-plugin/public'; import type { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; -import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { HasRuntimeChildState, HasSaveNotification, HasSerializedChildState, + PanelPackage, TrackContentfulRender, TracksQueryPerformance, combineCompatibleChildrenApis, } from '@kbn/presentation-containers'; -import { PanelPackage } from '@kbn/presentation-containers'; +import { PublishesSettings } from '@kbn/presentation-containers/interfaces/publishes_settings'; +import { apiHasSerializableState } from '@kbn/presentation-containers/interfaces/serialized_state'; +import { + PublishesDataLoading, + PublishesViewMode, + apiPublishesDataLoading, + apiPublishesPanelTitle, + apiPublishesUnsavedChanges, + getPanelTitle, + type PublishingSubject, +} from '@kbn/presentation-publishing'; import { ReduxEmbeddableTools, ReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { ExitFullScreenButtonKibanaProvider } from '@kbn/shared-ux-button-exit-full-screen'; -import deepEqual from 'fast-deep-equal'; -import { omit } from 'lodash'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import { batch } from 'react-redux'; -import { BehaviorSubject, Subject, Subscription, first, skipWhile, switchMap } from 'rxjs'; -import { distinctUntilChanged, map } from 'rxjs'; -import { v4 } from 'uuid'; -import { PublishesSettings } from '@kbn/presentation-containers/interfaces/publishes_settings'; -import { apiHasSerializableState } from '@kbn/presentation-containers/interfaces/serialized_state'; -import { ControlGroupApi, ControlGroupSerializedState } from '@kbn/controls-plugin/public'; -import { DashboardLocatorParams, DASHBOARD_CONTAINER_TYPE, DashboardApi } from '../..'; + +import { DASHBOARD_CONTAINER_TYPE, DashboardApi, DashboardLocatorParams } from '../..'; import { DashboardAttributes, DashboardContainerInput, @@ -70,6 +80,8 @@ import { getReferencesForControls, getReferencesForPanelId, } from '../../../common/dashboard_container/persistable_state/dashboard_container_references'; +import { DashboardContext } from '../../dashboard_api/use_dashboard_api'; +import { getPanelAddedSuccessString } from '../../dashboard_app/_dashboard_app_strings'; import { DASHBOARD_APP_ID, DASHBOARD_UI_METRIC_ID, @@ -77,13 +89,19 @@ import { DEFAULT_PANEL_WIDTH, PanelPlacementStrategy, } from '../../dashboard_constants'; -import { DashboardAnalyticsService } from '../../services/analytics/types'; -import { DashboardCapabilitiesService } from '../../services/dashboard_capabilities/types'; -import { pluginServices } from '../../services/plugin_services'; -import { placePanel } from '../panel_placement'; -import { runPanelPlacementStrategy } from '../panel_placement/place_new_panel_strategies'; +import { PANELS_CONTROL_GROUP_KEY } from '../../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; +import { + coreServices, + dataService, + embeddableService, + usageCollectionService, +} from '../../services/kibana_services'; +import { getDashboardCapabilities } from '../../utils/get_dashboard_capabilities'; import { DashboardViewport } from '../component/viewport/dashboard_viewport'; +import { placePanel } from '../panel_placement'; import { getDashboardPanelPlacementSetting } from '../panel_placement/panel_placement_registry'; +import { runPanelPlacementStrategy } from '../panel_placement/place_new_panel_strategies'; import { dashboardContainerReducers } from '../state/dashboard_container_reducers'; import { getDiffingMiddleware } from '../state/diffing/dashboard_diffing_integration'; import { @@ -92,7 +110,7 @@ import { DashboardStateFromSettingsFlyout, UnsavedPanelState, } from '../types'; -import { addFromLibrary, addOrUpdateEmbeddable, runQuickSave, runInteractiveSave } from './api'; +import { addFromLibrary, addOrUpdateEmbeddable, runInteractiveSave, runQuickSave } from './api'; import { duplicateDashboardPanel } from './api/duplicate_dashboard_panel'; import { combineDashboardFiltersWithControlGroupFilters, @@ -104,9 +122,6 @@ import { dashboardTypeDisplayLowercase, dashboardTypeDisplayName, } from './dashboard_container_factory'; -import { getPanelAddedSuccessString } from '../../dashboard_app/_dashboard_app_strings'; -import { PANELS_CONTROL_GROUP_KEY } from '../../services/dashboard_backup/dashboard_backup_service'; -import { DashboardContext } from '../../dashboard_api/use_dashboard_api'; export interface InheritedChildInput { filters: Filter[]; @@ -186,16 +201,11 @@ export class DashboardContainer // Services that are used in the Dashboard container code private creationOptions?: DashboardCreationOptions; - private analyticsService: DashboardAnalyticsService; - private showWriteControls: DashboardCapabilitiesService['showWriteControls']; - private i18n: I18nStart; - private theme; - private chrome; - private customBranding; + private showWriteControls: boolean; public trackContentfulRender() { - if (!this.hadContentfulRender && this.analyticsService) { - this.analyticsService.reportEvent('dashboard_loaded_with_data', {}); + if (!this.hadContentfulRender) { + coreServices.analytics.reportEvent('dashboard_loaded_with_data', {}); } this.hadContentfulRender = true; } @@ -238,37 +248,26 @@ export class DashboardContainer }); } - const { - usageCollection, - embeddable: { getEmbeddableFactory }, - } = pluginServices.getServices(); - super( { ...initialInput, }, { embeddableLoaded: {} }, - getEmbeddableFactory, + embeddableService.getEmbeddableFactory, parent, { untilContainerInitialized } ); + ({ showWriteControls: this.showWriteControls } = getDashboardCapabilities()); + this.controlGroupApi$ = controlGroupApi$; this.untilContainerInitialized = untilContainerInitialized; - this.trackPanelAddMetric = usageCollection.reportUiCounter?.bind( - usageCollection, + this.trackPanelAddMetric = usageCollectionService?.reportUiCounter.bind( + usageCollectionService, DASHBOARD_UI_METRIC_ID ); - ({ - analytics: this.analyticsService, - settings: { theme: this.theme, i18n: this.i18n }, - chrome: this.chrome, - customBranding: this.customBranding, - dashboardCapabilities: { showWriteControls: this.showWriteControls }, - } = pluginServices.getServices()); - this.creationOptions = creationOptions; this.searchSessionId = initialSessionId; this.searchSessionId$.next(initialSessionId); @@ -475,12 +474,12 @@ export class DashboardContainer ReactDOM.render( @@ -610,14 +609,9 @@ export class DashboardContainer panelPackage: PanelPackage, displaySuccessMessage?: boolean ) { - const { - notifications: { toasts }, - embeddable: { getEmbeddableFactory, reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); - const onSuccess = (id?: string, title?: string) => { if (!displaySuccessMessage) return; - toasts.addSuccess({ + coreServices.notifications.toasts.addSuccess({ title: getPanelAddedSuccessString(title), 'data-test-subj': 'addEmbeddableToDashboardSuccess', }); @@ -628,10 +622,10 @@ export class DashboardContainer if (this.trackPanelAddMetric) { this.trackPanelAddMetric(METRIC_TYPE.CLICK, panelPackage.panelType); } - if (reactEmbeddableRegistryHasKey(panelPackage.panelType)) { + if (embeddableService.reactEmbeddableRegistryHasKey(panelPackage.panelType)) { const newId = v4(); - const getCustomPlacementSettingFunc = await getDashboardPanelPlacementSetting( + const getCustomPlacementSettingFunc = getDashboardPanelPlacementSetting( panelPackage.panelType ); @@ -671,7 +665,7 @@ export class DashboardContainer return await this.untilReactEmbeddableLoaded(newId); } - const embeddableFactory = getEmbeddableFactory(panelPackage.panelType); + const embeddableFactory = embeddableService.getEmbeddableFactory(panelPackage.panelType); if (!embeddableFactory) { throw new EmbeddableFactoryNotFoundError(panelPackage.panelType); } @@ -709,11 +703,8 @@ export class DashboardContainer } public getDashboardPanelFromId = async (panelId: string) => { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); const panel = this.getInput().panels[panelId]; - if (reactEmbeddableRegistryHasKey(panel.type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(panel.type)) { const child = this.children$.value[panelId]; if (!child) throw new PanelNotFoundError(); const serialized = apiHasSerializableState(child) @@ -769,13 +760,7 @@ export class DashboardContainer // if we are using the unified search integration, we need to force reset the time picker. if (this.creationOptions?.useUnifiedSearchIntegration && lastSavedTimeRestore) { - const { - data: { - query: { - timefilter: { timefilter: timeFilterService }, - }, - }, - } = pluginServices.getServices(); + const timeFilterService = dataService.query.timefilter.timefilter; if (timeRange) timeFilterService.setTime(timeRange); if (refreshInterval) timeFilterService.setRefreshInterval(refreshInterval); } @@ -790,13 +775,12 @@ export class DashboardContainer this.integrationSubscriptions = new Subscription(); this.stopSyncingWithUnifiedSearch?.(); - const { - dashboardContentManagement: { loadDashboardState }, - } = pluginServices.getServices(); if (newCreationOptions) { this.creationOptions = { ...this.creationOptions, ...newCreationOptions }; } - const loadDashboardReturn = await loadDashboardState({ id: newSavedObjectId }); + const loadDashboardReturn = await getDashboardContentManagementService().loadDashboardState({ + id: newSavedObjectId, + }); const dashboardContainerReady$ = new Subject(); const untilDashboardReady = () => @@ -908,13 +892,10 @@ export class DashboardContainer }; public async getPanelTitles(): Promise { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); const titles: string[] = []; for (const [id, panel] of Object.entries(this.getInput().panels)) { const title = await (async () => { - if (reactEmbeddableRegistryHasKey(panel.type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(panel.type)) { const child = this.children$.value[id]; return apiPublishesPanelTitle(child) ? getPanelTitle(child) : ''; } @@ -1039,12 +1020,9 @@ export class DashboardContainer }; public removePanel(id: string) { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); const type = this.getInput().panels[id]?.type; this.removeEmbeddable(id); - if (reactEmbeddableRegistryHasKey(type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(type)) { const { [id]: childToRemove, ...otherChildren } = this.children$.value; this.children$.next(otherChildren); } diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container_factory.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container_factory.tsx index 1a87659370f2..ecccc49a60f1 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container_factory.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/dashboard_container_factory.tsx @@ -29,7 +29,7 @@ import { DEFAULT_DASHBOARD_INPUT } from '../../dashboard_constants'; import { LoadDashboardReturn, SavedDashboardInput, -} from '../../services/dashboard_content_management/types'; +} from '../../services/dashboard_content_management_service/types'; import type { DashboardContainer } from './dashboard_container'; export type DashboardContainerFactory = EmbeddableFactory< diff --git a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.test.tsx b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.test.tsx index 6248800cf374..153324f5a2bf 100644 --- a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.test.tsx +++ b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.test.tsx @@ -7,22 +7,22 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React from 'react'; +import { setStubKibanaServices } from '@kbn/embeddable-plugin/public/mocks'; +import { NotFoundPrompt } from '@kbn/shared-ux-prompt-not-found'; +import { mountWithIntl } from '@kbn/test-jest-helpers'; import { ReactWrapper } from 'enzyme'; +import React from 'react'; import { act } from 'react-dom/test-utils'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { NotFoundPrompt } from '@kbn/shared-ux-prompt-not-found'; -import { setStubKibanaServices } from '@kbn/embeddable-plugin/public/mocks'; +import { SavedObjectNotFound } from '@kbn/kibana-utils-plugin/common'; +import { setStubKibanaServices as setPresentationPanelMocks } from '@kbn/presentation-panel-plugin/public/mocks'; +import { BehaviorSubject } from 'rxjs'; import { DashboardContainerFactory } from '..'; import { DASHBOARD_CONTAINER_TYPE } from '../..'; -import { DashboardRenderer } from './dashboard_renderer'; -import { pluginServices } from '../../services/plugin_services'; -import { SavedObjectNotFound } from '@kbn/kibana-utils-plugin/common'; +import { embeddableService } from '../../services/kibana_services'; import { DashboardContainer } from '../embeddable/dashboard_container'; import { DashboardCreationOptions } from '../embeddable/dashboard_container_factory'; -import { setStubKibanaServices as setPresentationPanelMocks } from '@kbn/presentation-panel-plugin/public/mocks'; -import { BehaviorSubject } from 'rxjs'; +import { DashboardRenderer } from './dashboard_renderer'; describe('dashboard renderer', () => { let mockDashboardContainer: DashboardContainer; @@ -39,9 +39,7 @@ describe('dashboard renderer', () => { mockDashboardFactory = { create: jest.fn().mockReturnValue(mockDashboardContainer), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockDashboardFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockDashboardFactory); setPresentationPanelMocks(); }); @@ -49,9 +47,7 @@ describe('dashboard renderer', () => { await act(async () => { mountWithIntl(); }); - expect(pluginServices.getServices().embeddable.getEmbeddableFactory).toHaveBeenCalledWith( - DASHBOARD_CONTAINER_TYPE - ); + expect(embeddableService.getEmbeddableFactory).toHaveBeenCalledWith(DASHBOARD_CONTAINER_TYPE); expect(mockDashboardFactory.create).toHaveBeenCalled(); }); @@ -109,9 +105,7 @@ describe('dashboard renderer', () => { mockDashboardFactory = { create: jest.fn().mockReturnValue(mockErrorEmbeddable), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockDashboardFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockDashboardFactory); let wrapper: ReactWrapper; await act(async () => { @@ -133,9 +127,7 @@ describe('dashboard renderer', () => { const mockErrorFactory = { create: jest.fn().mockReturnValue(mockErrorEmbeddable), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockErrorFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockErrorFactory); // render the dashboard - it should run into an error and render the error embeddable. let wrapper: ReactWrapper; @@ -156,9 +148,7 @@ describe('dashboard renderer', () => { const mockSuccessFactory = { create: jest.fn().mockReturnValue(mockSuccessEmbeddable), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockSuccessFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockSuccessFactory); // update the saved object id to trigger another dashboard load. await act(async () => { @@ -187,9 +177,7 @@ describe('dashboard renderer', () => { const mockErrorFactory = { create: jest.fn().mockReturnValue(mockErrorEmbeddable), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockErrorFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockErrorFactory); // render the dashboard - it should run into an error and render the error embeddable. let wrapper: ReactWrapper; @@ -252,9 +240,7 @@ describe('dashboard renderer', () => { const mockSuccessFactory = { create: jest.fn().mockReturnValue(mockSuccessEmbeddable), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockSuccessFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockSuccessFactory); let wrapper: ReactWrapper; await act(async () => { @@ -279,9 +265,7 @@ describe('dashboard renderer', () => { const mockUseMarginFalseFactory = { create: jest.fn().mockReturnValue(mockUseMarginFalseEmbeddable), } as unknown as DashboardContainerFactory; - pluginServices.getServices().embeddable.getEmbeddableFactory = jest - .fn() - .mockReturnValue(mockUseMarginFalseFactory); + embeddableService.getEmbeddableFactory = jest.fn().mockReturnValue(mockUseMarginFalseFactory); let wrapper: ReactWrapper; await act(async () => { diff --git a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx index 1222b3433877..e8ef4faef724 100644 --- a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx +++ b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_renderer.tsx @@ -17,11 +17,13 @@ import { v4 as uuidv4 } from 'uuid'; import { EuiLoadingElastic, EuiLoadingSpinner } from '@elastic/eui'; import { ErrorEmbeddable, isErrorEmbeddable } from '@kbn/embeddable-plugin/public'; import { SavedObjectNotFound } from '@kbn/kibana-utils-plugin/common'; - -import { LocatorPublic } from '@kbn/share-plugin/common'; import { useStateFromPublishingSubject } from '@kbn/presentation-publishing'; +import { LocatorPublic } from '@kbn/share-plugin/common'; + import { DASHBOARD_CONTAINER_TYPE } from '..'; import { DashboardContainerInput } from '../../../common'; +import { DashboardApi } from '../../dashboard_api/types'; +import { embeddableService, screenshotModeService } from '../../services/kibana_services'; import type { DashboardContainer } from '../embeddable/dashboard_container'; import { DashboardContainerFactory, @@ -30,8 +32,6 @@ import { } from '../embeddable/dashboard_container_factory'; import { DashboardLocatorParams, DashboardRedirect } from '../types'; import { Dashboard404Page } from './dashboard_404'; -import { DashboardApi } from '../../dashboard_api/types'; -import { pluginServices } from '../../services/plugin_services'; export interface DashboardRendererProps { onApiAvailable?: (api: DashboardApi) => void; @@ -57,8 +57,6 @@ export function DashboardRenderer({ const [fatalError, setFatalError] = useState(); const [dashboardMissing, setDashboardMissing] = useState(false); - const { embeddable, screenshotMode } = pluginServices.getServices(); - const id = useMemo(() => uuidv4(), []); useEffect(() => { @@ -93,7 +91,7 @@ export function DashboardRenderer({ (async () => { const creationOptions = await getCreationOptions?.(); - const dashboardFactory = embeddable.getEmbeddableFactory( + const dashboardFactory = embeddableService.getEmbeddableFactory( DASHBOARD_CONTAINER_TYPE ) as DashboardContainerFactory & { create: DashboardContainerFactoryDefinition['create']; @@ -141,7 +139,7 @@ export function DashboardRenderer({ const viewportClasses = classNames( 'dashboardViewport', - { 'dashboardViewport--screenshotMode': screenshotMode }, + { 'dashboardViewport--screenshotMode': screenshotModeService.isScreenshotMode() }, { 'dashboardViewport--loading': loading } ); diff --git a/src/plugins/dashboard/public/dashboard_container/external_api/lazy_dashboard_renderer.tsx b/src/plugins/dashboard/public/dashboard_container/external_api/lazy_dashboard_renderer.tsx index 56c6e5f82ac1..d8e3c6668df3 100644 --- a/src/plugins/dashboard/public/dashboard_container/external_api/lazy_dashboard_renderer.tsx +++ b/src/plugins/dashboard/public/dashboard_container/external_api/lazy_dashboard_renderer.tsx @@ -10,9 +10,13 @@ import React from 'react'; import { dynamic } from '@kbn/shared-ux-utility'; import type { DashboardRendererProps } from './dashboard_renderer'; +import { untilPluginStartServicesReady } from '../../services/kibana_services'; const Component = dynamic(async () => { - const { DashboardRenderer } = await import('./dashboard_renderer'); + const [{ DashboardRenderer }] = await Promise.all([ + import('./dashboard_renderer'), + untilPluginStartServicesReady(), + ]); return { default: DashboardRenderer, }; diff --git a/src/plugins/dashboard/public/dashboard_container/index.ts b/src/plugins/dashboard/public/dashboard_container/index.ts index 815823f74164..d8103f1e3f9b 100644 --- a/src/plugins/dashboard/public/dashboard_container/index.ts +++ b/src/plugins/dashboard/public/dashboard_container/index.ts @@ -8,7 +8,7 @@ */ import { LATEST_VERSION } from '../../common/content_management'; -import { convertNumberToDashboardVersion } from '../services/dashboard_content_management/lib/dashboard_versioning'; +import { convertNumberToDashboardVersion } from '../services/dashboard_content_management_service/lib/dashboard_versioning'; export const DASHBOARD_CONTAINER_TYPE = 'dashboard'; diff --git a/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_functions.ts b/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_functions.ts index 72026f2ccd84..2803d9be0e32 100644 --- a/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_functions.ts +++ b/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_functions.ts @@ -7,10 +7,12 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { compareFilters, COMPARE_ALL_OPTIONS, isFilterPinned } from '@kbn/es-query'; import fastIsEqual from 'fast-deep-equal'; + +import { COMPARE_ALL_OPTIONS, compareFilters, isFilterPinned } from '@kbn/es-query'; + import { DashboardContainerInput } from '../../../../common'; -import { pluginServices } from '../../../services/plugin_services'; +import { embeddableService } from '../../../services/kibana_services'; import { DashboardContainer } from '../../embeddable/dashboard_container'; import { DashboardContainerInputWithoutId } from '../../types'; import { areTimesEqual, getPanelLayoutsAreEqual } from './dashboard_diffing_utils'; @@ -75,11 +77,8 @@ export const unsavedChangesDiffingFunctions: DashboardDiffFunctions = { const explicitInputComparePromises = Object.values(currentValue ?? {}).map( (panel) => new Promise((resolve, reject) => { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); const embeddableId = panel.explicitInput.id; - if (!embeddableId || reactEmbeddableRegistryHasKey(panel.type)) { + if (!embeddableId || embeddableService.reactEmbeddableRegistryHasKey(panel.type)) { // if this is a new style embeddable, it will handle its own diffing. reject(); return; diff --git a/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts b/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts index b0337ccbb0d3..1bcba571dc24 100644 --- a/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts +++ b/src/plugins/dashboard/public/dashboard_container/state/diffing/dashboard_diffing_integration.ts @@ -13,11 +13,13 @@ import { combineLatest, debounceTime, skipWhile, startWith, switchMap } from 'rx import { DashboardContainer, DashboardCreationOptions } from '../..'; import { DashboardContainerInput } from '../../../../common'; import { CHANGE_CHECK_DEBOUNCE } from '../../../dashboard_constants'; -import { pluginServices } from '../../../services/plugin_services'; +import { + PANELS_CONTROL_GROUP_KEY, + getDashboardBackupService, +} from '../../../services/dashboard_backup_service'; import { UnsavedPanelState } from '../../types'; import { dashboardContainerReducers } from '../dashboard_container_reducers'; import { isKeyEqualAsync, unsavedChangesDiffingFunctions } from './dashboard_diffing_functions'; -import { PANELS_CONTROL_GROUP_KEY } from '../../../services/dashboard_backup/dashboard_backup_service'; /** * An array of reducers which cannot cause unsaved changes. Unsaved changes only compares the explicit input @@ -188,10 +190,9 @@ function backupUnsavedChanges( dashboardChanges: Partial, reactEmbeddableChanges: UnsavedPanelState ) { - const { dashboardBackup } = pluginServices.getServices(); const dashboardStateToBackup = omit(dashboardChanges, keysToOmitFromSessionStorage); - dashboardBackup.setState( + getDashboardBackupService().setState( this.getDashboardSavedObjectId(), { ...dashboardStateToBackup, diff --git a/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx b/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx index de1d872f081a..f3dac2e9bb62 100644 --- a/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/confirm_overlays.tsx @@ -10,6 +10,7 @@ import React from 'react'; import { + EUI_MODAL_CANCEL_BUTTON, EuiButton, EuiButtonEmpty, EuiFocusTrap, @@ -19,12 +20,11 @@ import { EuiModalHeaderTitle, EuiOutsideClickDetector, EuiText, - EUI_MODAL_CANCEL_BUTTON, } from '@elastic/eui'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { pluginServices } from '../services/plugin_services'; +import { coreServices } from '../services/kibana_services'; import { createConfirmStrings, resetConfirmStrings } from './_dashboard_listing_strings'; export type DiscardOrKeepSelection = 'cancel' | 'discard' | 'keep'; @@ -33,21 +33,19 @@ export const confirmDiscardUnsavedChanges = ( discardCallback: () => void, viewMode: ViewMode = ViewMode.EDIT // we want to show the danger modal on the listing page ) => { - const { - overlays: { openConfirm }, - } = pluginServices.getServices(); - - openConfirm(resetConfirmStrings.getResetSubtitle(viewMode), { - confirmButtonText: resetConfirmStrings.getResetConfirmButtonText(), - buttonColor: viewMode === ViewMode.EDIT ? 'danger' : 'primary', - maxWidth: 500, - defaultFocusedButton: EUI_MODAL_CANCEL_BUTTON, - title: resetConfirmStrings.getResetTitle(), - }).then((isConfirmed) => { - if (isConfirmed) { - discardCallback(); - } - }); + coreServices.overlays + .openConfirm(resetConfirmStrings.getResetSubtitle(viewMode), { + confirmButtonText: resetConfirmStrings.getResetConfirmButtonText(), + buttonColor: viewMode === ViewMode.EDIT ? 'danger' : 'primary', + maxWidth: 500, + defaultFocusedButton: EUI_MODAL_CANCEL_BUTTON, + title: resetConfirmStrings.getResetTitle(), + }) + .then((isConfirmed) => { + if (isConfirmed) { + discardCallback(); + } + }); }; export const confirmCreateWithUnsaved = ( @@ -57,13 +55,7 @@ export const confirmCreateWithUnsaved = ( const titleId = 'confirmDiscardOrKeepTitle'; const descriptionId = 'confirmDiscardOrKeepDescription'; - const { - analytics, - settings: { i18n, theme }, - overlays: { openModal }, - } = pluginServices.getServices(); - - const session = openModal( + const session = coreServices.overlays.openModal( toMountPoint( , - { analytics, i18n, theme } + { analytics: coreServices.analytics, i18n: coreServices.i18n, theme: coreServices.theme } ), { 'data-test-subj': 'dashboardCreateConfirmModal', 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 c1aabad7eb23..e17433709b1f 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.test.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.test.tsx @@ -7,22 +7,22 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { ComponentType, ReactWrapper, mount } from 'enzyme'; import React, { PropsWithChildren } from 'react'; import { act } from 'react-dom/test-utils'; -import { mount, ReactWrapper, ComponentType } from 'enzyme'; -import { I18nProvider } from '@kbn/i18n-react'; - -import { pluginServices } from '../services/plugin_services'; -import { DashboardListing } from './dashboard_listing'; +import { I18nProvider } from '@kbn/i18n-react'; /** * Mock Table List view. This dashboard component is a wrapper around the shared UX table List view. We * need to ensure we're passing down the correct props, but the table list view itself doesn't need to be rendered * in our tests because it is covered in its package. */ import { TableListView } from '@kbn/content-management-table-list-view'; + +import { DashboardListing } from './dashboard_listing'; import { DashboardListingProps } from './types'; -// import { TableListViewKibanaProvider } from '@kbn/content-management-table-list-view'; +import { coreServices } from '../services/kibana_services'; + jest.mock('@kbn/content-management-table-list-view-table', () => { const originalModule = jest.requireActual('@kbn/content-management-table-list-view-table'); return { @@ -65,7 +65,7 @@ function mountWith({ props: incomingProps }: { props?: Partial { - pluginServices.getServices().dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; let component: ReactWrapper; @@ -80,7 +80,7 @@ test('initial filter is passed through', async () => { }); test('when showWriteControls is true, table list view is passed editing functions', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = true; + (coreServices.application.capabilities as any).dashboard.showWriteControls = true; let component: ReactWrapper; @@ -99,7 +99,7 @@ test('when showWriteControls is true, table list view is passed editing function }); test('when showWriteControls is false, table list view is not passed editing functions', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; let component: ReactWrapper; diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx index 96449ed7f3ec..f6072169e5bd 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx @@ -7,26 +7,23 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; import React, { useMemo } from 'react'; +import { FavoritesClient } from '@kbn/content-management-favorites-public'; import { TableListView } from '@kbn/content-management-table-list-view'; -import { - type TableListViewKibanaDependencies, - TableListViewKibanaProvider, -} from '@kbn/content-management-table-list-view-table'; - +import { TableListViewKibanaProvider } from '@kbn/content-management-table-list-view-table'; +import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; -import { pluginServices } from '../services/plugin_services'; - +import { DASHBOARD_APP_ID, DASHBOARD_CONTENT_ID } from '../dashboard_constants'; +import { + coreServices, + savedObjectsTaggingService, + usageCollectionService, +} from '../services/kibana_services'; import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; import { useDashboardListingTable } from './hooks/use_dashboard_listing_table'; -import { - DashboardListingProps, - DashboardSavedObjectUserContent, - TableListViewApplicationService, -} from './types'; +import { DashboardListingProps, DashboardSavedObjectUserContent } from './types'; export const DashboardListing = ({ children, @@ -35,59 +32,38 @@ export const DashboardListing = ({ getDashboardUrl, useSessionStorageIntegration, }: DashboardListingProps) => { - const { - analytics, - application, - notifications, - overlays, - http, - i18n, - chrome: { theme }, - savedObjectsTagging, - coreContext: { executionContext }, - userProfile, - dashboardContentInsights: { contentInsightsClient }, - dashboardFavorites, - } = pluginServices.getServices(); - - useExecutionContext(executionContext, { + useExecutionContext(coreServices.executionContext, { type: 'application', page: 'list', }); - const { unsavedDashboardIds, refreshUnsavedDashboards, tableListViewTableProps } = - useDashboardListingTable({ - goToDashboard, - getDashboardUrl, - useSessionStorageIntegration, - initialFilter, - }); + const { + unsavedDashboardIds, + refreshUnsavedDashboards, + tableListViewTableProps, + contentInsightsClient, + } = 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 - ? ({ - ui: savedObjectsTagging, - } as TableListViewKibanaDependencies['savedObjectsTagging']) - : undefined; - }, [savedObjectsTagging]); + const dashboardFavoritesClient = useMemo(() => { + return new FavoritesClient(DASHBOARD_APP_ID, DASHBOARD_CONTENT_ID, { + http: coreServices.http, + usageCollection: usageCollectionService, + }); + }, []); return ( 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 92d108231b4f..a5661238f9ad 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 @@ -7,18 +7,18 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { ComponentType, ReactWrapper, mount } from 'enzyme'; import React from 'react'; import { act } from 'react-dom/test-utils'; -import { mount, ReactWrapper, ComponentType } from 'enzyme'; import { I18nProvider } from '@kbn/i18n-react'; +import { coreServices } from '../services/kibana_services'; +import { confirmDiscardUnsavedChanges } from './confirm_overlays'; import { DashboardListingEmptyPrompt, DashboardListingEmptyPromptProps, } from './dashboard_listing_empty_prompt'; -import { pluginServices } from '../services/plugin_services'; -import { confirmDiscardUnsavedChanges } from './confirm_overlays'; jest.mock('./confirm_overlays', () => { const originalModule = jest.requireActual('./confirm_overlays'); @@ -56,7 +56,7 @@ function mountWith({ } test('renders readonly empty prompt when showWriteControls is off', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; let component: ReactWrapper; await act(async () => { @@ -68,7 +68,7 @@ test('renders readonly empty prompt when showWriteControls is off', async () => }); test('renders empty prompt with link when showWriteControls is on', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = true; + (coreServices.application.capabilities as any).dashboard.showWriteControls = true; let component: ReactWrapper; await act(async () => { @@ -80,7 +80,7 @@ test('renders empty prompt with link when showWriteControls is on', async () => }); test('renders disabled action button when disableCreateDashboardButton is true', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = true; + (coreServices.application.capabilities as any).dashboard.showWriteControls = true; let component: ReactWrapper; await act(async () => { @@ -95,7 +95,7 @@ test('renders disabled action button when disableCreateDashboardButton is true', }); test('renders continue button when no dashboards exist but one is in progress', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = true; + (coreServices.application.capabilities as any).dashboard.showWriteControls = true; let component: ReactWrapper; let props: DashboardListingEmptyPromptProps; await act(async () => { @@ -114,7 +114,7 @@ test('renders continue button when no dashboards exist but one is in progress', }); test('renders discard button when no dashboards exist but one is in progress', async () => { - pluginServices.getServices().dashboardCapabilities.showWriteControls = true; + (coreServices.application.capabilities as any).dashboard.showWriteControls = true; let component: ReactWrapper; await act(async () => { ({ component } = mountWith({ 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 dfb52d579c39..3ddaca1413dc 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 @@ -8,24 +8,28 @@ */ import { - EuiLink, EuiButton, - EuiFlexItem, - EuiFlexGroup, EuiButtonEmpty, EuiEmptyPrompt, + EuiFlexGroup, + EuiFlexItem, + EuiLink, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React, { useCallback, useMemo } from 'react'; import { - noItemsStrings, - getNewDashboardTitle, + DASHBOARD_PANELS_UNSAVED_ID, + getDashboardBackupService, +} from '../services/dashboard_backup_service'; +import { coreServices } from '../services/kibana_services'; +import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; +import { dashboardUnsavedListingStrings, + getNewDashboardTitle, + noItemsStrings, } from './_dashboard_listing_strings'; -import { pluginServices } from '../services/plugin_services'; import { confirmDiscardUnsavedChanges } from './confirm_overlays'; -import { DASHBOARD_PANELS_UNSAVED_ID } from '../services/dashboard_backup/dashboard_backup_service'; import { DashboardListingProps } from './types'; export interface DashboardListingEmptyPromptProps { @@ -45,12 +49,6 @@ export const DashboardListingEmptyPrompt = ({ createItem, disableCreateDashboardButton, }: DashboardListingEmptyPromptProps) => { - const { - application, - dashboardBackup, - dashboardCapabilities: { showWriteControls }, - } = pluginServices.getServices(); - const isEditingFirstDashboard = useMemo( () => useSessionStorageIntegration && unsavedDashboardIds.length === 1, [unsavedDashboardIds.length, useSessionStorageIntegration] @@ -78,8 +76,9 @@ export const DashboardListingEmptyPrompt = ({ color="danger" onClick={() => confirmDiscardUnsavedChanges(() => { - dashboardBackup.clearState(DASHBOARD_PANELS_UNSAVED_ID); - setUnsavedDashboardIds(dashboardBackup.getDashboardIdsWithUnsavedChanges()); + const dashboardBackupService = getDashboardBackupService(); + dashboardBackupService.clearState(DASHBOARD_PANELS_UNSAVED_ID); + setUnsavedDashboardIds(dashboardBackupService.getDashboardIdsWithUnsavedChanges()); }) } data-test-subj="discardDashboardPromptButton" @@ -106,12 +105,11 @@ export const DashboardListingEmptyPrompt = ({ isEditingFirstDashboard, createItem, disableCreateDashboardButton, - dashboardBackup, goToDashboard, setUnsavedDashboardIds, ]); - if (!showWriteControls) { + if (!getDashboardCapabilities().showWriteControls) { return ( - application.navigateToApp('home', { + coreServices.application.navigateToApp('home', { path: '#/tutorial_directory/sampleData', }) } diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx index 5935b4d861a4..96d9025f822f 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx @@ -7,26 +7,19 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; -import React, { useMemo } from 'react'; +import React from 'react'; import { - type TableListViewKibanaDependencies, TableListViewKibanaProvider, TableListViewTable, } from '@kbn/content-management-table-list-view-table'; - +import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; -import { pluginServices } from '../services/plugin_services'; - +import { coreServices, savedObjectsTaggingService } from '../services/kibana_services'; import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; import { useDashboardListingTable } from './hooks/use_dashboard_listing_table'; -import { - DashboardListingProps, - DashboardSavedObjectUserContent, - TableListViewApplicationService, -} from './types'; +import { DashboardListingProps, DashboardSavedObjectUserContent } from './types'; export const DashboardListingTable = ({ disableCreateDashboardButton, @@ -37,21 +30,7 @@ export const DashboardListingTable = ({ urlStateEnabled, showCreateDashboardButton = true, }: DashboardListingProps) => { - const { - analytics, - application, - notifications, - overlays, - http, - i18n, - savedObjectsTagging, - coreContext: { executionContext }, - chrome: { theme }, - userProfile, - dashboardContentInsights: { contentInsightsClient }, - } = pluginServices.getServices(); - - useExecutionContext(executionContext, { + useExecutionContext(coreServices.executionContext, { type: 'application', page: 'list', }); @@ -60,6 +39,7 @@ export const DashboardListingTable = ({ unsavedDashboardIds, refreshUnsavedDashboards, tableListViewTableProps: { title: tableCaption, ...tableListViewTable }, + contentInsightsClient, } = useDashboardListingTable({ disableCreateDashboardButton, goToDashboard, @@ -70,35 +50,11 @@ export const DashboardListingTable = ({ showCreateDashboardButton, }); - 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( - () => ({ - analytics, - application: application as TableListViewApplicationService, - notifications, - overlays, - http, - i18n, - theme, - userProfile, - }), - [application, notifications, overlays, http, analytics, i18n, theme, userProfile] - ); - return ( diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.test.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.test.tsx index e777cc12258e..74b538d87c20 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.test.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.test.tsx @@ -7,17 +7,21 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { ComponentType, mount } from 'enzyme'; import React from 'react'; -import { mount, ComponentType } from 'enzyme'; +import { findTestSubject } from '@elastic/eui/lib/test'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; import { I18nProvider } from '@kbn/i18n-react'; import { waitFor } from '@testing-library/react'; -import { findTestSubject } from '@elastic/eui/lib/test'; -import { pluginServices } from '../services/plugin_services'; +import { + DASHBOARD_PANELS_UNSAVED_ID, + getDashboardBackupService, +} from '../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../services/dashboard_content_management_service'; +import { coreServices } from '../services/kibana_services'; import { DashboardUnsavedListing, DashboardUnsavedListingProps } from './dashboard_unsaved_listing'; -import { DASHBOARD_PANELS_UNSAVED_ID } from '../services/dashboard_backup/dashboard_backup_service'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; const makeDefaultProps = (): DashboardUnsavedListingProps => ({ goToDashboard: jest.fn(), @@ -39,12 +43,13 @@ function mountWith({ props: incomingProps }: { props?: Partial { + const dashboardBackupService = getDashboardBackupService(); + const dashboardContentManagementService = getDashboardContentManagementService(); + it('Gets information for each unsaved dashboard', async () => { mountWith({}); await waitFor(() => { - expect( - pluginServices.getServices().dashboardContentManagement.findDashboards.findByIds - ).toHaveBeenCalledTimes(1); + expect(dashboardContentManagementService.findDashboards.findByIds).toHaveBeenCalledTimes(1); }); }); @@ -53,9 +58,9 @@ describe('Unsaved listing', () => { props.unsavedDashboardIds = ['dashboardUnsavedOne', DASHBOARD_PANELS_UNSAVED_ID]; mountWith({ props }); await waitFor(() => { - expect( - pluginServices.getServices().dashboardContentManagement.findDashboards.findByIds - ).toHaveBeenCalledWith(['dashboardUnsavedOne']); + expect(dashboardContentManagementService.findDashboards.findByIds).toHaveBeenCalledWith([ + 'dashboardUnsavedOne', + ]); }); }); @@ -94,17 +99,13 @@ describe('Unsaved listing', () => { getDiscardButton().simulate('click'); waitFor(() => { component.update(); - expect(pluginServices.getServices().overlays.openConfirm).toHaveBeenCalled(); - expect(pluginServices.getServices().dashboardBackup.clearState).toHaveBeenCalledWith( - 'dashboardUnsavedOne' - ); + expect(coreServices.overlays.openConfirm).toHaveBeenCalled(); + expect(dashboardBackupService.clearState).toHaveBeenCalledWith('dashboardUnsavedOne'); }); }); it('removes unsaved changes from any dashboard which errors on fetch', async () => { - ( - pluginServices.getServices().dashboardContentManagement.findDashboards.findByIds as jest.Mock - ).mockResolvedValue([ + (dashboardContentManagementService.findDashboards.findByIds as jest.Mock).mockResolvedValue([ { id: 'failCase1', status: 'error', @@ -129,17 +130,11 @@ describe('Unsaved listing', () => { const { component } = mountWith({ props }); waitFor(() => { component.update(); - expect(pluginServices.getServices().dashboardBackup.clearState).toHaveBeenCalledWith( - 'failCase1' - ); - expect(pluginServices.getServices().dashboardBackup.clearState).toHaveBeenCalledWith( - 'failCase2' - ); + expect(dashboardBackupService.clearState).toHaveBeenCalledWith('failCase1'); + expect(dashboardBackupService.clearState).toHaveBeenCalledWith('failCase2'); // clearing panels from dashboard with errors should cause getDashboardIdsWithUnsavedChanges to be called again. - expect( - pluginServices.getServices().dashboardBackup.getDashboardIdsWithUnsavedChanges - ).toHaveBeenCalledTimes(2); + expect(dashboardBackupService.getDashboardIdsWithUnsavedChanges).toHaveBeenCalledTimes(2); }); }); }); diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.tsx index 02f8cb483e71..0e2358380130 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_unsaved_listing.tsx @@ -16,15 +16,18 @@ import { EuiSpacer, EuiTitle, } from '@elastic/eui'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { pluginServices } from '../services/plugin_services'; -import { confirmDiscardUnsavedChanges } from './confirm_overlays'; import { DashboardAttributes } from '../../common/content_management'; +import { + DASHBOARD_PANELS_UNSAVED_ID, + getDashboardBackupService, +} from '../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../services/dashboard_content_management_service'; import { dashboardUnsavedListingStrings, getNewDashboardTitle } from './_dashboard_listing_strings'; -import { DASHBOARD_PANELS_UNSAVED_ID } from '../services/dashboard_backup/dashboard_backup_service'; +import { confirmDiscardUnsavedChanges } from './confirm_overlays'; const DashboardUnsavedItem = ({ id, @@ -116,12 +119,8 @@ export const DashboardUnsavedListing = ({ unsavedDashboardIds, refreshUnsavedDashboards, }: DashboardUnsavedListingProps) => { - const { - dashboardBackup, - dashboardContentManagement: { findDashboards }, - } = pluginServices.getServices(); - const [items, setItems] = useState({}); + const dashboardBackupService = useMemo(() => getDashboardBackupService(), []); const onOpen = useCallback( (id?: string) => { @@ -133,11 +132,11 @@ export const DashboardUnsavedListing = ({ const onDiscard = useCallback( (id?: string) => { confirmDiscardUnsavedChanges(() => { - dashboardBackup.clearState(id); + dashboardBackupService.clearState(id); refreshUnsavedDashboards(); }); }, - [refreshUnsavedDashboards, dashboardBackup] + [dashboardBackupService, refreshUnsavedDashboards] ); useEffect(() => { @@ -148,37 +147,39 @@ export const DashboardUnsavedListing = ({ const existingDashboardsWithUnsavedChanges = unsavedDashboardIds.filter( (id) => id !== DASHBOARD_PANELS_UNSAVED_ID ); - findDashboards.findByIds(existingDashboardsWithUnsavedChanges).then((results) => { - const dashboardMap = {}; - if (canceled) { - return; - } - let hasError = false; - const newItems = results.reduce((map, result) => { - if (result.status === 'error') { - hasError = true; - if (result.error.statusCode === 404) { - // Save object not found error - dashboardBackup.clearState(result.id); + getDashboardContentManagementService() + .findDashboards.findByIds(existingDashboardsWithUnsavedChanges) + .then((results) => { + const dashboardMap = {}; + if (canceled) { + return; + } + let hasError = false; + const newItems = results.reduce((map, result) => { + if (result.status === 'error') { + hasError = true; + if (result.error.statusCode === 404) { + // Save object not found error + dashboardBackupService.clearState(result.id); + } + return map; } - return map; + return { + ...map, + [result.id || DASHBOARD_PANELS_UNSAVED_ID]: result.attributes, + }; + }, dashboardMap); + if (hasError) { + refreshUnsavedDashboards(); + return; } - return { - ...map, - [result.id || DASHBOARD_PANELS_UNSAVED_ID]: result.attributes, - }; - }, dashboardMap); - if (hasError) { - refreshUnsavedDashboards(); - return; - } - setItems(newItems); - }); + setItems(newItems); + }); return () => { canceled = true; }; - }, [refreshUnsavedDashboards, dashboardBackup, unsavedDashboardIds, findDashboards]); + }, [dashboardBackupService, refreshUnsavedDashboards, unsavedDashboardIds]); return unsavedDashboardIds.length === 0 ? null : ( <> 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 index b6f5a736e079..61b7bf402bc1 100644 --- 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 @@ -9,10 +9,13 @@ import { act, renderHook } from '@testing-library/react-hooks'; -import { useDashboardListingTable } from './use_dashboard_listing_table'; -import { pluginServices } from '../../services/plugin_services'; +import { getDashboardBackupService } from '../../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; +import { coreServices } from '../../services/kibana_services'; import { confirmCreateWithUnsaved } from '../confirm_overlays'; import { DashboardSavedObjectUserContent } from '../types'; +import { useDashboardListingTable } from './use_dashboard_listing_table'; + const clearStateMock = jest.fn(); const getDashboardUrl = jest.fn(); const goToDashboard = jest.fn(); @@ -26,7 +29,6 @@ const getUiSettingsMock = jest.fn().mockImplementation((key) => { } return null; }); -const getPluginServices = pluginServices.getServices(); jest.mock('@kbn/ebt-tools', () => ({ reportPerformanceMetricEvent: jest.fn(), @@ -45,20 +47,20 @@ jest.mock('../_dashboard_listing_strings', () => ({ })); describe('useDashboardListingTable', () => { + const dashboardBackupService = getDashboardBackupService(); + const dashboardContentManagementService = getDashboardContentManagementService(); + beforeEach(() => { jest.clearAllMocks(); - getPluginServices.dashboardBackup.dashboardHasUnsavedEdits = jest.fn().mockReturnValue(true); + dashboardBackupService.dashboardHasUnsavedEdits = jest.fn().mockReturnValue(true); - getPluginServices.dashboardBackup.getDashboardIdsWithUnsavedChanges = jest - .fn() - .mockReturnValue([]); + dashboardBackupService.getDashboardIdsWithUnsavedChanges = jest.fn().mockReturnValue([]); - getPluginServices.dashboardBackup.clearState = clearStateMock; - getPluginServices.dashboardCapabilities.showWriteControls = true; - getPluginServices.dashboardContentManagement.deleteDashboards = deleteDashboards; - getPluginServices.settings.uiSettings.get = getUiSettingsMock; - getPluginServices.notifications.toasts.addError = jest.fn(); + dashboardBackupService.clearState = clearStateMock; + dashboardContentManagementService.deleteDashboards = deleteDashboards; + coreServices.uiSettings.get = getUiSettingsMock; + coreServices.notifications.toasts.addError = jest.fn(); }); test('should return the correct initial hasInitialFetchReturned state', () => { @@ -232,8 +234,12 @@ describe('useDashboardListingTable', () => { }); test('createItem should be undefined when showWriteControls equals false', () => { - getPluginServices.dashboardCapabilities.showWriteControls = false; - + coreServices.application.capabilities = { + ...coreServices.application.capabilities, + dashboard: { + showWriteControls: false, + }, + }; const { result } = renderHook(() => useDashboardListingTable({ getDashboardUrl, @@ -245,7 +251,8 @@ describe('useDashboardListingTable', () => { }); test('deleteItems should be undefined when showWriteControls equals false', () => { - getPluginServices.dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; + const { result } = renderHook(() => useDashboardListingTable({ getDashboardUrl, @@ -257,7 +264,8 @@ describe('useDashboardListingTable', () => { }); test('editItem should be undefined when showWriteControls equals false', () => { - getPluginServices.dashboardCapabilities.showWriteControls = false; + (coreServices.application.capabilities as any).dashboard.showWriteControls = false; + const { result } = renderHook(() => useDashboardListingTable({ getDashboardUrl, 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 index 81986a7c37a2..31bfa88120a5 100644 --- 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 @@ -7,29 +7,34 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useCallback, useState, useMemo } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; -import type { SavedObjectsFindOptionsReference } from '@kbn/core/public'; import { OpenContentEditorParams } from '@kbn/content-management-content-editor'; +import { ContentInsightsClient } from '@kbn/content-management-content-insights-public'; import { TableListViewTableProps } from '@kbn/content-management-table-list-view-table'; +import type { SavedObjectsFindOptionsReference } from '@kbn/core/public'; +import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { DashboardContainerInput } from '../../../common'; +import { DashboardItem } from '../../../common/content_management'; import { DASHBOARD_CONTENT_ID, SAVED_OBJECT_DELETE_TIME, SAVED_OBJECT_LOADED_TIME, } from '../../dashboard_constants'; +import { getDashboardBackupService } from '../../services/dashboard_backup_service'; +import { getDashboardContentManagementService } from '../../services/dashboard_content_management_service'; +import { getDashboardRecentlyAccessedService } from '../../services/dashboard_recently_accessed_service'; +import { coreServices } from '../../services/kibana_services'; +import { getDashboardCapabilities } from '../../utils/get_dashboard_capabilities'; import { dashboardListingErrorStrings, dashboardListingTableStrings, } from '../_dashboard_listing_strings'; -import { DashboardContainerInput } from '../../../common'; -import { DashboardSavedObjectUserContent } from '../types'; import { confirmCreateWithUnsaved } from '../confirm_overlays'; -import { pluginServices } from '../../services/plugin_services'; -import { DashboardItem } from '../../../common/content_management'; import { DashboardListingEmptyPrompt } from '../dashboard_listing_empty_prompt'; +import { DashboardSavedObjectUserContent } from '../types'; type GetDetailViewLink = TableListViewTableProps['getDetailViewLink']; @@ -67,6 +72,7 @@ interface UseDashboardListingTableReturnType { refreshUnsavedDashboards: () => void; tableListViewTableProps: DashboardListingViewTableProps; unsavedDashboardIds: string[]; + contentInsightsClient: ContentInsightsClient; } export const useDashboardListingTable = ({ @@ -90,51 +96,44 @@ export const useDashboardListingTable = ({ useSessionStorageIntegration?: boolean; showCreateDashboardButton?: boolean; }): UseDashboardListingTableReturnType => { - const { - dashboardBackup, - dashboardCapabilities: { showWriteControls }, - settings: { uiSettings }, - dashboardContentManagement: { - findDashboards, - deleteDashboards, - updateDashboardMeta, - checkForDuplicateDashboardTitle, - }, - notifications: { toasts }, - dashboardRecentlyAccessed, - } = 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 dashboardBackupService = useMemo(() => getDashboardBackupService(), []); + const dashboardContentManagementService = useMemo( + () => getDashboardContentManagementService(), + [] + ); + const [unsavedDashboardIds, setUnsavedDashboardIds] = useState( - dashboardBackup.getDashboardIdsWithUnsavedChanges() + dashboardBackupService.getDashboardIdsWithUnsavedChanges() ); - const listingLimit = uiSettings.get(SAVED_OBJECTS_LIMIT_SETTING); - const initialPageSize = uiSettings.get(SAVED_OBJECTS_PER_PAGE_SETTING); + const listingLimit = coreServices.uiSettings.get(SAVED_OBJECTS_LIMIT_SETTING); + const initialPageSize = coreServices.uiSettings.get(SAVED_OBJECTS_PER_PAGE_SETTING); const createItem = useCallback(() => { - if (useSessionStorageIntegration && dashboardBackup.dashboardHasUnsavedEdits()) { + if (useSessionStorageIntegration && dashboardBackupService.dashboardHasUnsavedEdits()) { confirmCreateWithUnsaved(() => { - dashboardBackup.clearState(); + dashboardBackupService.clearState(); goToDashboard(); }, goToDashboard); return; } goToDashboard(); - }, [dashboardBackup, goToDashboard, useSessionStorageIntegration]); + }, [dashboardBackupService, goToDashboard, useSessionStorageIntegration]); const updateItemMeta = useCallback( async (props: Pick) => { - await updateDashboardMeta(props); + await dashboardContentManagementService.updateDashboardMeta(props); - setUnsavedDashboardIds(dashboardBackup.getDashboardIdsWithUnsavedChanges()); + setUnsavedDashboardIds(dashboardBackupService.getDashboardIdsWithUnsavedChanges()); }, - [dashboardBackup, updateDashboardMeta] + [dashboardBackupService, dashboardContentManagementService] ); const contentEditorValidators: OpenContentEditorParams['customValidators'] = useMemo( @@ -145,17 +144,19 @@ export const useDashboardListingTable = ({ fn: async (value: string, id: string) => { if (id) { try { - const [dashboard] = await findDashboards.findByIds([id]); + const [dashboard] = + await dashboardContentManagementService.findDashboards.findByIds([id]); if (dashboard.status === 'error') { return; } - const validTitle = await checkForDuplicateDashboardTitle({ - title: value, - copyOnSave: false, - lastSavedTitle: dashboard.attributes.title, - isTitleDuplicateConfirmed: false, - }); + const validTitle = + await dashboardContentManagementService.checkForDuplicateDashboardTitle({ + title: value, + copyOnSave: false, + lastSavedTitle: dashboard.attributes.title, + isTitleDuplicateConfirmed: false, + }); if (!validTitle) { throw new Error(dashboardListingErrorStrings.getDuplicateTitleWarning(value)); @@ -168,7 +169,7 @@ export const useDashboardListingTable = ({ }, ], }), - [checkForDuplicateDashboardTitle, findDashboards] + [dashboardContentManagementService] ); const emptyPrompt = useMemo( @@ -204,7 +205,7 @@ export const useDashboardListingTable = ({ ) => { const searchStartTime = window.performance.now(); - return findDashboards + return dashboardContentManagementService.findDashboards .search({ search: searchTerm, size: listingLimit, @@ -214,7 +215,7 @@ export const useDashboardListingTable = ({ .then(({ total, hits }) => { const searchEndTime = window.performance.now(); const searchDuration = searchEndTime - searchStartTime; - reportPerformanceMetricEvent(pluginServices.getServices().analytics, { + reportPerformanceMetricEvent(coreServices.analytics, { eventName: SAVED_OBJECT_LOADED_TIME, duration: searchDuration, meta: { @@ -227,7 +228,7 @@ export const useDashboardListingTable = ({ }; }); }, - [findDashboards, listingLimit] + [listingLimit, dashboardContentManagementService] ); const deleteItems = useCallback( @@ -235,15 +236,15 @@ export const useDashboardListingTable = ({ try { const deleteStartTime = window.performance.now(); - await deleteDashboards( + await dashboardContentManagementService.deleteDashboards( dashboardsToDelete.map(({ id }) => { - dashboardBackup.clearState(id); + dashboardBackupService.clearState(id); return id; }) ); const deleteDuration = window.performance.now() - deleteStartTime; - reportPerformanceMetricEvent(pluginServices.getServices().analytics, { + reportPerformanceMetricEvent(coreServices.analytics, { eventName: SAVED_OBJECT_DELETE_TIME, duration: deleteDuration, meta: { @@ -252,14 +253,14 @@ export const useDashboardListingTable = ({ }, }); } catch (error) { - toasts.addError(error, { + coreServices.notifications.toasts.addError(error, { title: dashboardListingErrorStrings.getErrorDeletingDashboardToast(), }); } - setUnsavedDashboardIds(dashboardBackup.getDashboardIdsWithUnsavedChanges()); + setUnsavedDashboardIds(dashboardBackupService.getDashboardIdsWithUnsavedChanges()); }, - [dashboardBackup, deleteDashboards, toasts] + [dashboardBackupService, dashboardContentManagementService] ); const editItem = useCallback( @@ -278,8 +279,9 @@ export const useDashboardListingTable = ({ [getDashboardUrl] ); - const tableListViewTableProps: DashboardListingViewTableProps = useMemo( - () => ({ + const tableListViewTableProps: DashboardListingViewTableProps = useMemo(() => { + const { showWriteControls } = getDashboardCapabilities(); + return { contentEditor: { isReadonly: !showWriteControls, onSave: updateItemMeta, @@ -303,36 +305,38 @@ export const useDashboardListingTable = ({ title, urlStateEnabled, createdByEnabled: true, - recentlyAccessed: dashboardRecentlyAccessed, - }), - [ - contentEditorValidators, - createItem, - dashboardListingId, - deleteItems, - editItem, - emptyPrompt, - entityName, - entityNamePlural, - findItems, - getDetailViewLink, - headingId, - initialFilter, - initialPageSize, - listingLimit, - onFetchSuccess, - showCreateDashboardButton, - showWriteControls, - title, - updateItemMeta, - urlStateEnabled, - dashboardRecentlyAccessed, - ] - ); + recentlyAccessed: getDashboardRecentlyAccessedService(), + }; + }, [ + contentEditorValidators, + createItem, + dashboardListingId, + deleteItems, + editItem, + emptyPrompt, + entityName, + entityNamePlural, + findItems, + getDetailViewLink, + headingId, + initialFilter, + initialPageSize, + listingLimit, + onFetchSuccess, + showCreateDashboardButton, + title, + updateItemMeta, + urlStateEnabled, + ]); const refreshUnsavedDashboards = useCallback( - () => setUnsavedDashboardIds(dashboardBackup.getDashboardIdsWithUnsavedChanges()), - [dashboardBackup] + () => setUnsavedDashboardIds(getDashboardBackupService().getDashboardIdsWithUnsavedChanges()), + [] + ); + + const contentInsightsClient = useMemo( + () => new ContentInsightsClient({ http: coreServices.http }, { domainId: 'dashboard' }), + [] ); return { @@ -341,5 +345,6 @@ export const useDashboardListingTable = ({ refreshUnsavedDashboards, tableListViewTableProps, unsavedDashboardIds, + contentInsightsClient, }; }; diff --git a/src/plugins/dashboard/public/dashboard_listing/types.ts b/src/plugins/dashboard/public/dashboard_listing/types.ts index c5788868b553..0f5e24536624 100644 --- a/src/plugins/dashboard/public/dashboard_listing/types.ts +++ b/src/plugins/dashboard/public/dashboard_listing/types.ts @@ -10,7 +10,6 @@ import type { PropsWithChildren } from 'react'; import type { UserContentCommonSchema } from '@kbn/content-management-table-list-view-common'; import type { ViewMode } from '@kbn/embeddable-plugin/public'; -import type { DashboardApplicationService } from '../services/application/types'; export type DashboardListingProps = PropsWithChildren<{ disableCreateDashboardButton?: boolean; @@ -22,12 +21,6 @@ export type DashboardListingProps = PropsWithChildren<{ showCreateDashboardButton?: 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 { managed?: boolean; attributes: { diff --git a/src/plugins/dashboard/public/dashboard_top_nav/index.tsx b/src/plugins/dashboard/public/dashboard_top_nav/index.tsx index c8c02abae950..18c0b69cd9b5 100644 --- a/src/plugins/dashboard/public/dashboard_top_nav/index.tsx +++ b/src/plugins/dashboard/public/dashboard_top_nav/index.tsx @@ -8,13 +8,13 @@ */ import React, { Suspense } from 'react'; -import { servicesReady } from '../plugin'; import { DashboardTopNavProps } from './dashboard_top_nav_with_context'; +import { untilPluginStartServicesReady } from '../services/kibana_services'; const LazyDashboardTopNav = React.lazy(() => (async () => { const modulePromise = import('./dashboard_top_nav_with_context'); - const [module] = await Promise.all([modulePromise, servicesReady]); + const [module] = await Promise.all([modulePromise, untilPluginStartServicesReady()]); return { default: module.DashboardTopNavWithContext, diff --git a/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.test.tsx b/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.test.tsx index 4114b7ab06d0..8cf7f36918dd 100644 --- a/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.test.tsx +++ b/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.test.tsx @@ -12,10 +12,10 @@ import { render } from '@testing-library/react'; import { buildMockDashboard } from '../mocks'; import { InternalDashboardTopNav } from './internal_dashboard_top_nav'; import { setMockedPresentationUtilServices } from '@kbn/presentation-util-plugin/public/mocks'; -import { pluginServices } from '../services/plugin_services'; import { TopNavMenuProps } from '@kbn/navigation-plugin/public'; import { DashboardContext } from '../dashboard_api/use_dashboard_api'; import { DashboardApi } from '../dashboard_api/types'; +import { dataService, navigationService } from '../services/kibana_services'; describe('Internal dashboard top nav', () => { const mockTopNav = (badges: TopNavMenuProps['badges'] | undefined[]) => { @@ -32,13 +32,10 @@ describe('Internal dashboard top nav', () => { beforeEach(() => { setMockedPresentationUtilServices(); - pluginServices.getServices().data.query.filterManager.getFilters = jest - .fn() - .mockReturnValue([]); + dataService.query.filterManager.getFilters = jest.fn().mockReturnValue([]); // topNavMenu is mocked as a jest.fn() so we want to mock it with a component // @ts-ignore type issue with the mockTopNav for this test suite - pluginServices.getServices().navigation.TopNavMenu = ({ badges }: TopNavMenuProps) => - mockTopNav(badges); + navigationService.ui.TopNavMenu = ({ badges }: TopNavMenuProps) => mockTopNav(badges); }); it('should not render the managed badge by default', async () => { diff --git a/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx b/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx index 02cbaa7d9010..bcfcf2e98ddd 100644 --- a/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx +++ b/src/plugins/dashboard/public/dashboard_top_nav/internal_dashboard_top_nav.tsx @@ -7,48 +7,57 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import UseUnmount from 'react-use/lib/useUnmount'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import UseUnmount from 'react-use/lib/useUnmount'; import { - withSuspense, - LazyLabsFlyout, - getContextProvider as getPresentationUtilContextProvider, -} from '@kbn/presentation-util-plugin/public'; -import { TopNavMenuBadgeProps, TopNavMenuProps } from '@kbn/navigation-plugin/public'; -import { + EuiBadge, EuiBreadcrumb, EuiHorizontalRule, EuiIcon, - EuiToolTipProps, - EuiPopover, - EuiBadge, EuiLink, + EuiPopover, + EuiToolTipProps, } from '@elastic/eui'; import { MountPoint } from '@kbn/core/public'; -import { getManagedContentBadge } from '@kbn/managed-content-badge'; +import { Query } from '@kbn/es-query'; import { FormattedMessage } from '@kbn/i18n-react'; +import { getManagedContentBadge } from '@kbn/managed-content-badge'; +import { TopNavMenuBadgeProps, TopNavMenuProps } from '@kbn/navigation-plugin/public'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import { Query } from '@kbn/es-query'; import { + LazyLabsFlyout, + getContextProvider as getPresentationUtilContextProvider, + withSuspense, +} from '@kbn/presentation-util-plugin/public'; + +import { UI_SETTINGS } from '../../common'; +import { useDashboardApi } from '../dashboard_api/use_dashboard_api'; +import { + dashboardManagedBadge, + getDashboardBreadcrumb, getDashboardTitle, leaveConfirmStrings, - getDashboardBreadcrumb, unsavedChangesBadgeStrings, - dashboardManagedBadge, } from '../dashboard_app/_dashboard_app_strings'; -import { UI_SETTINGS } from '../../common'; -import { pluginServices } from '../services/plugin_services'; +import { useDashboardMountContext } from '../dashboard_app/hooks/dashboard_mount_context'; +import { DashboardEditingToolbar } from '../dashboard_app/top_nav/dashboard_editing_toolbar'; import { useDashboardMenuItems } from '../dashboard_app/top_nav/use_dashboard_menu_items'; import { DashboardEmbedSettings } from '../dashboard_app/types'; -import { DashboardEditingToolbar } from '../dashboard_app/top_nav/dashboard_editing_toolbar'; -import { useDashboardMountContext } from '../dashboard_app/hooks/dashboard_mount_context'; -import { getFullEditPath, LEGACY_DASHBOARD_APP_ID } from '../dashboard_constants'; -import './_dashboard_top_nav.scss'; -import { DashboardRedirect } from '../dashboard_container/types'; -import { SaveDashboardReturn } from '../services/dashboard_content_management/types'; -import { useDashboardApi } from '../dashboard_api/use_dashboard_api'; +import { LEGACY_DASHBOARD_APP_ID, getFullEditPath } from '../dashboard_constants'; import { openSettingsFlyout } from '../dashboard_container/embeddable/api'; +import { DashboardRedirect } from '../dashboard_container/types'; +import { SaveDashboardReturn } from '../services/dashboard_content_management_service/types'; +import { getDashboardRecentlyAccessedService } from '../services/dashboard_recently_accessed_service'; +import { + coreServices, + dataService, + embeddableService, + navigationService, + serverlessService, +} from '../services/kibana_services'; +import { getDashboardCapabilities } from '../utils/get_dashboard_capabilities'; +import './_dashboard_top_nav.scss'; export interface InternalDashboardTopNavProps { customLeadingBreadCrumbs?: EuiBreadcrumb[]; @@ -75,28 +84,7 @@ export function InternalDashboardTopNav({ const [isLabsShown, setIsLabsShown] = useState(false); const dashboardTitleRef = useRef(null); - /** - * Unpack dashboard services - */ - const { - data: { - query: { filterManager }, - }, - chrome: { - setBreadcrumbs, - setIsVisible: setChromeVisibility, - getIsVisible$: getChromeIsVisible$, - recentlyAccessed: chromeRecentlyAccessed, - }, - serverless, - settings: { uiSettings }, - navigation: { TopNavMenu }, - embeddable: { getStateTransfer }, - initializerContext: { allowByValueEmbeddables }, - dashboardCapabilities: { saveQuery: allowSaveQuery, showWriteControls }, - dashboardRecentlyAccessed, - } = pluginServices.getServices(); - const isLabsEnabled = uiSettings.get(UI_SETTINGS.ENABLE_LABS_UI); + const isLabsEnabled = useMemo(() => coreServices.uiSettings.get(UI_SETTINGS.ENABLE_LABS_UI), []); const { setHeaderActionMenu, onAppLeave } = useDashboardMountContext(); const dashboardApi = useDashboardApi(); @@ -144,36 +132,24 @@ export function InternalDashboardTopNav({ * Manage chrome visibility when dashboard is embedded. */ useEffect(() => { - if (!embedSettings) setChromeVisibility(viewMode !== 'print'); - }, [embedSettings, setChromeVisibility, viewMode]); + if (!embedSettings) coreServices.chrome.setIsVisible(viewMode !== 'print'); + }, [embedSettings, viewMode]); /** * populate recently accessed, and set is chrome visible. */ useEffect(() => { - const subscription = getChromeIsVisible$().subscribe((visible) => setIsChromeVisible(visible)); + const subscription = coreServices.chrome + .getIsVisible$() + .subscribe((visible) => setIsChromeVisible(visible)); + if (lastSavedId && title) { - chromeRecentlyAccessed.add( - getFullEditPath(lastSavedId, viewMode === 'edit'), - title, - lastSavedId - ); - dashboardRecentlyAccessed.add( - getFullEditPath(lastSavedId, viewMode === 'edit'), - title, - lastSavedId - ); + const fullEditPath = getFullEditPath(lastSavedId, viewMode === 'edit'); + coreServices.chrome.recentlyAccessed.add(fullEditPath, title, lastSavedId); + getDashboardRecentlyAccessedService().add(fullEditPath, title, lastSavedId); // used to sort the listing table } return () => subscription.unsubscribe(); - }, [ - allowByValueEmbeddables, - chromeRecentlyAccessed, - getChromeIsVisible$, - lastSavedId, - viewMode, - title, - dashboardRecentlyAccessed, - ]); + }, [lastSavedId, viewMode, title]); /** * Set breadcrumbs to dashboard title when dashboard's title or view mode changes @@ -198,17 +174,17 @@ export function InternalDashboardTopNav({ }, ]; - if (serverless?.setBreadcrumbs) { + if (serverlessService) { // set serverless breadcrumbs if available, // set only the dashboardTitleBreadcrumbs because the main breadcrumbs automatically come as part of the navigation config - serverless.setBreadcrumbs(dashboardTitleBreadcrumbs); + serverlessService.setBreadcrumbs(dashboardTitleBreadcrumbs); } else { /** * non-serverless regular breadcrumbs * Dashboard embedded in other plugins (e.g. SecuritySolution) * will have custom leading breadcrumbs for back to their app. **/ - setBreadcrumbs( + coreServices.chrome.setBreadcrumbs( customLeadingBreadCrumbs.concat([ { text: getDashboardBreadcrumb(), @@ -221,22 +197,18 @@ export function InternalDashboardTopNav({ ]) ); } - }, [ - setBreadcrumbs, - redirectTo, - dashboardTitle, - dashboardApi, - viewMode, - serverless, - customLeadingBreadCrumbs, - ]); + }, [redirectTo, dashboardTitle, dashboardApi, viewMode, customLeadingBreadCrumbs]); /** * Build app leave handler whenever hasUnsavedChanges changes */ useEffect(() => { onAppLeave((actions) => { - if (viewMode === 'edit' && hasUnsavedChanges && !getStateTransfer().isTransferInProgress) { + if ( + viewMode === 'edit' && + hasUnsavedChanges && + !embeddableService.getStateTransfer().isTransferInProgress + ) { return actions.confirm( leaveConfirmStrings.getLeaveSubtitle(), leaveConfirmStrings.getLeaveTitle() @@ -248,13 +220,13 @@ export function InternalDashboardTopNav({ // reset on app leave handler so leaving from the listing page doesn't trigger a confirmation onAppLeave((actions) => actions.default()); }; - }, [onAppLeave, getStateTransfer, hasUnsavedChanges, viewMode]); + }, [onAppLeave, hasUnsavedChanges, viewMode]); const visibilityProps = useMemo(() => { const shouldShowNavBarComponent = (forceShow: boolean): boolean => (forceShow || isChromeVisible) && !fullScreenMode; const shouldShowFilterBar = (forceHide: boolean): boolean => - !forceHide && (filterManager.getFilters().length > 0 || !fullScreenMode); + !forceHide && (dataService.query.filterManager.getFilters().length > 0 || !fullScreenMode); const showTopNavMenu = shouldShowNavBarComponent(Boolean(embedSettings?.forceShowTopNavMenu)); const showQueryInput = Boolean(forceHideUnifiedSearch) @@ -275,14 +247,7 @@ export function InternalDashboardTopNav({ showQueryInput, showDatePicker, }; - }, [ - embedSettings, - filterManager, - forceHideUnifiedSearch, - fullScreenMode, - isChromeVisible, - viewMode, - ]); + }, [embedSettings, forceHideUnifiedSearch, fullScreenMode, isChromeVisible, viewMode]); const maybeRedirect = useCallback( (result?: SaveDashboardReturn) => { @@ -338,6 +303,8 @@ export function InternalDashboardTopNav({ } as EuiToolTipProps, }); } + + const { showWriteControls } = getDashboardCapabilities(); if (showWriteControls && managed) { const badgeProps = { ...getManagedContentBadge(dashboardManagedBadge.getBadgeAriaLabel()), @@ -390,7 +357,6 @@ export function InternalDashboardTopNav({ hasUnsavedChanges, viewMode, hasRunMigrations, - showWriteControls, managed, isPopoverOpen, dashboardApi, @@ -405,7 +371,7 @@ export function InternalDashboardTopNav({ ref={dashboardTitleRef} tabIndex={-1} >{`${getDashboardBreadcrumb()} - ${dashboardTitle}`} - { - return pluginServices.getServices(); -}; export type Start = jest.Mocked; diff --git a/src/plugins/dashboard/public/plugin.tsx b/src/plugins/dashboard/public/plugin.tsx index 33f9115fa676..c46dcbc3e413 100644 --- a/src/plugins/dashboard/public/plugin.tsx +++ b/src/plugins/dashboard/public/plugin.tsx @@ -7,75 +7,78 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { i18n } from '@kbn/i18n'; -import { BehaviorSubject } from 'rxjs'; -import { filter, map } from 'rxjs'; +import { BehaviorSubject, filter, map } from 'rxjs'; +import type { + ContentManagementPublicSetup, + ContentManagementPublicStart, +} from '@kbn/content-management-plugin/public'; +import { CustomBrandingStart } from '@kbn/core-custom-branding-browser'; import { + APP_WRAPPER_CLASS, App, - Plugin, + AppMountParameters, AppUpdater, + DEFAULT_APP_CATEGORIES, + Plugin, + PluginInitializerContext, ScopedHistory, type CoreSetup, type CoreStart, - AppMountParameters, - DEFAULT_APP_CATEGORIES, - PluginInitializerContext, } from '@kbn/core/public'; -import type { - ScreenshotModePluginSetup, - ScreenshotModePluginStart, -} from '@kbn/screenshot-mode-plugin/public'; -import type { - UsageCollectionSetup, - UsageCollectionStart, -} from '@kbn/usage-collection-plugin/public'; -import { APP_WRAPPER_CLASS } from '@kbn/core/public'; -import { type UiActionsSetup, type UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; +import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; +import type { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; +import { FieldFormatsStart } from '@kbn/field-formats-plugin/public/plugin'; import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; +import { i18n } from '@kbn/i18n'; +import type { Start as InspectorStartContract } from '@kbn/inspector-plugin/public'; import { replaceUrlHashQuery } from '@kbn/kibana-utils-plugin/common'; import { createKbnUrlTracker } from '@kbn/kibana-utils-plugin/public'; -import type { VisualizationsStart } from '@kbn/visualizations-plugin/public'; -import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; -import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; -import type { Start as InspectorStartContract } from '@kbn/inspector-plugin/public'; -import type { EmbeddableSetup, EmbeddableStart } from '@kbn/embeddable-plugin/public'; -import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; -import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; -import type { - ContentManagementPublicSetup, - ContentManagementPublicStart, -} from '@kbn/content-management-plugin/public'; -import type { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { UrlForwardingSetup, UrlForwardingStart } from '@kbn/url-forwarding-plugin/public'; -import type { SavedObjectTaggingOssPluginStart } from '@kbn/saved-objects-tagging-oss-plugin/public'; -import type { ServerlessPluginStart } from '@kbn/serverless/public'; import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; import type { ObservabilityAIAssistantPublicSetup, ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; +import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; +import type { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; +import type { SavedObjectTaggingOssPluginStart } from '@kbn/saved-objects-tagging-oss-plugin/public'; +import type { + ScreenshotModePluginSetup, + ScreenshotModePluginStart, +} from '@kbn/screenshot-mode-plugin/public'; +import type { ServerlessPluginStart } from '@kbn/serverless/public'; +import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; +import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; +import { type UiActionsSetup, type UiActionsStart } from '@kbn/ui-actions-plugin/public'; +import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; +import type { UrlForwardingSetup, UrlForwardingStart } from '@kbn/url-forwarding-plugin/public'; +import type { + UsageCollectionSetup, + UsageCollectionStart, +} from '@kbn/usage-collection-plugin/public'; +import type { VisualizationsStart } from '@kbn/visualizations-plugin/public'; -import { CustomBrandingStart } from '@kbn/core-custom-branding-browser'; -import { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; -import { DashboardContainerFactoryDefinition } from './dashboard_container/embeddable/dashboard_container_factory'; -import { registerDashboardPanelPlacementSetting } from './dashboard_container/panel_placement'; +import { CONTENT_ID, LATEST_VERSION } from '../common/content_management'; import { - type DashboardAppLocator, DashboardAppLocatorDefinition, + type DashboardAppLocator, } from './dashboard_app/locator/locator'; +import { DashboardMountContextProps } from './dashboard_app/types'; import { DASHBOARD_APP_ID, LANDING_PAGE_PATH, LEGACY_DASHBOARD_APP_ID, SEARCH_SESSION_ID, } from './dashboard_constants'; -import { DashboardMountContextProps } from './dashboard_app/types'; -import type { FindDashboardsService } from './services/dashboard_content_management/types'; -import { CONTENT_ID, LATEST_VERSION } from '../common/content_management'; -import { GetPanelPlacementSettings } from './dashboard_container/panel_placement'; +import { DashboardContainerFactoryDefinition } from './dashboard_container/embeddable/dashboard_container_factory'; +import { + GetPanelPlacementSettings, + registerDashboardPanelPlacementSetting, +} from './dashboard_container/panel_placement'; +import type { FindDashboardsService } from './services/dashboard_content_management_service/types'; +import { setKibanaServices, untilPluginStartServicesReady } from './services/kibana_services'; export interface DashboardFeatureFlagConfig { allowByValueEmbeddables: boolean; @@ -99,6 +102,7 @@ export interface DashboardStartDependencies { data: DataPublicPluginStart; dataViewEditor: DataViewEditorStart; embeddable: EmbeddableStart; + fieldFormats: FieldFormatsStart; inspector: InspectorStartContract; navigation: NavigationPublicPluginStart; presentationUtil: PresentationUtilPluginStart; @@ -148,27 +152,9 @@ export class DashboardPlugin private dashboardFeatureFlagConfig?: DashboardFeatureFlagConfig; private locator?: DashboardAppLocator; - private async startDashboardKibanaServices( - coreStart: CoreStart, - startPlugins: DashboardStartDependencies, - initContext: PluginInitializerContext - ) { - const { registry, pluginServices } = await import('./services/plugin_services'); - pluginServices.setRegistry(registry.start({ coreStart, startPlugins, initContext })); - resolveServicesReady(); - } - public setup( core: CoreSetup, - { - share, - embeddable, - home, - urlForwarding, - data, - contentManagement, - uiActions, - }: DashboardSetupDependencies + { share, embeddable, home, urlForwarding, data, contentManagement }: DashboardSetupDependencies ): DashboardSetup { this.dashboardFeatureFlagConfig = this.initializerContext.config.get(); @@ -183,11 +169,14 @@ export class DashboardPlugin new DashboardAppLocatorDefinition({ useHashedUrl: core.uiSettings.get('state:storeInSessionStorage'), getDashboardFilterFields: async (dashboardId: string) => { - const { pluginServices } = await import('./services/plugin_services'); - const { - dashboardContentManagement: { loadDashboardState }, - } = pluginServices.getServices(); - return (await loadDashboardState({ id: dashboardId })).dashboardInput?.filters ?? []; + const [{ getDashboardContentManagementService }] = await Promise.all([ + import('./services/dashboard_content_management_service'), + untilPluginStartServicesReady(), + ]); + return ( + (await getDashboardContentManagementService().loadDashboardState({ id: dashboardId })) + .dashboardInput?.filters ?? [] + ); }, }) ); @@ -262,6 +251,7 @@ export class DashboardPlugin mount: async (params: AppMountParameters) => { this.currentHistory = params.history; params.element.classList.add(APP_WRAPPER_CLASS); + await untilPluginStartServicesReady(); const { mountApp } = await import('./dashboard_app/dashboard_router'); appMounted(); @@ -340,25 +330,26 @@ export class DashboardPlugin } public start(core: CoreStart, plugins: DashboardStartDependencies): DashboardStart { - this.startDashboardKibanaServices(core, plugins, this.initializerContext).then(async () => { - const { buildAllDashboardActions } = await import('./dashboard_actions'); - buildAllDashboardActions({ - core, - plugins, - allowByValueEmbeddables: this.dashboardFeatureFlagConfig?.allowByValueEmbeddables, - }); - }); + setKibanaServices(core, plugins); + + Promise.all([import('./dashboard_actions'), untilPluginStartServicesReady()]).then( + ([{ buildAllDashboardActions }]) => { + buildAllDashboardActions({ + plugins, + allowByValueEmbeddables: this.dashboardFeatureFlagConfig?.allowByValueEmbeddables, + }); + } + ); return { locator: this.locator, dashboardFeatureFlagConfig: this.dashboardFeatureFlagConfig!, registerDashboardPanelPlacementSetting, findDashboardsService: async () => { - const { pluginServices } = await import('./services/plugin_services'); - const { - dashboardContentManagement: { findDashboards }, - } = pluginServices.getServices(); - return findDashboards; + const { getDashboardContentManagementService } = await import( + './services/dashboard_content_management_service' + ); + return getDashboardContentManagementService().findDashboards; }, }; } diff --git a/src/plugins/dashboard/public/services/analytics/analytics.stub.ts b/src/plugins/dashboard/public/services/analytics/analytics.stub.ts deleted file mode 100644 index a5baa963a276..000000000000 --- a/src/plugins/dashboard/public/services/analytics/analytics.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardAnalyticsService } from './types'; - -type AnalyticsServiceFactory = PluginServiceFactory; - -export const analyticsServiceFactory: AnalyticsServiceFactory = () => { - const pluginMock = analyticsServiceMock.createAnalyticsServiceStart(); - - return { - reportEvent: pluginMock.reportEvent, - }; -}; diff --git a/src/plugins/dashboard/public/services/analytics/analytics_service.ts b/src/plugins/dashboard/public/services/analytics/analytics_service.ts deleted file mode 100644 index f027963d30cd..000000000000 --- a/src/plugins/dashboard/public/services/analytics/analytics_service.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardAnalyticsService } from './types'; - -export type AnalyticsServiceFactory = KibanaPluginServiceFactory< - DashboardAnalyticsService, - DashboardStartDependencies ->; - -export const analyticsServiceFactory: AnalyticsServiceFactory = ({ coreStart }) => { - const { - analytics: { reportEvent }, - } = coreStart; - - return { - reportEvent, - }; -}; diff --git a/src/plugins/dashboard/public/services/analytics/types.ts b/src/plugins/dashboard/public/services/analytics/types.ts deleted file mode 100644 index fb0423229709..000000000000 --- a/src/plugins/dashboard/public/services/analytics/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardAnalyticsService { - reportEvent: CoreStart['analytics']['reportEvent']; -} diff --git a/src/plugins/dashboard/public/services/application/application.stub.ts b/src/plugins/dashboard/public/services/application/application.stub.ts deleted file mode 100644 index 83565a9302a9..000000000000 --- a/src/plugins/dashboard/public/services/application/application.stub.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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { applicationServiceMock } from '@kbn/core-application-browser-mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardApplicationService } from './types'; - -type ApplicationServiceFactory = PluginServiceFactory; - -export const applicationServiceFactory: ApplicationServiceFactory = () => { - const pluginMock = applicationServiceMock.createStartContract(); - - return { - currentAppId$: pluginMock.currentAppId$, - navigateToApp: pluginMock.navigateToApp, - navigateToUrl: pluginMock.navigateToUrl, - getUrlForApp: pluginMock.getUrlForApp, - capabilities: { - advancedSettings: pluginMock.capabilities.advancedSettings, - maps: pluginMock.capabilities.maps, - navLinks: pluginMock.capabilities.navLinks, - visualize: pluginMock.capabilities.visualize, - }, - }; -}; diff --git a/src/plugins/dashboard/public/services/application/application_service.ts b/src/plugins/dashboard/public/services/application/application_service.ts deleted file mode 100644 index bf4af0719c2a..000000000000 --- a/src/plugins/dashboard/public/services/application/application_service.ts +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardApplicationService } from './types'; - -export type ApplicationServiceFactory = KibanaPluginServiceFactory< - DashboardApplicationService, - DashboardStartDependencies ->; - -export const applicationServiceFactory: ApplicationServiceFactory = ({ coreStart }) => { - const { - application: { - currentAppId$, - navigateToApp, - navigateToUrl, - getUrlForApp, - capabilities: { advancedSettings, maps, navLinks, visualize }, - }, - } = coreStart; - - return { - currentAppId$, - navigateToApp, - navigateToUrl, - getUrlForApp, - capabilities: { - advancedSettings, - maps, - navLinks, - visualize, - }, - }; -}; diff --git a/src/plugins/dashboard/public/services/application/types.ts b/src/plugins/dashboard/public/services/application/types.ts deleted file mode 100644 index 16041562257b..000000000000 --- a/src/plugins/dashboard/public/services/application/types.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardApplicationService { - currentAppId$: CoreStart['application']['currentAppId$']; - navigateToApp: CoreStart['application']['navigateToApp']; - navigateToUrl: CoreStart['application']['navigateToUrl']; - getUrlForApp: CoreStart['application']['getUrlForApp']; - capabilities: { - advancedSettings: CoreStart['application']['capabilities']['advancedSettings']; - maps: CoreStart['application']['capabilities']['maps']; // only used in `add_to_library_action` - navLinks: CoreStart['application']['capabilities']['navLinks']; - visualize: CoreStart['application']['capabilities']['visualize']; // only used in `add_to_library_action` - }; -} diff --git a/src/plugins/dashboard/public/services/chrome/chrome.stub.ts b/src/plugins/dashboard/public/services/chrome/chrome.stub.ts deleted file mode 100644 index 70a2635f3a8b..000000000000 --- a/src/plugins/dashboard/public/services/chrome/chrome.stub.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { coreMock, chromeServiceMock } from '@kbn/core/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardChromeService } from './types'; - -type ChromeServiceFactory = PluginServiceFactory; - -export const chromeServiceFactory: ChromeServiceFactory = () => { - const pluginMock = chromeServiceMock.createStartContract(); - - return { - docTitle: pluginMock.docTitle, - setBadge: pluginMock.setBadge, - getIsVisible$: pluginMock.getIsVisible$, - recentlyAccessed: pluginMock.recentlyAccessed, - setBreadcrumbs: pluginMock.setBreadcrumbs, - setHelpExtension: pluginMock.setHelpExtension, - setIsVisible: pluginMock.setIsVisible, - theme: coreMock.createStart().theme, - }; -}; diff --git a/src/plugins/dashboard/public/services/chrome/chrome_service.ts b/src/plugins/dashboard/public/services/chrome/chrome_service.ts deleted file mode 100644 index 43458bd71cd0..000000000000 --- a/src/plugins/dashboard/public/services/chrome/chrome_service.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardChromeService } from './types'; - -export type ChromeServiceFactory = KibanaPluginServiceFactory< - DashboardChromeService, - DashboardStartDependencies ->; - -export const chromeServiceFactory: ChromeServiceFactory = ({ coreStart }) => { - const { - chrome: { - docTitle, - setBadge, - getIsVisible$, - recentlyAccessed, - setBreadcrumbs, - setHelpExtension, - setIsVisible, - }, - theme, - } = coreStart; - - return { - docTitle, - setBadge, - getIsVisible$, - recentlyAccessed, - setBreadcrumbs, - setHelpExtension, - setIsVisible, - theme, - }; -}; diff --git a/src/plugins/dashboard/public/services/chrome/types.ts b/src/plugins/dashboard/public/services/chrome/types.ts deleted file mode 100644 index 983073aab75f..000000000000 --- a/src/plugins/dashboard/public/services/chrome/types.ts +++ /dev/null @@ -1,21 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardChromeService { - docTitle: CoreStart['chrome']['docTitle']; - setBadge: CoreStart['chrome']['setBadge']; - getIsVisible$: CoreStart['chrome']['getIsVisible$']; - recentlyAccessed: CoreStart['chrome']['recentlyAccessed']; - setBreadcrumbs: CoreStart['chrome']['setBreadcrumbs']; - setHelpExtension: CoreStart['chrome']['setHelpExtension']; - setIsVisible: CoreStart['chrome']['setIsVisible']; - theme: CoreStart['theme']; -} diff --git a/src/plugins/dashboard/public/services/content_management/content_management_service.stub.ts b/src/plugins/dashboard/public/services/content_management/content_management_service.stub.ts deleted file mode 100644 index 21bf785fb611..000000000000 --- a/src/plugins/dashboard/public/services/content_management/content_management_service.stub.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; -import { contentManagementMock } from '@kbn/content-management-plugin/public/mocks'; - -export type ContentManagementServiceFactory = PluginServiceFactory; - -export const contentManagementServiceFactory: ContentManagementServiceFactory = () => { - return contentManagementMock.createStartContract(); -}; diff --git a/src/plugins/dashboard/public/services/content_management/content_management_service.ts b/src/plugins/dashboard/public/services/content_management/content_management_service.ts deleted file mode 100644 index c5c94ef91a31..000000000000 --- a/src/plugins/dashboard/public/services/content_management/content_management_service.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; - -export type ContentManagementServiceFactory = KibanaPluginServiceFactory< - ContentManagementPublicStart, - DashboardStartDependencies ->; - -export const contentManagementServiceFactory: ContentManagementServiceFactory = ({ - startPlugins, -}) => { - const { contentManagement } = startPlugins; - - return contentManagement; -}; diff --git a/src/plugins/dashboard/public/services/core_context/core_context.stub.ts b/src/plugins/dashboard/public/services/core_context/core_context.stub.ts deleted file mode 100644 index 36d1f19b7cd3..000000000000 --- a/src/plugins/dashboard/public/services/core_context/core_context.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { coreMock } from '@kbn/core/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardCoreContextService } from './types'; - -type CoreContextServiceFactory = PluginServiceFactory; - -export const coreContextServiceFactory: CoreContextServiceFactory = () => { - const pluginMock = coreMock.createStart(); - return { - executionContext: pluginMock.executionContext, - i18nContext: pluginMock.i18n.Context, - }; -}; diff --git a/src/plugins/dashboard/public/services/core_context/core_context_service.ts b/src/plugins/dashboard/public/services/core_context/core_context_service.ts deleted file mode 100644 index 38b8834455ce..000000000000 --- a/src/plugins/dashboard/public/services/core_context/core_context_service.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardCoreContextService } from './types'; - -export type CoreContextServiceFactory = KibanaPluginServiceFactory< - DashboardCoreContextService, - DashboardStartDependencies ->; - -export const coreContextServiceFactory: CoreContextServiceFactory = ({ coreStart }) => { - const { - executionContext, - i18n: { Context }, - } = coreStart; - - return { - executionContext, - i18nContext: Context, - }; -}; diff --git a/src/plugins/dashboard/public/services/core_context/types.ts b/src/plugins/dashboard/public/services/core_context/types.ts deleted file mode 100644 index 23f3fc7b5a7c..000000000000 --- a/src/plugins/dashboard/public/services/core_context/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardCoreContextService { - executionContext: CoreStart['executionContext']; - i18nContext: CoreStart['i18n']['Context']; -} diff --git a/src/plugins/dashboard/public/services/custom_branding/custom_branding.stub.ts b/src/plugins/dashboard/public/services/custom_branding/custom_branding.stub.ts deleted file mode 100644 index 6bcb0ba4172b..000000000000 --- a/src/plugins/dashboard/public/services/custom_branding/custom_branding.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { coreMock } from '@kbn/core/public/mocks'; -import { DashboardCustomBrandingService } from './types'; - -type CustomBrandingServiceFactory = PluginServiceFactory; - -export const customBrandingServiceFactory: CustomBrandingServiceFactory = () => { - const pluginMock = coreMock.createStart(); - return { - hasCustomBranding$: pluginMock.customBranding.hasCustomBranding$, - customBranding$: pluginMock.customBranding.customBranding$, - }; -}; diff --git a/src/plugins/dashboard/public/services/custom_branding/custom_branding_service.ts b/src/plugins/dashboard/public/services/custom_branding/custom_branding_service.ts deleted file mode 100644 index bed7d1ac229f..000000000000 --- a/src/plugins/dashboard/public/services/custom_branding/custom_branding_service.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardCustomBrandingService } from './types'; - -export type CustomBrandingServiceFactory = KibanaPluginServiceFactory< - DashboardCustomBrandingService, - DashboardStartDependencies ->; - -export const customBrandingServiceFactory: CustomBrandingServiceFactory = ({ coreStart }) => { - const { customBranding } = coreStart; - return { - hasCustomBranding$: customBranding.hasCustomBranding$, - customBranding$: customBranding.customBranding$, - }; -}; diff --git a/src/plugins/dashboard/public/services/custom_branding/types.ts b/src/plugins/dashboard/public/services/custom_branding/types.ts deleted file mode 100644 index f2cd986b2db1..000000000000 --- a/src/plugins/dashboard/public/services/custom_branding/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CustomBrandingStart } from '@kbn/core-custom-branding-browser'; - -export interface DashboardCustomBrandingService { - hasCustomBranding$: CustomBrandingStart['hasCustomBranding$']; - customBranding$: CustomBrandingStart['customBranding$']; -} diff --git a/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup.stub.ts b/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup.stub.ts deleted file mode 100644 index 4c80fcff9e82..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup.stub.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardBackupServiceType } from './types'; - -type DashboardBackupServiceFactory = PluginServiceFactory; - -export const dashboardBackupServiceFactory: DashboardBackupServiceFactory = () => { - return { - clearState: jest.fn(), - getState: jest.fn().mockReturnValue(undefined), - setState: jest.fn(), - getViewMode: jest.fn(), - storeViewMode: jest.fn(), - getDashboardIdsWithUnsavedChanges: jest - .fn() - .mockReturnValue(['dashboardUnsavedOne', 'dashboardUnsavedTwo']), - dashboardHasUnsavedEdits: jest.fn(), - }; -}; diff --git a/src/plugins/dashboard/public/services/dashboard_backup/types.ts b/src/plugins/dashboard/public/services/dashboard_backup/types.ts deleted file mode 100644 index d7b7416d5810..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_backup/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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import { UnsavedPanelState } from '../../dashboard_container/types'; -import { SavedDashboardInput } from '../dashboard_content_management/types'; - -export interface DashboardBackupServiceType { - clearState: (id?: string) => void; - getState: (id: string | undefined) => - | { - dashboardState?: Partial; - panels?: UnsavedPanelState; - } - | undefined; - setState: ( - id: string | undefined, - dashboardState: Partial, - panels: UnsavedPanelState - ) => void; - getViewMode: () => ViewMode; - storeViewMode: (viewMode: ViewMode) => void; - getDashboardIdsWithUnsavedChanges: () => string[]; - dashboardHasUnsavedEdits: (id?: string) => boolean; -} diff --git a/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts b/src/plugins/dashboard/public/services/dashboard_backup_service.ts similarity index 78% rename from src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts rename to src/plugins/dashboard/public/services/dashboard_backup_service.ts index ea56cd8ed5d5..5ffff35ff3d7 100644 --- a/src/plugins/dashboard/public/services/dashboard_backup/dashboard_backup_service.ts +++ b/src/plugins/dashboard/public/services/dashboard_backup_service.ts @@ -7,21 +7,18 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { firstValueFrom } from 'rxjs'; import { isEqual } from 'lodash'; +import { firstValueFrom } from 'rxjs'; -import { set } from '@kbn/safer-lodash-set'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; +import { set } from '@kbn/safer-lodash-set'; -import { DashboardSpacesService } from '../spaces/types'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardBackupServiceType } from './types'; -import type { DashboardContainerInput } from '../../../common'; -import { DashboardNotificationsService } from '../notifications/types'; -import { backupServiceStrings } from '../../dashboard_container/_dashboard_container_strings'; -import { UnsavedPanelState } from '../../dashboard_container/types'; +import type { DashboardContainerInput } from '../../common'; +import { backupServiceStrings } from '../dashboard_container/_dashboard_container_strings'; +import { UnsavedPanelState } from '../dashboard_container/types'; +import { coreServices, spacesService } from './kibana_services'; +import { SavedDashboardInput } from './dashboard_content_management_service/types'; export const DASHBOARD_PANELS_UNSAVED_ID = 'unsavedDashboard'; export const PANELS_CONTROL_GROUP_KEY = 'controlGroup'; @@ -31,34 +28,39 @@ const DASHBOARD_VIEWMODE_LOCAL_KEY = 'dashboardViewMode'; // this key is named `panels` for BWC reasons, but actually contains the entire dashboard state const DASHBOARD_STATE_SESSION_KEY = 'dashboardStateManagerPanels'; -interface DashboardBackupRequiredServices { - notifications: DashboardNotificationsService; - spaces: DashboardSpacesService; +interface DashboardBackupServiceType { + clearState: (id?: string) => void; + getState: (id: string | undefined) => + | { + dashboardState?: Partial; + panels?: UnsavedPanelState; + } + | undefined; + setState: ( + id: string | undefined, + dashboardState: Partial, + panels: UnsavedPanelState + ) => void; + getViewMode: () => ViewMode; + storeViewMode: (viewMode: ViewMode) => void; + getDashboardIdsWithUnsavedChanges: () => string[]; + dashboardHasUnsavedEdits: (id?: string) => boolean; } -export type DashboardBackupServiceFactory = KibanaPluginServiceFactory< - DashboardBackupServiceType, - DashboardStartDependencies, - DashboardBackupRequiredServices ->; - class DashboardBackupService implements DashboardBackupServiceType { private activeSpaceId: string; private sessionStorage: Storage; private localStorage: Storage; - private notifications: DashboardNotificationsService; - private spaces: DashboardSpacesService; private oldDashboardsWithUnsavedChanges: string[] = []; - constructor(requiredServices: DashboardBackupRequiredServices) { - ({ notifications: this.notifications, spaces: this.spaces } = requiredServices); + constructor() { this.sessionStorage = new Storage(sessionStorage); this.localStorage = new Storage(localStorage); this.activeSpaceId = 'default'; - if (this.spaces.getActiveSpace$) { - firstValueFrom(this.spaces.getActiveSpace$()).then((space) => { + if (spacesService) { + firstValueFrom(spacesService.getActiveSpace$()).then((space) => { this.activeSpaceId = space.id; }); } @@ -72,7 +74,7 @@ class DashboardBackupService implements DashboardBackupServiceType { try { this.localStorage.set(DASHBOARD_VIEWMODE_LOCAL_KEY, viewMode); } catch (e) { - this.notifications.toasts.addDanger({ + coreServices.notifications.toasts.addDanger({ title: backupServiceStrings.viewModeStorageError(e.message), 'data-test-subj': 'dashboardViewmodeBackupFailure', }); @@ -99,7 +101,7 @@ class DashboardBackupService implements DashboardBackupServiceType { }); } } catch (e) { - this.notifications.toasts.addDanger({ + coreServices.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsClearError(e.message), 'data-test-subj': 'dashboardPanelsClearFailure', }); @@ -117,7 +119,7 @@ class DashboardBackupService implements DashboardBackupServiceType { return { dashboardState, panels }; } catch (e) { - this.notifications.toasts.addDanger({ + coreServices.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsGetError(e.message), 'data-test-subj': 'dashboardPanelsGetFailure', }); @@ -138,7 +140,7 @@ class DashboardBackupService implements DashboardBackupServiceType { set(panelsStorage, [this.activeSpaceId, id], unsavedPanels); this.sessionStorage.set(DASHBOARD_PANELS_SESSION_KEY, panelsStorage, true); } catch (e) { - this.notifications.toasts.addDanger({ + coreServices.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsSetError(e.message), 'data-test-subj': 'dashboardPanelsSetFailure', }); @@ -178,7 +180,7 @@ class DashboardBackupService implements DashboardBackupServiceType { return this.oldDashboardsWithUnsavedChanges; } catch (e) { - this.notifications.toasts.addDanger({ + coreServices.notifications.toasts.addDanger({ title: backupServiceStrings.getPanelsGetError(e.message), 'data-test-subj': 'dashboardPanelsGetFailure', }); @@ -191,9 +193,11 @@ class DashboardBackupService implements DashboardBackupServiceType { } } -export const dashboardBackupServiceFactory: DashboardBackupServiceFactory = ( - core, - requiredServices -) => { - return new DashboardBackupService(requiredServices); +let dashboardBackupService: DashboardBackupService; + +export const getDashboardBackupService = () => { + if (!dashboardBackupService) { + dashboardBackupService = new DashboardBackupService(); + } + return dashboardBackupService; }; diff --git a/src/plugins/dashboard/public/services/dashboard_capabilities/dashboard_capabilities.stub.ts b/src/plugins/dashboard/public/services/dashboard_capabilities/dashboard_capabilities.stub.ts deleted file mode 100644 index 118f649d7030..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_capabilities/dashboard_capabilities.stub.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardCapabilitiesService } from './types'; - -const defaultDashboardCapabilities: DashboardCapabilitiesService = { - show: true, - createNew: true, - saveQuery: true, - createShortUrl: true, - showWriteControls: true, - storeSearchSession: true, - mapsCapabilities: { save: true }, - visualizeCapabilities: { save: true }, -}; - -type DashboardCapabilitiesServiceFactory = PluginServiceFactory; - -export const dashboardCapabilitiesServiceFactory: DashboardCapabilitiesServiceFactory = () => { - return { - ...defaultDashboardCapabilities, - }; -}; diff --git a/src/plugins/dashboard/public/services/dashboard_capabilities/types.ts b/src/plugins/dashboard/public/services/dashboard_capabilities/types.ts deleted file mode 100644 index 4f78fa8ad38b..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_capabilities/types.ts +++ /dev/null @@ -1,19 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -export interface DashboardCapabilitiesService { - show: boolean; - saveQuery: boolean; - createNew: boolean; - mapsCapabilities: { save: boolean }; - createShortUrl: boolean; - showWriteControls: boolean; - visualizeCapabilities: { save: boolean }; - storeSearchSession: boolean; -} diff --git a/src/plugins/dashboard/public/services/dashboard_content_insights/dashboard_content_insights.stub.ts b/src/plugins/dashboard/public/services/dashboard_content_insights/dashboard_content_insights.stub.ts deleted file mode 100644 index 83ddf74df0a8..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_content_insights/dashboard_content_insights.stub.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardContentInsightsService } from './types'; - -type DashboardContentInsightsServiceFactory = PluginServiceFactory; - -export const dashboardContentInsightsServiceFactory: DashboardContentInsightsServiceFactory = - () => { - return { - trackDashboardView: jest.fn(), - contentInsightsClient: { - track: jest.fn(), - getStats: jest.fn(), - }, - }; - }; diff --git a/src/plugins/dashboard/public/services/dashboard_content_insights/dashboard_content_insights_service.ts b/src/plugins/dashboard/public/services/dashboard_content_insights/dashboard_content_insights_service.ts deleted file mode 100644 index 349d78bb2abb..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_content_insights/dashboard_content_insights_service.ts +++ /dev/null @@ -1,34 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { ContentInsightsClient } from '@kbn/content-management-content-insights-public'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardContentInsightsService } from './types'; - -export type DashboardContentInsightsServiceFactory = KibanaPluginServiceFactory< - DashboardContentInsightsService, - DashboardStartDependencies ->; - -export const dashboardContentInsightsServiceFactory: DashboardContentInsightsServiceFactory = ( - params -) => { - const contentInsightsClient = new ContentInsightsClient( - { http: params.coreStart.http }, - { domainId: 'dashboard' } - ); - - return { - trackDashboardView: (dashboardId: string) => { - contentInsightsClient.track(dashboardId, 'viewed'); - }, - contentInsightsClient, - }; -}; diff --git a/src/plugins/dashboard/public/services/dashboard_content_insights/types.ts b/src/plugins/dashboard/public/services/dashboard_content_insights/types.ts deleted file mode 100644 index 848f51b92027..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_content_insights/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { ContentInsightsClientPublic } from '@kbn/content-management-content-insights-public'; - -export interface DashboardContentInsightsService { - trackDashboardView: (dashboardId: string) => void; - contentInsightsClient: ContentInsightsClientPublic; -} diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management.stub.ts b/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management.stub.ts deleted file mode 100644 index 04adeb88c3b9..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management.stub.ts +++ /dev/null @@ -1,80 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; - -import { DashboardContentManagementService, LoadDashboardReturn } from './types'; -import { DashboardAttributes } from '../../../common/content_management'; -import { SearchDashboardsResponse } from './lib/find_dashboards'; - -export type DashboardContentManagementServiceFactory = - PluginServiceFactory; - -export const dashboardContentManagementServiceFactory: DashboardContentManagementServiceFactory = - () => { - return { - loadDashboardState: jest.fn().mockImplementation(() => - Promise.resolve({ - dashboardInput: {}, - } as LoadDashboardReturn) - ), - saveDashboardState: jest.fn(), - findDashboards: { - search: jest.fn().mockImplementation(({ search, size }) => { - const sizeToUse = size ?? 10; - const hits: SearchDashboardsResponse['hits'] = []; - for (let i = 0; i < sizeToUse; i++) { - hits.push({ - type: 'dashboard', - id: `dashboard${i}`, - attributes: { - description: `dashboard${i} desc`, - title: `dashboard${i} - ${search} - title`, - }, - references: [] as SearchDashboardsResponse['hits'][0]['references'], - } as SearchDashboardsResponse['hits'][0]); - } - return Promise.resolve({ - total: sizeToUse, - hits, - }); - }), - findById: jest.fn(), - findByIds: jest.fn().mockImplementation(() => - Promise.resolve([ - { - id: `dashboardUnsavedOne`, - status: 'success', - attributes: { - title: `Dashboard Unsaved One`, - } as unknown as DashboardAttributes, - }, - { - id: `dashboardUnsavedTwo`, - status: 'success', - attributes: { - title: `Dashboard Unsaved Two`, - } as unknown as DashboardAttributes, - }, - { - id: `dashboardUnsavedThree`, - status: 'success', - attributes: { - title: `Dashboard Unsaved Three`, - } as unknown as DashboardAttributes, - }, - ]) - ), - findByTitle: jest.fn(), - }, - deleteDashboards: jest.fn(), - checkForDuplicateDashboardTitle: jest.fn(), - updateDashboardMeta: jest.fn(), - }; - }; diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management_service.ts b/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management_service.ts deleted file mode 100644 index 5ab0f97d3b14..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management_service.ts +++ /dev/null @@ -1,101 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; - -import type { DashboardStartDependencies } from '../../plugin'; -import { checkForDuplicateDashboardTitle } from './lib/check_for_duplicate_dashboard_title'; - -import { - searchDashboards, - findDashboardById, - findDashboardsByIds, - findDashboardIdByTitle, -} from './lib/find_dashboards'; -import { saveDashboardState } from './lib/save_dashboard_state'; -import type { - DashboardContentManagementRequiredServices, - DashboardContentManagementService, -} from './types'; -import { deleteDashboards } from './lib/delete_dashboards'; -import { loadDashboardState } from './lib/load_dashboard_state'; -import { updateDashboardMeta } from './lib/update_dashboard_meta'; -import { DashboardContentManagementCache } from './dashboard_content_management_cache'; - -export type DashboardContentManagementServiceFactory = KibanaPluginServiceFactory< - DashboardContentManagementService, - DashboardStartDependencies, - DashboardContentManagementRequiredServices ->; - -export const dashboardContentManagementCache = new DashboardContentManagementCache(); - -export const dashboardContentManagementServiceFactory: DashboardContentManagementServiceFactory = ( - { startPlugins: { contentManagement } }, - requiredServices -) => { - const { - data, - embeddable, - notifications, - dashboardBackup, - initializerContext, - savedObjectsTagging, - } = requiredServices; - return { - loadDashboardState: ({ id }) => - loadDashboardState({ - id, - data, - embeddable, - contentManagement, - savedObjectsTagging, - }), - saveDashboardState: ({ - controlGroupReferences, - currentState, - saveOptions, - lastSavedId, - panelReferences, - }) => - saveDashboardState({ - controlGroupReferences, - data, - embeddable, - saveOptions, - lastSavedId, - currentState, - notifications, - panelReferences, - dashboardBackup, - contentManagement, - initializerContext, - savedObjectsTagging, - }), - findDashboards: { - search: ({ hasReference, hasNoReference, search, size, options }) => - searchDashboards({ - contentManagement, - hasNoReference, - hasReference, - options, - search, - size, - }), - findById: (id) => findDashboardById(contentManagement, id), - findByIds: (ids) => findDashboardsByIds(contentManagement, ids), - findByTitle: (title) => findDashboardIdByTitle(contentManagement, title), - }, - checkForDuplicateDashboardTitle: (props) => - checkForDuplicateDashboardTitle(props, contentManagement), - deleteDashboards: (ids) => deleteDashboards(ids, contentManagement), - updateDashboardMeta: (props) => - updateDashboardMeta(props, { contentManagement, savedObjectsTagging, embeddable }), - }; -}; diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management_cache.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/dashboard_content_management_cache.ts similarity index 100% rename from src/plugins/dashboard/public/services/dashboard_content_management/dashboard_content_management_cache.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/dashboard_content_management_cache.ts diff --git a/src/plugins/dashboard/public/services/dashboard_content_management_service/index.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/index.ts new file mode 100644 index 000000000000..ebc5a414f9f6 --- /dev/null +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/index.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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { DashboardContentManagementCache } from './dashboard_content_management_cache'; +import { checkForDuplicateDashboardTitle } from './lib/check_for_duplicate_dashboard_title'; +import { deleteDashboards } from './lib/delete_dashboards'; +import { + findDashboardById, + findDashboardIdByTitle, + findDashboardsByIds, + searchDashboards, +} from './lib/find_dashboards'; +import { loadDashboardState } from './lib/load_dashboard_state'; +import { saveDashboardState } from './lib/save_dashboard_state'; +import { updateDashboardMeta } from './lib/update_dashboard_meta'; + +let dashboardContentManagementCache: DashboardContentManagementCache; + +export const getDashboardContentManagementCache = () => { + if (!dashboardContentManagementCache) + dashboardContentManagementCache = new DashboardContentManagementCache(); + return dashboardContentManagementCache; +}; + +export const getDashboardContentManagementService = () => { + return { + loadDashboardState, + saveDashboardState, + findDashboards: { + search: searchDashboards, + findById: findDashboardById, + findByIds: findDashboardsByIds, + findByTitle: findDashboardIdByTitle, + }, + checkForDuplicateDashboardTitle, + deleteDashboards, + updateDashboardMeta, + }; +}; diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/check_for_duplicate_dashboard_title.test.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.test.ts similarity index 64% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/check_for_duplicate_dashboard_title.test.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.test.ts index 68de16132577..c20ba72d4147 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/check_for_duplicate_dashboard_title.test.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.test.ts @@ -7,17 +7,11 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ContentClient } from '@kbn/content-management-plugin/public'; import { checkForDuplicateDashboardTitle } from './check_for_duplicate_dashboard_title'; import { extractTitleAndCount } from '../../../dashboard_container/embeddable/api/lib/extract_title_and_count'; - -type ContentManagementStart = Parameters[1]; +import { contentManagementService } from '../../kibana_services'; describe('checkForDuplicateDashboardTitle', () => { - const mockedContentManagementClient = { - search: jest.fn(), - } as unknown as ContentClient; - const newTitle = 'Shiny dashboard (1)'; afterEach(() => { @@ -35,9 +29,7 @@ describe('checkForDuplicateDashboardTitle', () => { }, ]; - ( - mockedContentManagementClient.search as jest.MockedFunction - ).mockImplementationOnce(() => + contentManagementService.client.search = jest.fn().mockImplementationOnce(() => Promise.resolve({ hits: pageResults, pagination: { @@ -46,17 +38,14 @@ describe('checkForDuplicateDashboardTitle', () => { }) ); - await checkForDuplicateDashboardTitle( - { - title: newTitle, - lastSavedTitle: baseDashboardName, - copyOnSave: true, - isTitleDuplicateConfirmed: false, - }, - { client: mockedContentManagementClient } as ContentManagementStart - ); + await checkForDuplicateDashboardTitle({ + title: newTitle, + lastSavedTitle: baseDashboardName, + copyOnSave: true, + isTitleDuplicateConfirmed: false, + }); - expect(mockedContentManagementClient.search).toHaveBeenCalledWith( + expect(contentManagementService.client.search).toHaveBeenCalledWith( expect.objectContaining({ query: expect.objectContaining({ text: `${baseDashboardName}*`, @@ -86,9 +75,7 @@ describe('checkForDuplicateDashboardTitle', () => { const onTitleDuplicate = jest.fn(); - ( - mockedContentManagementClient.search as jest.MockedFunction - ).mockImplementationOnce(() => + contentManagementService.client.search = jest.fn().mockImplementationOnce(() => Promise.resolve({ hits: pageResults, pagination: { @@ -97,18 +84,15 @@ describe('checkForDuplicateDashboardTitle', () => { }) ); - await checkForDuplicateDashboardTitle( - { - title: userTitleInput, - lastSavedTitle: baseDashboardName, - copyOnSave: true, - isTitleDuplicateConfirmed: false, - onTitleDuplicate, - }, - { client: mockedContentManagementClient } as ContentManagementStart - ); + await checkForDuplicateDashboardTitle({ + title: userTitleInput, + lastSavedTitle: baseDashboardName, + copyOnSave: true, + isTitleDuplicateConfirmed: false, + onTitleDuplicate, + }); - expect(mockedContentManagementClient.search).toHaveBeenCalledWith( + expect(contentManagementService.client.search).toHaveBeenCalledWith( expect.objectContaining({ query: expect.objectContaining({ text: 'Shiny dashboard*', diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/check_for_duplicate_dashboard_title.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts similarity index 86% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/check_for_duplicate_dashboard_title.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts index 2d5a4f7742e9..0d12cb446129 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/check_for_duplicate_dashboard_title.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/check_for_duplicate_dashboard_title.ts @@ -7,10 +7,10 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { DashboardStartDependencies } from '../../../plugin'; import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; import { DashboardCrudTypes } from '../../../../common/content_management'; import { extractTitleAndCount } from '../../../dashboard_container/embeddable/api/lib/extract_title_and_count'; +import { contentManagementService } from '../../kibana_services'; export interface DashboardDuplicateTitleCheckProps { title: string; @@ -28,16 +28,13 @@ export interface DashboardDuplicateTitleCheckProps { * returns Promise when there is no duplicate, or runs the provided onTitleDuplicate * function when the title already exists */ -export async function checkForDuplicateDashboardTitle( - { - title, - copyOnSave, - lastSavedTitle, - onTitleDuplicate, - isTitleDuplicateConfirmed, - }: DashboardDuplicateTitleCheckProps, - contentManagement: DashboardStartDependencies['contentManagement'] -): Promise { +export async function checkForDuplicateDashboardTitle({ + title, + copyOnSave, + lastSavedTitle, + onTitleDuplicate, + isTitleDuplicateConfirmed, +}: DashboardDuplicateTitleCheckProps): Promise { // Don't check if the title is an empty string if (!title) { return true; @@ -56,7 +53,7 @@ export async function checkForDuplicateDashboardTitle( const [baseDashboardName] = extractTitleAndCount(title); - const { hits } = await contentManagement.client.search< + const { hits } = await contentManagementService.client.search< DashboardCrudTypes['SearchIn'], DashboardCrudTypes['SearchOut'] >({ diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/dashboard_versioning.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/dashboard_versioning.ts similarity index 100% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/dashboard_versioning.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/dashboard_versioning.ts diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/delete_dashboards.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts similarity index 68% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/delete_dashboards.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts index dbafbe738212..0be9355ddb60 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/delete_dashboards.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/delete_dashboards.ts @@ -7,18 +7,15 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { DashboardStartDependencies } from '../../../plugin'; -import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; +import { getDashboardContentManagementCache } from '..'; import { DashboardCrudTypes } from '../../../../common/content_management'; -import { dashboardContentManagementCache } from '../dashboard_content_management_service'; +import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; +import { contentManagementService } from '../../kibana_services'; -export const deleteDashboards = async ( - ids: string[], - contentManagement: DashboardStartDependencies['contentManagement'] -) => { +export const deleteDashboards = async (ids: string[]) => { const deletePromises = ids.map((id) => { - dashboardContentManagementCache.deleteDashboard(id); - return contentManagement.client.delete< + getDashboardContentManagementCache().deleteDashboard(id); + return contentManagementService.client.delete< DashboardCrudTypes['DeleteIn'], DashboardCrudTypes['DeleteOut'] >({ diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/find_dashboards.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts similarity index 78% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/find_dashboards.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts index eef3e9e14204..2f9a2c2e9a03 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/find_dashboards.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/find_dashboards.ts @@ -10,17 +10,16 @@ import type { Reference } from '@kbn/content-management-utils'; import { SavedObjectError, SavedObjectsFindOptionsReference } from '@kbn/core/public'; +import { getDashboardContentManagementCache } from '..'; import { DashboardAttributes, DashboardCrudTypes, DashboardItem, } from '../../../../common/content_management'; import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; -import { DashboardStartDependencies } from '../../../plugin'; -import { dashboardContentManagementCache } from '../dashboard_content_management_service'; +import { contentManagementService } from '../../kibana_services'; export interface SearchDashboardsArgs { - contentManagement: DashboardStartDependencies['contentManagement']; options?: DashboardCrudTypes['SearchIn']['options']; hasNoReference?: SavedObjectsFindOptionsReference[]; hasReference?: SavedObjectsFindOptionsReference[]; @@ -34,7 +33,6 @@ export interface SearchDashboardsResponse { } export async function searchDashboards({ - contentManagement, hasNoReference, hasReference, options, @@ -44,7 +42,7 @@ export async function searchDashboards({ const { hits, pagination: { total }, - } = await contentManagement.client.search< + } = await contentManagementService.client.search< DashboardCrudTypes['SearchIn'], DashboardCrudTypes['SearchOut'] >({ @@ -70,10 +68,9 @@ export type FindDashboardsByIdResponse = { id: string } & ( | { status: 'error'; error: SavedObjectError } ); -export async function findDashboardById( - contentManagement: DashboardStartDependencies['contentManagement'], - id: string -): Promise { +export async function findDashboardById(id: string): Promise { + const dashboardContentManagementCache = getDashboardContentManagementCache(); + /** If the dashboard exists in the cache, then return the result from that */ const cachedDashboard = dashboardContentManagementCache.fetchDashboard(id); if (cachedDashboard) { @@ -87,7 +84,7 @@ export async function findDashboardById( /** Otherwise, fetch the dashboard from the content management client, add it to the cache, and return the result */ try { - const response = await contentManagement.client.get< + const response = await contentManagementService.client.get< DashboardCrudTypes['GetIn'], DashboardCrudTypes['GetOut'] >({ @@ -114,20 +111,14 @@ export async function findDashboardById( } } -export async function findDashboardsByIds( - contentManagement: DashboardStartDependencies['contentManagement'], - ids: string[] -): Promise { - const findPromises = ids.map((id) => findDashboardById(contentManagement, id)); +export async function findDashboardsByIds(ids: string[]): Promise { + const findPromises = ids.map((id) => findDashboardById(id)); const results = await Promise.all(findPromises); return results as FindDashboardsByIdResponse[]; } -export async function findDashboardIdByTitle( - contentManagement: DashboardStartDependencies['contentManagement'], - title: string -): Promise<{ id: string } | undefined> { - const { hits } = await contentManagement.client.search< +export async function findDashboardIdByTitle(title: string): Promise<{ id: string } | undefined> { + const { hits } = await contentManagementService.client.search< DashboardCrudTypes['SearchIn'], DashboardCrudTypes['SearchOut'] >({ diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/load_dashboard_state.test.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.test.ts similarity index 76% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/load_dashboard_state.test.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.test.ts index 0f6880cb76e8..e03a078e0df4 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/load_dashboard_state.test.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.test.ts @@ -7,23 +7,14 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { registry } from '../../plugin_services.stub'; -import { pluginServices } from '../../plugin_services'; +import { getDashboardContentManagementCache } from '..'; import { getSampleDashboardInput } from '../../../mocks'; +import { contentManagementService } from '../../kibana_services'; import { loadDashboardState } from './load_dashboard_state'; -import { dashboardContentManagementCache } from '../dashboard_content_management_service'; - -pluginServices.setRegistry(registry.start({})); -const { data, embeddable, contentManagement, savedObjectsTagging } = pluginServices.getServices(); - -const allServices = { - data, - embeddable, - contentManagement, - savedObjectsTagging, -}; describe('Load dashboard state', () => { + const dashboardContentManagementCache = getDashboardContentManagementCache(); + it('should return cached result if available', async () => { dashboardContentManagementCache.fetchDashboard = jest.fn().mockImplementation((id: string) => { return { @@ -40,17 +31,16 @@ describe('Load dashboard state', () => { meta: {}, }; }); + contentManagementService.client.get = jest.fn(); dashboardContentManagementCache.addDashboard = jest.fn(); - contentManagement.client.get = jest.fn(); const { id } = getSampleDashboardInput(); const result = await loadDashboardState({ id, - ...allServices, }); expect(dashboardContentManagementCache.fetchDashboard).toBeCalled(); expect(dashboardContentManagementCache.addDashboard).not.toBeCalled(); - expect(contentManagement.client.get).not.toBeCalled(); + expect(contentManagementService.client.get).not.toBeCalled(); expect(result).toMatchObject({ dashboardId: id, dashboardFound: true, @@ -63,7 +53,7 @@ describe('Load dashboard state', () => { it('should not add to cache for alias redirect result', async () => { dashboardContentManagementCache.fetchDashboard = jest.fn().mockImplementation(() => undefined); dashboardContentManagementCache.addDashboard = jest.fn(); - contentManagement.client.get = jest.fn().mockImplementation(({ id }) => { + contentManagementService.client.get = jest.fn().mockImplementation(({ id }) => { return Promise.resolve({ item: { id }, meta: { @@ -74,7 +64,6 @@ describe('Load dashboard state', () => { const { id } = getSampleDashboardInput(); await loadDashboardState({ id, - ...allServices, }); expect(dashboardContentManagementCache.fetchDashboard).toBeCalled(); expect(dashboardContentManagementCache.addDashboard).not.toBeCalled(); diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/load_dashboard_state.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts similarity index 84% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/load_dashboard_state.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts index 2f78325e083f..17102e2fe7d0 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/load_dashboard_state.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/load_dashboard_state.ts @@ -7,26 +7,32 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { v4 as uuidv4 } from 'uuid'; import { has } from 'lodash'; +import { v4 as uuidv4 } from 'uuid'; -import { Filter, Query } from '@kbn/es-query'; +import { injectSearchSourceReferences, parseSearchSourceJSON } from '@kbn/data-plugin/public'; import { ViewMode } from '@kbn/embeddable-plugin/public'; +import { Filter, Query } from '@kbn/es-query'; import { SavedObjectNotFound } from '@kbn/kibana-utils-plugin/public'; import { cleanFiltersForSerialize } from '@kbn/presentation-util-plugin/public'; -import { parseSearchSourceJSON, injectSearchSourceReferences } from '@kbn/data-plugin/public'; +import { getDashboardContentManagementCache } from '..'; import { + convertSavedPanelsToPanelMap, injectReferences, type DashboardOptions, - convertSavedPanelsToPanelMap, } from '../../../../common'; -import { migrateDashboardInput } from './migrate_dashboard_input'; -import { convertNumberToDashboardVersion } from './dashboard_versioning'; import { DashboardCrudTypes } from '../../../../common/content_management'; -import type { LoadDashboardFromSavedObjectProps, LoadDashboardReturn } from '../types'; -import { dashboardContentManagementCache } from '../dashboard_content_management_service'; import { DASHBOARD_CONTENT_ID, DEFAULT_DASHBOARD_INPUT } from '../../../dashboard_constants'; +import { + contentManagementService, + dataService, + embeddableService, + savedObjectsTaggingService, +} from '../../kibana_services'; +import type { LoadDashboardFromSavedObjectProps, LoadDashboardReturn } from '../types'; +import { convertNumberToDashboardVersion } from './dashboard_versioning'; +import { migrateDashboardInput } from './migrate_dashboard_input'; export function migrateLegacyQuery(query: Query | { [key: string]: any } | string): Query { // Lucene was the only option before, so language-less queries are all lucene @@ -39,15 +45,12 @@ export function migrateLegacyQuery(query: Query | { [key: string]: any } | strin export const loadDashboardState = async ({ id, - data, - embeddable, - contentManagement, - savedObjectsTagging, }: LoadDashboardFromSavedObjectProps): Promise => { const { search: dataSearchService, query: { queryString }, - } = data; + } = dataService; + const dashboardContentManagementCache = getDashboardContentManagementCache(); const savedObjectId = id; const embeddableId = uuidv4(); @@ -78,7 +81,7 @@ export const loadDashboardState = async ({ ({ item: rawDashboardContent, meta: resolveMeta } = cachedDashboard); } else { /** Otherwise, fetch and load the dashboard from the content management client, and add it to the cache */ - const result = await contentManagement.client + const result = await contentManagementService.client .get({ contentTypeId: DASHBOARD_CONTENT_ID, id, @@ -116,7 +119,7 @@ export const loadDashboardState = async ({ return injectReferences( { references, attributes: rawAttributes }, { - embeddablePersistableStateService: embeddable, + embeddablePersistableStateService: embeddableService, } ); })(); @@ -170,30 +173,27 @@ export const loadDashboardState = async ({ const options: DashboardOptions = optionsJSON ? JSON.parse(optionsJSON) : undefined; const panels = convertSavedPanelsToPanelMap(panelsJSON ? JSON.parse(panelsJSON) : []); - const { dashboardInput, anyMigrationRun } = migrateDashboardInput( - { - ...DEFAULT_DASHBOARD_INPUT, - ...options, - - id: embeddableId, - refreshInterval, - timeRestore, - description, - timeRange, - filters, - panels, - query, - title, - - viewMode: ViewMode.VIEW, // dashboards loaded from saved object default to view mode. If it was edited recently, the view mode from session storage will override this. - tags: savedObjectsTagging.getTagIdsFromReferences?.(references) ?? [], - - controlGroupInput: attributes.controlGroupInput, - - version: convertNumberToDashboardVersion(version), - }, - embeddable - ); + const { dashboardInput, anyMigrationRun } = migrateDashboardInput({ + ...DEFAULT_DASHBOARD_INPUT, + ...options, + + id: embeddableId, + refreshInterval, + timeRestore, + description, + timeRange, + filters, + panels, + query, + title, + + viewMode: ViewMode.VIEW, // dashboards loaded from saved object default to view mode. If it was edited recently, the view mode from session storage will override this. + tags: savedObjectsTaggingService?.getTaggingApi()?.ui.getTagIdsFromReferences(references) ?? [], + + controlGroupInput: attributes.controlGroupInput, + + version: convertNumberToDashboardVersion(version), + }); return { managed, diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts similarity index 84% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts index 4b84d67a4bca..ad0a5cc386b2 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.test.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.test.ts @@ -8,7 +8,7 @@ */ import { getSampleDashboardInput, getSampleDashboardPanel } from '../../../mocks'; -import { DashboardEmbeddableService } from '../../embeddable/types'; +import { embeddableService } from '../../kibana_services'; import { SavedDashboardInput } from '../types'; import { migrateDashboardInput } from './migrate_dashboard_input'; @@ -31,14 +31,12 @@ describe('Migrate dashboard input', () => { panel4: getSampleDashboardPanel({ type: 'ultraDiscover', explicitInput: { id: 'panel4' } }), }; - const embeddableService: DashboardEmbeddableService = { - getEmbeddableFactory: jest.fn(() => ({ - latestVersion: '1.0.0', - migrations: {}, - })), - } as unknown as DashboardEmbeddableService; + embeddableService.getEmbeddableFactory = jest.fn(() => ({ + latestVersion: '1.0.0', + migrations: {}, + })) as unknown as typeof embeddableService.getEmbeddableFactory; - const result = migrateDashboardInput(dashboardInput, embeddableService); + const result = migrateDashboardInput(dashboardInput); // migration run should be true because the runEmbeddableFactoryMigrations mock above returns true. expect(result.anyMigrationRun).toBe(true); diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.ts similarity index 83% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.ts index cfae6b1fa809..b0cfac9f97ce 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/migrate_dashboard_input.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/migrate_dashboard_input.ts @@ -12,8 +12,7 @@ import { runEmbeddableFactoryMigrations, } from '@kbn/embeddable-plugin/public'; import { DashboardContainerInput, DashboardPanelState } from '../../../../common'; -import { type DashboardEmbeddableService } from '../../embeddable/types'; -import { pluginServices } from '../../plugin_services'; +import { embeddableService } from '../../kibana_services'; import { SavedDashboardInput } from '../types'; /** @@ -22,25 +21,19 @@ import { SavedDashboardInput } from '../types'; * This prevents the reset button from un-migrating the panels on the Dashboard. This also means that the migrations may * get skipped at Embeddable create time - unless states with older versions are saved in the URL or session storage. */ -export const migrateDashboardInput = ( - dashboardInput: SavedDashboardInput, - embeddable: DashboardEmbeddableService -) => { - const { - embeddable: { reactEmbeddableRegistryHasKey }, - } = pluginServices.getServices(); +export const migrateDashboardInput = (dashboardInput: SavedDashboardInput) => { let anyMigrationRun = false; if (!dashboardInput) return dashboardInput; const migratedPanels: DashboardContainerInput['panels'] = {}; for (const [id, panel] of Object.entries(dashboardInput.panels)) { // if the panel type is registered in the new embeddable system, we do not need to run migrations for it. - if (reactEmbeddableRegistryHasKey(panel.type)) { + if (embeddableService.reactEmbeddableRegistryHasKey(panel.type)) { migratedPanels[id] = panel; continue; } - const factory = embeddable.getEmbeddableFactory(panel.type); + const factory = embeddableService.getEmbeddableFactory(panel.type); if (!factory) throw new EmbeddableFactoryNotFoundError(panel.type); // run last saved migrations for by value panels only. if (!panel.explicitInput.savedObjectId) { diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.test.ts similarity index 75% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.test.ts index 342dd0bf6f8d..8327397a6606 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.test.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.test.ts @@ -7,24 +7,17 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { registry } from '../../plugin_services.stub'; -import { pluginServices } from '../../plugin_services'; +import { DashboardContainerInput } from '../../../../common'; import { getSampleDashboardInput } from '../../../mocks'; +import { + contentManagementService, + coreServices, + dataService, + embeddableService, +} from '../../kibana_services'; import { saveDashboardState } from './save_dashboard_state'; -import { DashboardContainerInput } from '../../../../common'; -pluginServices.setRegistry(registry.start({})); -const { - data, - embeddable, - notifications, - dashboardBackup, - contentManagement, - initializerContext, - savedObjectsTagging, -} = pluginServices.getServices(); - -contentManagement.client.create = jest.fn().mockImplementation(({ options }) => { +contentManagementService.client.create = jest.fn().mockImplementation(({ options }) => { if (options.id === undefined) { return { item: { id: 'newlyGeneratedId' } }; } @@ -32,24 +25,18 @@ contentManagement.client.create = jest.fn().mockImplementation(({ options }) => throw new Error('Update should be used when id is provided'); }); -contentManagement.client.update = jest.fn().mockImplementation(({ id }) => { +contentManagementService.client.update = jest.fn().mockImplementation(({ id }) => { if (id === undefined) { throw new Error('Update needs an id'); } return { item: { id } }; }); -const allServices = { - data, - embeddable, - notifications, - dashboardBackup, - contentManagement, - initializerContext, - savedObjectsTagging, -}; -data.query.timefilter.timefilter.getTime = jest.fn().mockReturnValue({ from: 'then', to: 'now' }); -embeddable.extract = jest +dataService.query.timefilter.timefilter.getTime = jest + .fn() + .mockReturnValue({ from: 'then', to: 'now' }); + +embeddableService.extract = jest .fn() .mockImplementation((attributes) => ({ state: attributes, references: [] })); @@ -66,14 +53,13 @@ describe('Save dashboard state', () => { } as unknown as DashboardContainerInput, lastSavedId: 'Boogaloo', saveOptions: {}, - ...allServices, }); expect(result.id).toBe('Boogaloo'); - expect(allServices.contentManagement.client.update).toHaveBeenCalledWith( + expect(contentManagementService.client.update).toHaveBeenCalledWith( expect.objectContaining({ id: 'Boogaloo' }) ); - expect(allServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ + expect(coreServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ title: `Dashboard 'BOO' was saved`, className: 'eui-textBreakWord', 'data-test-subj': 'saveDashboardSuccess', @@ -88,17 +74,16 @@ describe('Save dashboard state', () => { } as unknown as DashboardContainerInput, lastSavedId: 'Boogaloonie', saveOptions: { saveAsCopy: true }, - ...allServices, }); expect(result.id).toBe('newlyGeneratedId'); expect(result.redirectRequired).toBe(true); - expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( + expect(contentManagementService.client.create).toHaveBeenCalledWith( expect.objectContaining({ options: { references: [] }, }) ); - expect(allServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ + expect(coreServices.notifications.toasts.addSuccess).toHaveBeenCalledWith({ title: `Dashboard 'BooToo' was saved`, className: 'eui-textBreakWord', 'data-test-subj': 'saveDashboardSuccess', @@ -114,12 +99,11 @@ describe('Save dashboard state', () => { } as unknown as DashboardContainerInput, lastSavedId: 'Boogatoonie', saveOptions: { saveAsCopy: true }, - ...allServices, }); expect(result.id).toBe('newlyGeneratedId'); - expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( + expect(contentManagementService.client.create).toHaveBeenCalledWith( expect.objectContaining({ data: expect.objectContaining({ panelsJSON: expect.not.stringContaining('neverGonnaGetThisId'), @@ -138,11 +122,10 @@ describe('Save dashboard state', () => { panelReferences: [{ name: 'idOne:panel_idOne', type: 'boop', id: 'idOne' }], lastSavedId: 'Boogatoonie', saveOptions: { saveAsCopy: true }, - ...allServices, }); expect(result.id).toBe('newlyGeneratedId'); - expect(allServices.contentManagement.client.create).toHaveBeenCalledWith( + expect(contentManagementService.client.create).toHaveBeenCalledWith( expect.objectContaining({ options: expect.objectContaining({ references: expect.arrayContaining([ @@ -157,7 +140,7 @@ describe('Save dashboard state', () => { }); it('should return an error when the save fails.', async () => { - contentManagement.client.create = jest.fn().mockRejectedValue('Whoops'); + contentManagementService.client.create = jest.fn().mockRejectedValue('Whoops'); const result = await saveDashboardState({ currentState: { ...getSampleDashboardInput(), @@ -166,7 +149,6 @@ describe('Save dashboard state', () => { } as unknown as DashboardContainerInput, lastSavedId: 'Boogatoonie', saveOptions: { saveAsCopy: true }, - ...allServices, }); expect(result.id).toBeUndefined(); diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts similarity index 82% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts index b9285b208c14..283ed5eed7f5 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/save_dashboard_state.ts @@ -13,20 +13,23 @@ import moment, { Moment } from 'moment'; import { extractSearchSourceReferences, RefreshInterval } from '@kbn/data-plugin/public'; import { isFilterPinned } from '@kbn/es-query'; +import { getDashboardContentManagementCache } from '..'; import { convertPanelMapToSavedPanels, extractReferences } from '../../../../common'; import { DashboardAttributes, DashboardCrudTypes } from '../../../../common/content_management'; +import { generateNewPanelIds } from '../../../../common/lib/dashboard_panel_converters'; import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; import { LATEST_DASHBOARD_CONTAINER_VERSION } from '../../../dashboard_container'; import { dashboardSaveToastStrings } from '../../../dashboard_container/_dashboard_container_strings'; -import { DashboardStartDependencies } from '../../../plugin'; -import { dashboardContentManagementCache } from '../dashboard_content_management_service'; +import { getDashboardBackupService } from '../../dashboard_backup_service'; import { - DashboardContentManagementRequiredServices, - SaveDashboardProps, - SaveDashboardReturn, -} from '../types'; + contentManagementService, + coreServices, + dataService, + embeddableService, + savedObjectsTaggingService, +} from '../../kibana_services'; +import { SaveDashboardProps, SaveDashboardReturn } from '../types'; import { convertDashboardVersionToNumber } from './dashboard_versioning'; -import { generateNewPanelIds } from '../../../../common/lib/dashboard_panel_converters'; export const convertTimeToUTCString = (time?: string | Moment): undefined | string => { if (moment(time).isValid()) { @@ -38,35 +41,20 @@ export const convertTimeToUTCString = (time?: string | Moment): undefined | stri } }; -type SaveDashboardStateProps = SaveDashboardProps & { - data: DashboardContentManagementRequiredServices['data']; - contentManagement: DashboardStartDependencies['contentManagement']; - embeddable: DashboardContentManagementRequiredServices['embeddable']; - notifications: DashboardContentManagementRequiredServices['notifications']; - dashboardBackup: DashboardContentManagementRequiredServices['dashboardBackup']; - initializerContext: DashboardContentManagementRequiredServices['initializerContext']; - savedObjectsTagging: DashboardContentManagementRequiredServices['savedObjectsTagging']; -}; - export const saveDashboardState = async ({ controlGroupReferences, - data, - embeddable, lastSavedId, saveOptions, currentState, panelReferences, - dashboardBackup, - contentManagement, - savedObjectsTagging, - notifications: { toasts }, -}: SaveDashboardStateProps): Promise => { +}: SaveDashboardProps): Promise => { const { search: dataSearchService, query: { timefilter: { timefilter }, }, - } = data; + } = dataService; + const dashboardContentManagementCache = getDashboardContentManagementCache(); const { tags, @@ -165,11 +153,12 @@ export const saveDashboardState = async ({ attributes: rawDashboardAttributes, references: searchSourceReferences, }, - { embeddablePersistableStateService: embeddable } + { embeddablePersistableStateService: embeddableService } ); - const references = savedObjectsTagging.updateTagsReferences - ? savedObjectsTagging.updateTagsReferences(dashboardReferences, tags) + const savedObjectsTaggingApi = savedObjectsTaggingService?.getTaggingApi(); + const references = savedObjectsTaggingApi?.ui.updateTagsReferences + ? savedObjectsTaggingApi?.ui.updateTagsReferences(dashboardReferences, tags) : dashboardReferences; const allReferences = [ @@ -185,7 +174,7 @@ export const saveDashboardState = async ({ try { const result = idToSaveTo - ? await contentManagement.client.update< + ? await contentManagementService.client.update< DashboardCrudTypes['UpdateIn'], DashboardCrudTypes['UpdateOut'] >({ @@ -198,7 +187,7 @@ export const saveDashboardState = async ({ mergeAttributes: false, }, }) - : await contentManagement.client.create< + : await contentManagementService.client.create< DashboardCrudTypes['CreateIn'], DashboardCrudTypes['CreateOut'] >({ @@ -208,11 +197,10 @@ export const saveDashboardState = async ({ references: allReferences, }, }); - const newId = result.item.id; if (newId) { - toasts.addSuccess({ + coreServices.notifications.toasts.addSuccess({ title: dashboardSaveToastStrings.getSuccessString(currentState.title), className: 'eui-textBreakWord', 'data-test-subj': 'saveDashboardSuccess', @@ -222,7 +210,7 @@ export const saveDashboardState = async ({ * If the dashboard id has been changed, redirect to the new ID to keep the url param in sync. */ if (newId !== lastSavedId) { - dashboardBackup.clearState(lastSavedId); + getDashboardBackupService().clearState(lastSavedId); return { redirectRequired: true, id: newId, references: allReferences }; } else { dashboardContentManagementCache.deleteDashboard(newId); // something changed in an existing dashboard, so delete it from the cache so that it can be re-fetched @@ -230,7 +218,7 @@ export const saveDashboardState = async ({ } return { id: newId, references: allReferences }; } catch (error) { - toasts.addDanger({ + coreServices.notifications.toasts.addDanger({ title: dashboardSaveToastStrings.getFailureString(currentState.title, error.message), 'data-test-subj': 'saveDashboardFailure', }); diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/update_dashboard_meta.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts similarity index 56% rename from src/plugins/dashboard/public/services/dashboard_content_management/lib/update_dashboard_meta.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts index 60da204fcb07..2fd57738f17a 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/update_dashboard_meta.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/lib/update_dashboard_meta.ts @@ -8,37 +8,34 @@ */ import { DashboardContainerInput } from '../../../../common'; -import { DashboardStartDependencies } from '../../../plugin'; import { DASHBOARD_CONTENT_ID } from '../../../dashboard_constants'; import { DashboardCrudTypes } from '../../../../common/content_management'; import { findDashboardsByIds } from './find_dashboards'; -import { DashboardContentManagementRequiredServices } from '../types'; +import { contentManagementService, savedObjectsTaggingService } from '../../kibana_services'; type UpdateDashboardMetaProps = Pick< DashboardContainerInput, 'id' | 'title' | 'description' | 'tags' >; -interface UpdateDashboardMetaDependencies { - contentManagement: DashboardStartDependencies['contentManagement']; - savedObjectsTagging: DashboardContentManagementRequiredServices['savedObjectsTagging']; - embeddable: DashboardContentManagementRequiredServices['embeddable']; -} -export const updateDashboardMeta = async ( - { id, title, description = '', tags }: UpdateDashboardMetaProps, - { contentManagement, savedObjectsTagging, embeddable }: UpdateDashboardMetaDependencies -) => { - const [dashboard] = await findDashboardsByIds(contentManagement, [id]); +export const updateDashboardMeta = async ({ + id, + title, + description = '', + tags, +}: UpdateDashboardMetaProps) => { + const [dashboard] = await findDashboardsByIds([id]); if (dashboard.status === 'error') { return; } + const savedObjectsTaggingApi = savedObjectsTaggingService?.getTaggingApi(); const references = - savedObjectsTagging.updateTagsReferences && tags.length - ? savedObjectsTagging.updateTagsReferences(dashboard.references, tags) + savedObjectsTaggingApi?.ui.updateTagsReferences && tags.length + ? savedObjectsTaggingApi.ui.updateTagsReferences(dashboard.references, tags) : dashboard.references; - await contentManagement.client.update< + await contentManagementService.client.update< DashboardCrudTypes['UpdateIn'], DashboardCrudTypes['UpdateOut'] >({ diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/types.ts b/src/plugins/dashboard/public/services/dashboard_content_management_service/types.ts similarity index 72% rename from src/plugins/dashboard/public/services/dashboard_content_management/types.ts rename to src/plugins/dashboard/public/services/dashboard_content_management_service/types.ts index 19ddfac9e119..3294bb06c0d4 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/types.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management_service/types.ts @@ -8,20 +8,11 @@ */ import type { Reference } from '@kbn/content-management-utils'; +import { ControlGroupRuntimeState } from '@kbn/controls-plugin/public'; import { SavedObjectSaveOpts } from '@kbn/saved-objects-plugin/public'; -import { ControlGroupRuntimeState } from '@kbn/controls-plugin/public'; import { DashboardContainerInput } from '../../../common'; import { DashboardAttributes, DashboardCrudTypes } from '../../../common/content_management'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardBackupServiceType } from '../dashboard_backup/types'; -import { DashboardDataService } from '../data/types'; -import { DashboardEmbeddableService } from '../embeddable/types'; -import { DashboardInitializerContextService } from '../initializer_context/types'; -import { DashboardNotificationsService } from '../notifications/types'; -import { DashboardSavedObjectsTaggingService } from '../saved_objects_tagging/types'; -import { DashboardScreenshotModeService } from '../screenshot_mode/types'; -import { DashboardSpacesService } from '../spaces/types'; import { DashboardDuplicateTitleCheckProps } from './lib/check_for_duplicate_dashboard_title'; import { FindDashboardsByIdResponse, @@ -29,17 +20,6 @@ import { SearchDashboardsResponse, } from './lib/find_dashboards'; -export interface DashboardContentManagementRequiredServices { - data: DashboardDataService; - spaces: DashboardSpacesService; - embeddable: DashboardEmbeddableService; - notifications: DashboardNotificationsService; - dashboardBackup: DashboardBackupServiceType; - screenshotMode: DashboardScreenshotModeService; - initializerContext: DashboardInitializerContextService; - savedObjectsTagging: DashboardSavedObjectsTaggingService; -} - export interface DashboardContentManagementService { findDashboards: FindDashboardsService; deleteDashboards: (ids: string[]) => Promise; @@ -56,10 +36,6 @@ export interface DashboardContentManagementService { */ export interface LoadDashboardFromSavedObjectProps { id?: string; - data: DashboardContentManagementRequiredServices['data']; - contentManagement: DashboardStartDependencies['contentManagement']; - embeddable: DashboardContentManagementRequiredServices['embeddable']; - savedObjectsTagging: DashboardContentManagementRequiredServices['savedObjectsTagging']; } type DashboardResolveMeta = DashboardCrudTypes['GetOut']['meta']; diff --git a/src/plugins/dashboard/public/services/dashboard_favorites/dashboard_favorites_service.stub.ts b/src/plugins/dashboard/public/services/dashboard_favorites/dashboard_favorites_service.stub.ts deleted file mode 100644 index 9e06c0b06483..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_favorites/dashboard_favorites_service.stub.ts +++ /dev/null @@ -1,21 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { FavoritesClient } from '@kbn/content-management-favorites-public'; -import { httpServiceMock } from '@kbn/core-http-browser-mocks'; -import { DashboardFavoritesService } from './types'; - -export type DashboardFavoritesServiceFactory = PluginServiceFactory; - -export const dashboardFavoritesServiceFactory: DashboardFavoritesServiceFactory = () => { - return new FavoritesClient('dashboards', 'dashboard', { - http: httpServiceMock.createStartContract(), - }); -}; diff --git a/src/plugins/dashboard/public/services/dashboard_favorites/dashboard_favorites_service.ts b/src/plugins/dashboard/public/services/dashboard_favorites/dashboard_favorites_service.ts deleted file mode 100644 index 503f90c11e54..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_favorites/dashboard_favorites_service.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { FavoritesClient } from '@kbn/content-management-favorites-public'; -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardFavoritesService } from './types'; -import { DASHBOARD_APP_ID, DASHBOARD_CONTENT_ID } from '../../dashboard_constants'; - -export type DashboardFavoritesServiceFactory = KibanaPluginServiceFactory< - DashboardFavoritesService, - DashboardStartDependencies ->; - -export const dashboardFavoritesServiceFactory: DashboardFavoritesServiceFactory = ({ - coreStart, - startPlugins, -}) => { - return new FavoritesClient(DASHBOARD_APP_ID, DASHBOARD_CONTENT_ID, { - http: coreStart.http, - usageCollection: startPlugins.usageCollection, - }); -}; diff --git a/src/plugins/dashboard/public/services/dashboard_favorites/types.ts b/src/plugins/dashboard/public/services/dashboard_favorites/types.ts deleted file mode 100644 index 3ed4b88f4894..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_favorites/types.ts +++ /dev/null @@ -1,12 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { FavoritesClientPublic } from '@kbn/content-management-favorites-public'; - -export type DashboardFavoritesService = FavoritesClientPublic; diff --git a/src/plugins/dashboard/public/services/dashboard_recently_accessed/dashboard_recently_accessed.stub.ts b/src/plugins/dashboard/public/services/dashboard_recently_accessed/dashboard_recently_accessed.stub.ts deleted file mode 100644 index 8932b3210f0a..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_recently_accessed/dashboard_recently_accessed.stub.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardRecentlyAccessedService } from './types'; - -type DashboardRecentlyAccessedServiceFactory = - PluginServiceFactory; - -export const dashboardRecentlyAccessedServiceFactory: DashboardRecentlyAccessedServiceFactory = - () => { - return { - add: jest.fn(), - get: jest.fn(), - get$: jest.fn(), - }; - }; diff --git a/src/plugins/dashboard/public/services/dashboard_recently_accessed/dashboard_recently_accessed.ts b/src/plugins/dashboard/public/services/dashboard_recently_accessed/dashboard_recently_accessed.ts deleted file mode 100644 index bdfe42e9988b..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_recently_accessed/dashboard_recently_accessed.ts +++ /dev/null @@ -1,33 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { RecentlyAccessedService } from '@kbn/recently-accessed'; -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; - -import { DashboardHTTPService } from '../http/types'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardRecentlyAccessedService } from './types'; - -interface DashboardRecentlyAccessedRequiredServices { - http: DashboardHTTPService; -} - -export type DashboardBackupServiceFactory = KibanaPluginServiceFactory< - DashboardRecentlyAccessedService, - DashboardStartDependencies, - DashboardRecentlyAccessedRequiredServices ->; - -export const dashboardRecentlyAccessedFactory: DashboardBackupServiceFactory = ( - core, - requiredServices -) => { - const { http } = requiredServices; - return new RecentlyAccessedService().start({ http, key: 'dashboardRecentlyAccessed' }); -}; diff --git a/src/plugins/dashboard/public/services/dashboard_recently_accessed/types.ts b/src/plugins/dashboard/public/services/dashboard_recently_accessed/types.ts deleted file mode 100644 index 96f1772bb8ee..000000000000 --- a/src/plugins/dashboard/public/services/dashboard_recently_accessed/types.ts +++ /dev/null @@ -1,12 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { RecentlyAccessed } from '@kbn/recently-accessed'; - -export type DashboardRecentlyAccessedService = RecentlyAccessed; diff --git a/src/plugins/dashboard/public/services/i18n/i18n.stub.ts b/src/plugins/dashboard/public/services/dashboard_recently_accessed_service.ts similarity index 50% rename from src/plugins/dashboard/public/services/i18n/i18n.stub.ts rename to src/plugins/dashboard/public/services/dashboard_recently_accessed_service.ts index d756f2632aaa..06ab02857c30 100644 --- a/src/plugins/dashboard/public/services/i18n/i18n.stub.ts +++ b/src/plugins/dashboard/public/services/dashboard_recently_accessed_service.ts @@ -7,14 +7,17 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { coreMock } from '@kbn/core/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardI18nService } from './types'; +import { RecentlyAccessed, RecentlyAccessedService } from '@kbn/recently-accessed'; +import { coreServices } from './kibana_services'; -type I18nServiceFactory = PluginServiceFactory; +let dashboardRecentlyAccessed: RecentlyAccessed; -export const i18nServiceFactory: I18nServiceFactory = () => { - const { i18n } = coreMock.createStart(); - - return i18n; +export const getDashboardRecentlyAccessedService = () => { + if (!dashboardRecentlyAccessed) { + dashboardRecentlyAccessed = new RecentlyAccessedService().start({ + http: coreServices.http, + key: 'dashboardRecentlyAccessed', + }); + } + return dashboardRecentlyAccessed; }; diff --git a/src/plugins/dashboard/public/services/data/data.stub.ts b/src/plugins/dashboard/public/services/data/data.stub.ts deleted file mode 100644 index 9f688f4cd5dd..000000000000 --- a/src/plugins/dashboard/public/services/data/data.stub.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -// import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; -import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardDataService } from './types'; - -type DataServiceFactory = PluginServiceFactory; - -export const dataServiceFactory: DataServiceFactory = () => ({ - ...dataPluginMock.createStartContract(), - dataViews: { - ...dataViewPluginMocks.createStartContract(), - defaultDataViewExists: async () => true, - }, -}); diff --git a/src/plugins/dashboard/public/services/data/data_service.ts b/src/plugins/dashboard/public/services/data/data_service.ts deleted file mode 100644 index 7e464c2609c1..000000000000 --- a/src/plugins/dashboard/public/services/data/data_service.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardDataService } from './types'; - -export type DataServiceFactory = KibanaPluginServiceFactory< - DashboardDataService, - DashboardStartDependencies ->; - -export const dataServiceFactory: DataServiceFactory = ({ startPlugins }) => { - const { - data: { dataViews, fieldFormats, query, search }, - } = startPlugins; - - return { - dataViews, - fieldFormats, - query, - search, - }; -}; diff --git a/src/plugins/dashboard/public/services/data/types.ts b/src/plugins/dashboard/public/services/data/types.ts deleted file mode 100644 index 81e42a455095..000000000000 --- a/src/plugins/dashboard/public/services/data/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; - -export interface DashboardDataService { - dataViews: DataPublicPluginStart['dataViews']; - fieldFormats: DataPublicPluginStart['fieldFormats']; - query: DataPublicPluginStart['query']; - search: DataPublicPluginStart['search']; -} diff --git a/src/plugins/dashboard/public/services/data_view_editor/data_view_editor.stub.ts b/src/plugins/dashboard/public/services/data_view_editor/data_view_editor.stub.ts deleted file mode 100644 index b5d15dafbad4..000000000000 --- a/src/plugins/dashboard/public/services/data_view_editor/data_view_editor.stub.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { indexPatternEditorPluginMock as dataViewEditorPluginMock } from '@kbn/data-view-editor-plugin/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardDataViewEditorService } from './types'; - -type DataViewEditorServiceFactory = PluginServiceFactory; - -export const dataViewEditorServiceFactory: DataViewEditorServiceFactory = () => { - const dataViewEditorMock = dataViewEditorPluginMock.createStartContract(); - - return { - openEditor: dataViewEditorMock.openEditor, - userPermissions: dataViewEditorMock.userPermissions, - }; -}; diff --git a/src/plugins/dashboard/public/services/data_view_editor/data_view_editor_service.ts b/src/plugins/dashboard/public/services/data_view_editor/data_view_editor_service.ts deleted file mode 100644 index d64eba5d3282..000000000000 --- a/src/plugins/dashboard/public/services/data_view_editor/data_view_editor_service.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardDataViewEditorService } from './types'; - -export type DataViewEditorServiceFactory = KibanaPluginServiceFactory< - DashboardDataViewEditorService, - DashboardStartDependencies ->; - -export const dataViewEditorServiceFactory: DataViewEditorServiceFactory = ({ startPlugins }) => { - const { - dataViewEditor: { openEditor, userPermissions }, - } = startPlugins; - - return { - openEditor, - userPermissions, - }; -}; diff --git a/src/plugins/dashboard/public/services/data_view_editor/types.ts b/src/plugins/dashboard/public/services/data_view_editor/types.ts deleted file mode 100644 index 3e5e7977f211..000000000000 --- a/src/plugins/dashboard/public/services/data_view_editor/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; -export interface DashboardDataViewEditorService { - openEditor: DataViewEditorStart['openEditor']; - userPermissions: DataViewEditorStart['userPermissions']; -} diff --git a/src/plugins/dashboard/public/services/documentation_links/documentation_links.stub.ts b/src/plugins/dashboard/public/services/documentation_links/documentation_links.stub.ts deleted file mode 100644 index e7d7a0f0c091..000000000000 --- a/src/plugins/dashboard/public/services/documentation_links/documentation_links.stub.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { coreMock } from '@kbn/core/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardDocumentationLinksService } from './types'; - -type DocumentationLinksServiceFactory = PluginServiceFactory; - -export const documentationLinksServiceFactory: DocumentationLinksServiceFactory = () => { - const corePluginMock = coreMock.createStart(); - - return { - indexPatternsDocLink: corePluginMock.docLinks.links.indexPatterns.introduction, - kibanaGuideDocLink: corePluginMock.docLinks.links.kibana.guide, - dashboardDocLink: corePluginMock.docLinks.links.dashboard.guide, - esqlDocLink: corePluginMock.docLinks.links.query.queryESQL, - }; -}; diff --git a/src/plugins/dashboard/public/services/documentation_links/documentation_links_service.ts b/src/plugins/dashboard/public/services/documentation_links/documentation_links_service.ts deleted file mode 100644 index 9dbe6a57aea0..000000000000 --- a/src/plugins/dashboard/public/services/documentation_links/documentation_links_service.ts +++ /dev/null @@ -1,39 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardDocumentationLinksService } from './types'; - -export type DocumentationLinksServiceFactory = KibanaPluginServiceFactory< - DashboardDocumentationLinksService, - DashboardStartDependencies ->; - -export const documentationLinksServiceFactory: DocumentationLinksServiceFactory = ({ - coreStart, -}) => { - const { - docLinks: { - links: { - kibana, - indexPatterns: { introduction }, - dashboard, - query: { queryESQL }, - }, - }, - } = coreStart; - - return { - indexPatternsDocLink: introduction, - kibanaGuideDocLink: kibana.guide, - dashboardDocLink: dashboard.guide, - esqlDocLink: queryESQL, - }; -}; diff --git a/src/plugins/dashboard/public/services/documentation_links/types.ts b/src/plugins/dashboard/public/services/documentation_links/types.ts deleted file mode 100644 index d79c95fc43af..000000000000 --- a/src/plugins/dashboard/public/services/documentation_links/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { CoreStart } from '@kbn/core/public'; - -export interface DashboardDocumentationLinksService { - indexPatternsDocLink: CoreStart['docLinks']['links']['indexPatterns']['introduction']; - kibanaGuideDocLink: CoreStart['docLinks']['links']['kibana']['guide']; - dashboardDocLink: CoreStart['docLinks']['links']['dashboard']['guide']; - esqlDocLink: CoreStart['docLinks']['links']['query']['queryESQL']; -} diff --git a/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts b/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts deleted file mode 100644 index 078f6b8cfe81..000000000000 --- a/src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks'; -import type { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardEmbeddableService } from './types'; - -export type EmbeddableServiceFactory = PluginServiceFactory; - -export const embeddableServiceFactory: EmbeddableServiceFactory = () => { - const pluginMock = embeddablePluginMock.createStartContract(); - - return { - reactEmbeddableRegistryHasKey: pluginMock.reactEmbeddableRegistryHasKey, - getEmbeddableFactories: pluginMock.getEmbeddableFactories, - getEmbeddableFactory: pluginMock.getEmbeddableFactory, - getStateTransfer: pluginMock.getStateTransfer, - getAllMigrations: pluginMock.getAllMigrations, - telemetry: pluginMock.telemetry, - extract: pluginMock.extract, - inject: pluginMock.inject, - }; -}; diff --git a/src/plugins/dashboard/public/services/embeddable/embeddable_service.ts b/src/plugins/dashboard/public/services/embeddable/embeddable_service.ts deleted file mode 100644 index 6cce6426343a..000000000000 --- a/src/plugins/dashboard/public/services/embeddable/embeddable_service.ts +++ /dev/null @@ -1,34 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { pick } from 'lodash'; - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; - -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardEmbeddableService } from './types'; - -export type EmbeddableServiceFactory = KibanaPluginServiceFactory< - DashboardEmbeddableService, - DashboardStartDependencies ->; -export const embeddableServiceFactory: EmbeddableServiceFactory = ({ startPlugins }) => { - const { embeddable } = startPlugins; - - return pick(embeddable, [ - 'reactEmbeddableRegistryHasKey', - 'getEmbeddableFactory', - 'getEmbeddableFactories', - 'getStateTransfer', - 'getAllMigrations', - 'telemetry', - 'extract', - 'inject', - ]); -}; diff --git a/src/plugins/dashboard/public/services/embeddable/types.ts b/src/plugins/dashboard/public/services/embeddable/types.ts deleted file mode 100644 index 8b293a75fc82..000000000000 --- a/src/plugins/dashboard/public/services/embeddable/types.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { EmbeddableStart } from '@kbn/embeddable-plugin/public'; - -export type DashboardEmbeddableService = Pick< - EmbeddableStart, - | 'reactEmbeddableRegistryHasKey' - | 'getEmbeddableFactories' - | 'getEmbeddableFactory' - | 'getAllMigrations' - | 'getStateTransfer' - | 'telemetry' - | 'extract' - | 'inject' ->; diff --git a/src/plugins/dashboard/public/services/http/http.stub.ts b/src/plugins/dashboard/public/services/http/http.stub.ts deleted file mode 100644 index f66ffa40e109..000000000000 --- a/src/plugins/dashboard/public/services/http/http.stub.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { coreMock } from '@kbn/core/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardHTTPService } from './types'; - -type HttpServiceFactory = PluginServiceFactory; - -export const httpServiceFactory: HttpServiceFactory = () => { - const serviceMock = coreMock.createStart(); - - return { - basePath: serviceMock.http.basePath, - get: serviceMock.http.get, - }; -}; diff --git a/src/plugins/dashboard/public/services/http/http_service.ts b/src/plugins/dashboard/public/services/http/http_service.ts deleted file mode 100644 index d06b7d718153..000000000000 --- a/src/plugins/dashboard/public/services/http/http_service.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardHTTPService } from './types'; - -export type HttpServiceFactory = KibanaPluginServiceFactory< - DashboardHTTPService, - DashboardStartDependencies ->; -export const httpServiceFactory: HttpServiceFactory = ({ coreStart }) => { - const { - http: { basePath, get }, - } = coreStart; - - return { - basePath, - get, - }; -}; diff --git a/src/plugins/dashboard/public/services/http/types.ts b/src/plugins/dashboard/public/services/http/types.ts deleted file mode 100644 index 532d9bb907f9..000000000000 --- a/src/plugins/dashboard/public/services/http/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardHTTPService { - basePath: CoreStart['http']['basePath']; - get: CoreStart['http']['get']; -} diff --git a/src/plugins/dashboard/public/services/i18n/i18n_service.ts b/src/plugins/dashboard/public/services/i18n/i18n_service.ts deleted file mode 100644 index e0ef2a3e3613..000000000000 --- a/src/plugins/dashboard/public/services/i18n/i18n_service.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardI18nService } from './types'; - -export type I18nServiceFactory = KibanaPluginServiceFactory< - DashboardI18nService, - DashboardStartDependencies ->; -export const i18nServiceFactory: I18nServiceFactory = ({ coreStart }) => { - const { i18n } = coreStart; - - return i18n; -}; diff --git a/src/plugins/dashboard/public/services/i18n/types.ts b/src/plugins/dashboard/public/services/i18n/types.ts deleted file mode 100644 index 353ceab07203..000000000000 --- a/src/plugins/dashboard/public/services/i18n/types.ts +++ /dev/null @@ -1,12 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export type DashboardI18nService = CoreStart['i18n']; diff --git a/src/plugins/dashboard/public/services/initializer_context/initializer_context.stub.ts b/src/plugins/dashboard/public/services/initializer_context/initializer_context.stub.ts deleted file mode 100644 index 9296d6cba94e..000000000000 --- a/src/plugins/dashboard/public/services/initializer_context/initializer_context.stub.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardInitializerContextService } from './types'; - -const defaultDashboardInitializerContext: DashboardInitializerContextService = { - kibanaVersion: 'test.kibana.version', - allowByValueEmbeddables: true, -}; - -type InitializerContextServiceFactory = PluginServiceFactory; - -export const initializerContextServiceFactory: InitializerContextServiceFactory = () => { - return { - ...defaultDashboardInitializerContext, - }; -}; diff --git a/src/plugins/dashboard/public/services/initializer_context/initializer_context_service.ts b/src/plugins/dashboard/public/services/initializer_context/initializer_context_service.ts deleted file mode 100644 index 90b4ad2f953e..000000000000 --- a/src/plugins/dashboard/public/services/initializer_context/initializer_context_service.ts +++ /dev/null @@ -1,32 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { DashboardFeatureFlagConfig } from '../..'; -import { DashboardPluginServiceParams } from '../types'; -import { DashboardInitializerContextService } from './types'; - -export type InitializerContextServiceFactory = ( - params: DashboardPluginServiceParams -) => DashboardInitializerContextService; - -export const initializerContextServiceFactory: InitializerContextServiceFactory = ({ - initContext, -}) => { - const { - env: { - packageInfo: { version }, - }, - config: { get }, - } = initContext; - - return { - kibanaVersion: version, - allowByValueEmbeddables: get().allowByValueEmbeddables, - }; -}; diff --git a/src/plugins/dashboard/public/services/initializer_context/types.ts b/src/plugins/dashboard/public/services/initializer_context/types.ts deleted file mode 100644 index cd8ea8cd41e0..000000000000 --- a/src/plugins/dashboard/public/services/initializer_context/types.ts +++ /dev/null @@ -1,13 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -export interface DashboardInitializerContextService { - kibanaVersion: string; - allowByValueEmbeddables: boolean; -} diff --git a/src/plugins/dashboard/public/services/kibana_services.ts b/src/plugins/dashboard/public/services/kibana_services.ts new file mode 100644 index 000000000000..e8b164d47b41 --- /dev/null +++ b/src/plugins/dashboard/public/services/kibana_services.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { BehaviorSubject } from 'rxjs'; + +import type { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; +import type { CoreStart } from '@kbn/core/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataViewEditorStart } from '@kbn/data-view-editor-plugin/public'; +import type { EmbeddableStart } from '@kbn/embeddable-plugin/public/plugin'; +import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public/plugin'; +import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; +import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; +import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; +import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; +import type { SavedObjectTaggingOssPluginStart } from '@kbn/saved-objects-tagging-oss-plugin/public'; +import type { ScreenshotModePluginStart } from '@kbn/screenshot-mode-plugin/public'; +import type { ServerlessPluginStart } from '@kbn/serverless/public'; +import type { SharePluginStart } from '@kbn/share-plugin/public'; +import type { SpacesApi } from '@kbn/spaces-plugin/public'; +import type { UiActionsPublicStart } from '@kbn/ui-actions-plugin/public/plugin'; +import type { UrlForwardingStart } from '@kbn/url-forwarding-plugin/public'; +import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; +import type { VisualizationsStart } from '@kbn/visualizations-plugin/public'; + +import type { DashboardStartDependencies } from '../plugin'; + +export let coreServices: CoreStart; +export let contentManagementService: ContentManagementPublicStart; +export let dataService: DataPublicPluginStart; +export let dataViewEditorService: DataViewEditorStart; +export let embeddableService: EmbeddableStart; +export let fieldFormatService: FieldFormatsStart; +export let navigationService: NavigationPublicPluginStart; +export let noDataPageService: NoDataPagePluginStart | undefined; +export let observabilityAssistantService: ObservabilityAIAssistantPublicStart | undefined; +export let presentationUtilService: PresentationUtilPluginStart; +export let savedObjectsTaggingService: SavedObjectTaggingOssPluginStart | undefined; +export let screenshotModeService: ScreenshotModePluginStart; +export let serverlessService: ServerlessPluginStart | undefined; +export let shareService: SharePluginStart | undefined; +export let spacesService: SpacesApi | undefined; +export let uiActionsService: UiActionsPublicStart; +export let urlForwardingService: UrlForwardingStart; +export let usageCollectionService: UsageCollectionStart | undefined; +export let visualizationsService: VisualizationsStart; + +const servicesReady$ = new BehaviorSubject(false); + +export const setKibanaServices = (kibanaCore: CoreStart, deps: DashboardStartDependencies) => { + coreServices = kibanaCore; + contentManagementService = deps.contentManagement; + dataService = deps.data; + dataViewEditorService = deps.dataViewEditor; + embeddableService = deps.embeddable; + fieldFormatService = deps.fieldFormats; + navigationService = deps.navigation; + noDataPageService = deps.noDataPage; + observabilityAssistantService = deps.observabilityAIAssistant; + presentationUtilService = deps.presentationUtil; + savedObjectsTaggingService = deps.savedObjectsTaggingOss; + serverlessService = deps.serverless; + screenshotModeService = deps.screenshotMode; + shareService = deps.share; + spacesService = deps.spaces; + uiActionsService = deps.uiActions; + urlForwardingService = deps.urlForwarding; + usageCollectionService = deps.usageCollection; + visualizationsService = deps.visualizations; + + servicesReady$.next(true); +}; + +export const untilPluginStartServicesReady = () => { + if (servicesReady$.value) return Promise.resolve(); + return new Promise((resolve) => { + const subscription = servicesReady$.subscribe((isInitialized) => { + if (isInitialized) { + subscription.unsubscribe(); + resolve(); + } + }); + }); +}; diff --git a/src/plugins/dashboard/public/services/mocks.ts b/src/plugins/dashboard/public/services/mocks.ts index a4126962432c..61132c2fc264 100644 --- a/src/plugins/dashboard/public/services/mocks.ts +++ b/src/plugins/dashboard/public/services/mocks.ts @@ -7,11 +7,148 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { pluginServices } from './plugin_services'; -import { registry } from './plugin_services.stub'; +import { serverlessMock } from '@kbn/serverless/public/mocks'; +import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; +import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; +import { usageCollectionPluginMock } from '@kbn/usage-collection-plugin/public/mocks'; +import { coreMock } from '@kbn/core/public/mocks'; +import { contentManagementMock } from '@kbn/content-management-plugin/public/mocks'; +import { customBrandingServiceMock } from '@kbn/core-custom-branding-browser-mocks'; +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks'; +import { fieldFormatsServiceMock } from '@kbn/field-formats-plugin/public/mocks'; +import { indexPatternEditorPluginMock } from '@kbn/data-view-editor-plugin/public/mocks'; +import { inspectorPluginMock } from '@kbn/inspector-plugin/public/mocks'; +import { navigationPluginMock } from '@kbn/navigation-plugin/public/mocks'; +import { noDataPagePublicMock } from '@kbn/no-data-page-plugin/public/mocks'; +import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; +import { presentationUtilPluginMock } from '@kbn/presentation-util-plugin/public/mocks'; +import { savedObjectsManagementPluginMock } from '@kbn/saved-objects-management-plugin/public/mocks'; +import { screenshotModePluginMock } from '@kbn/screenshot-mode-plugin/public/mocks'; +import { savedObjectTaggingOssPluginMock } from '@kbn/saved-objects-tagging-oss-plugin/public/mocks'; +import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; +import { unifiedSearchPluginMock } from '@kbn/unified-search-plugin/public/mocks'; +import { urlForwardingPluginMock } from '@kbn/url-forwarding-plugin/public/mocks'; +import { visualizationsPluginMock } from '@kbn/visualizations-plugin/public/mocks'; -export function setStubDashboardServices() { - pluginServices.setRegistry(registry.start({})); -} +import { setKibanaServices } from './kibana_services'; +import { DashboardAttributes, DashboardCapabilities } from '../../common'; +import { LoadDashboardReturn } from './dashboard_content_management_service/types'; +import { SearchDashboardsResponse } from './dashboard_content_management_service/lib/find_dashboards'; -setStubDashboardServices(); +const defaultDashboardCapabilities: DashboardCapabilities = { + show: true, + createNew: true, + saveQuery: true, + createShortUrl: true, + showWriteControls: true, + storeSearchSession: true, +}; + +export const setStubKibanaServices = () => { + const core = coreMock.createStart(); + (core.application.capabilities as any).dashboard = defaultDashboardCapabilities; + + setKibanaServices(core, { + contentManagement: contentManagementMock.createStartContract(), + customBranding: customBrandingServiceMock.createStartContract(), + data: dataPluginMock.createStartContract(), + dataViewEditor: indexPatternEditorPluginMock.createStartContract(), + embeddable: embeddablePluginMock.createStartContract(), + fieldFormats: fieldFormatsServiceMock.createStartContract(), + inspector: inspectorPluginMock.createStartContract(), + navigation: navigationPluginMock.createStartContract(), + noDataPage: noDataPagePublicMock.createStart(), + observabilityAIAssistant: observabilityAIAssistantPluginMock.createStartContract(), + presentationUtil: presentationUtilPluginMock.createStartContract(core), + savedObjectsManagement: savedObjectsManagementPluginMock.createStartContract(), + savedObjectsTaggingOss: savedObjectTaggingOssPluginMock.createStart(), + screenshotMode: screenshotModePluginMock.createStartContract(), + serverless: serverlessMock.createStart(), + share: sharePluginMock.createStartContract(), + spaces: spacesPluginMock.createStartContract(), + uiActions: uiActionsPluginMock.createStartContract(), + unifiedSearch: unifiedSearchPluginMock.createStartContract(), + urlForwarding: urlForwardingPluginMock.createStartContract(), + usageCollection: usageCollectionPluginMock.createSetupContract(), + visualizations: visualizationsPluginMock.createStartContract(), + }); +}; + +export const mockDashboardContentManagementService = { + loadDashboardState: jest.fn().mockImplementation(() => + Promise.resolve({ + dashboardInput: {}, + } as LoadDashboardReturn) + ), + saveDashboardState: jest.fn(), + findDashboards: { + search: jest.fn().mockImplementation(({ search, size }) => { + const sizeToUse = size ?? 10; + const hits: SearchDashboardsResponse['hits'] = []; + for (let i = 0; i < sizeToUse; i++) { + hits.push({ + type: 'dashboard', + id: `dashboard${i}`, + attributes: { + description: `dashboard${i} desc`, + title: `dashboard${i} - ${search} - title`, + }, + references: [] as SearchDashboardsResponse['hits'][0]['references'], + } as SearchDashboardsResponse['hits'][0]); + } + return Promise.resolve({ + total: sizeToUse, + hits, + }); + }), + findById: jest.fn(), + findByIds: jest.fn().mockImplementation(() => + Promise.resolve([ + { + id: `dashboardUnsavedOne`, + status: 'success', + attributes: { + title: `Dashboard Unsaved One`, + } as unknown as DashboardAttributes, + }, + { + id: `dashboardUnsavedTwo`, + status: 'success', + attributes: { + title: `Dashboard Unsaved Two`, + } as unknown as DashboardAttributes, + }, + { + id: `dashboardUnsavedThree`, + status: 'success', + attributes: { + title: `Dashboard Unsaved Three`, + } as unknown as DashboardAttributes, + }, + ]) + ), + findByTitle: jest.fn(), + }, + deleteDashboards: jest.fn(), + checkForDuplicateDashboardTitle: jest.fn(), + updateDashboardMeta: jest.fn(), +}; + +export const mockDashboardBackupService = { + clearState: jest.fn(), + getState: jest.fn().mockReturnValue(undefined), + setState: jest.fn(), + getViewMode: jest.fn(), + storeViewMode: jest.fn(), + getDashboardIdsWithUnsavedChanges: jest + .fn() + .mockReturnValue(['dashboardUnsavedOne', 'dashboardUnsavedTwo']), + dashboardHasUnsavedEdits: jest.fn(), +}; + +export const mockDashboardContentManagementCache = { + fetchDashboard: jest.fn(), + addDashboard: jest.fn(), + deleteDashboard: jest.fn(), +}; diff --git a/src/plugins/dashboard/public/services/navigation/navigation.stub.ts b/src/plugins/dashboard/public/services/navigation/navigation.stub.ts deleted file mode 100644 index 81b5c0734574..000000000000 --- a/src/plugins/dashboard/public/services/navigation/navigation.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { navigationPluginMock } from '@kbn/navigation-plugin/public/mocks'; -import { DashboardNavigationService } from './types'; - -type NavigationServiceFactory = PluginServiceFactory; - -export const navigationServiceFactory: NavigationServiceFactory = () => { - const pluginMock = navigationPluginMock.createStartContract(); - - return { - TopNavMenu: pluginMock.ui.TopNavMenu, - }; -}; diff --git a/src/plugins/dashboard/public/services/navigation/navigation_service.ts b/src/plugins/dashboard/public/services/navigation/navigation_service.ts deleted file mode 100644 index 7bb3f97220fc..000000000000 --- a/src/plugins/dashboard/public/services/navigation/navigation_service.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardNavigationService } from './types'; - -export type NavigationServiceFactory = KibanaPluginServiceFactory< - DashboardNavigationService, - DashboardStartDependencies ->; -export const navigationServiceFactory: NavigationServiceFactory = ({ startPlugins }) => { - const { - navigation: { - ui: { TopNavMenu }, - }, - } = startPlugins; - - return { - TopNavMenu, - }; -}; diff --git a/src/plugins/dashboard/public/services/navigation/types.ts b/src/plugins/dashboard/public/services/navigation/types.ts deleted file mode 100644 index e407e8e77b76..000000000000 --- a/src/plugins/dashboard/public/services/navigation/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; - -export interface DashboardNavigationService { - TopNavMenu: NavigationPublicPluginStart['ui']['TopNavMenu']; -} diff --git a/src/plugins/dashboard/public/services/no_data_page/no_data_page_service.stub.ts b/src/plugins/dashboard/public/services/no_data_page/no_data_page_service.stub.ts deleted file mode 100644 index 6797d5ef9e7d..000000000000 --- a/src/plugins/dashboard/public/services/no_data_page/no_data_page_service.stub.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { noDataPagePublicMock } from '@kbn/no-data-page-plugin/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { NoDataPageService } from './types'; - -export type NoDataPageServiceFactory = PluginServiceFactory; - -export const noDataPageServiceFactory: NoDataPageServiceFactory = () => - noDataPagePublicMock.createSetup(); diff --git a/src/plugins/dashboard/public/services/no_data_page/no_data_page_service.ts b/src/plugins/dashboard/public/services/no_data_page/no_data_page_service.ts deleted file mode 100644 index 13000ca2cddd..000000000000 --- a/src/plugins/dashboard/public/services/no_data_page/no_data_page_service.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; -import { NoDataPageService } from './types'; - -export type NoDataPageServiceFactory = KibanaPluginServiceFactory< - NoDataPageService, - DashboardStartDependencies ->; - -export const noDataPageServiceFactory: NoDataPageServiceFactory = ({ startPlugins }) => { - const { noDataPage } = startPlugins; - - return { - getAnalyticsNoDataPageFlavor: noDataPage?.getAnalyticsNoDataPageFlavor ?? (() => 'kibana'), - }; -}; diff --git a/src/plugins/dashboard/public/services/no_data_page/types.ts b/src/plugins/dashboard/public/services/no_data_page/types.ts deleted file mode 100644 index 81700402db72..000000000000 --- a/src/plugins/dashboard/public/services/no_data_page/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; - -export interface NoDataPageService { - getAnalyticsNoDataPageFlavor: NoDataPagePluginStart['getAnalyticsNoDataPageFlavor']; -} diff --git a/src/plugins/dashboard/public/services/notifications/notifications.stub.ts b/src/plugins/dashboard/public/services/notifications/notifications.stub.ts deleted file mode 100644 index 0be8056dd604..000000000000 --- a/src/plugins/dashboard/public/services/notifications/notifications.stub.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardNotificationsService } from './types'; - -type NotificationsServiceFactory = PluginServiceFactory; - -export const notificationsServiceFactory: NotificationsServiceFactory = () => { - const pluginMock = notificationServiceMock.createStartContract(); - - return { - toasts: pluginMock.toasts, - showErrorDialog: pluginMock.showErrorDialog, - }; -}; diff --git a/src/plugins/dashboard/public/services/notifications/notifications_service.ts b/src/plugins/dashboard/public/services/notifications/notifications_service.ts deleted file mode 100644 index c2acd0289149..000000000000 --- a/src/plugins/dashboard/public/services/notifications/notifications_service.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardNotificationsService } from './types'; - -export type NotificationsServiceFactory = KibanaPluginServiceFactory< - DashboardNotificationsService, - DashboardStartDependencies ->; - -export const notificationsServiceFactory: NotificationsServiceFactory = ({ coreStart }) => { - const { - notifications: { toasts, showErrorDialog }, - } = coreStart; - - return { - toasts, - showErrorDialog, - }; -}; diff --git a/src/plugins/dashboard/public/services/notifications/types.ts b/src/plugins/dashboard/public/services/notifications/types.ts deleted file mode 100644 index f31420238f17..000000000000 --- a/src/plugins/dashboard/public/services/notifications/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardNotificationsService { - toasts: CoreStart['notifications']['toasts']; - showErrorDialog: CoreStart['notifications']['showErrorDialog']; -} diff --git a/src/plugins/dashboard/public/services/observability_ai_assistant/observability_ai_assistant_service.stub.ts b/src/plugins/dashboard/public/services/observability_ai_assistant/observability_ai_assistant_service.stub.ts deleted file mode 100644 index d33491f0024f..000000000000 --- a/src/plugins/dashboard/public/services/observability_ai_assistant/observability_ai_assistant_service.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { observabilityAIAssistantPluginMock } from '@kbn/observability-ai-assistant-plugin/public/mock'; -import { ObservabilityAIAssistantService } from './types'; - -type ObservabilityAIAssistantServiceFactory = PluginServiceFactory; - -export const observabilityAIAssistantServiceStubFactory: ObservabilityAIAssistantServiceFactory = - () => { - const pluginMock = observabilityAIAssistantPluginMock.createStartContract(); - return { - start: pluginMock, - }; - }; diff --git a/src/plugins/dashboard/public/services/observability_ai_assistant/observability_ai_assistant_service.ts b/src/plugins/dashboard/public/services/observability_ai_assistant/observability_ai_assistant_service.ts deleted file mode 100644 index 5b3b08f148f1..000000000000 --- a/src/plugins/dashboard/public/services/observability_ai_assistant/observability_ai_assistant_service.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { ObservabilityAIAssistantService } from './types'; - -export type ObservabilityAIAssistantServiceFactory = KibanaPluginServiceFactory< - ObservabilityAIAssistantService, - DashboardStartDependencies ->; -export const observabilityAIAssistantServiceFactory: ObservabilityAIAssistantServiceFactory = ({ - startPlugins, -}) => { - return startPlugins.observabilityAIAssistant - ? { start: startPlugins.observabilityAIAssistant } - : {}; -}; diff --git a/src/plugins/dashboard/public/services/observability_ai_assistant/types.ts b/src/plugins/dashboard/public/services/observability_ai_assistant/types.ts deleted file mode 100644 index 6cb252910219..000000000000 --- a/src/plugins/dashboard/public/services/observability_ai_assistant/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; - -export interface ObservabilityAIAssistantService { - start?: ObservabilityAIAssistantPublicStart; -} diff --git a/src/plugins/dashboard/public/services/overlays/overlays.stub.ts b/src/plugins/dashboard/public/services/overlays/overlays.stub.ts deleted file mode 100644 index 0fc7d90fa13f..000000000000 --- a/src/plugins/dashboard/public/services/overlays/overlays.stub.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { overlayServiceMock } from '@kbn/core-overlays-browser-mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardOverlaysService } from './types'; - -type OverlaysServiceFactory = PluginServiceFactory; - -export const overlaysServiceFactory: OverlaysServiceFactory = () => { - const pluginMock = overlayServiceMock.createStartContract(); - - return { - banners: pluginMock.banners, - openConfirm: pluginMock.openConfirm, - openFlyout: pluginMock.openFlyout, - openModal: pluginMock.openModal, - }; -}; diff --git a/src/plugins/dashboard/public/services/overlays/overlays_service.ts b/src/plugins/dashboard/public/services/overlays/overlays_service.ts deleted file mode 100644 index aca127b11669..000000000000 --- a/src/plugins/dashboard/public/services/overlays/overlays_service.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardOverlaysService } from './types'; - -export type OverlaysServiceFactory = KibanaPluginServiceFactory< - DashboardOverlaysService, - DashboardStartDependencies ->; - -export const overlaysServiceFactory: OverlaysServiceFactory = ({ coreStart }) => { - const { - overlays: { banners, openConfirm, openFlyout, openModal }, - } = coreStart; - - return { - banners, - openConfirm, - openFlyout, - openModal, - }; -}; diff --git a/src/plugins/dashboard/public/services/overlays/types.ts b/src/plugins/dashboard/public/services/overlays/types.ts deleted file mode 100644 index f2a2dd8feb50..000000000000 --- a/src/plugins/dashboard/public/services/overlays/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardOverlaysService { - banners: CoreStart['overlays']['banners']; - openConfirm: CoreStart['overlays']['openConfirm']; - openFlyout: CoreStart['overlays']['openFlyout']; - openModal: CoreStart['overlays']['openModal']; -} diff --git a/src/plugins/dashboard/public/services/plugin_services.stub.ts b/src/plugins/dashboard/public/services/plugin_services.stub.ts deleted file mode 100644 index a9334c001c2c..000000000000 --- a/src/plugins/dashboard/public/services/plugin_services.stub.ts +++ /dev/null @@ -1,94 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { - PluginServiceProviders, - PluginServiceProvider, - PluginServiceRegistry, -} from '@kbn/presentation-util-plugin/public'; - -import { DashboardServices } from './types'; - -import { analyticsServiceFactory } from './analytics/analytics.stub'; -import { applicationServiceFactory } from './application/application.stub'; -import { chromeServiceFactory } from './chrome/chrome.stub'; -import { coreContextServiceFactory } from './core_context/core_context.stub'; -import { dashboardCapabilitiesServiceFactory } from './dashboard_capabilities/dashboard_capabilities.stub'; -import { dashboardBackupServiceFactory } from './dashboard_backup/dashboard_backup.stub'; -import { dataServiceFactory } from './data/data.stub'; -import { dataViewEditorServiceFactory } from './data_view_editor/data_view_editor.stub'; -import { documentationLinksServiceFactory } from './documentation_links/documentation_links.stub'; -import { embeddableServiceFactory } from './embeddable/embeddable.stub'; -import { httpServiceFactory } from './http/http.stub'; -import { i18nServiceFactory } from './i18n/i18n.stub'; -import { initializerContextServiceFactory } from './initializer_context/initializer_context.stub'; -import { navigationServiceFactory } from './navigation/navigation.stub'; -import { notificationsServiceFactory } from './notifications/notifications.stub'; -import { overlaysServiceFactory } from './overlays/overlays.stub'; -import { savedObjectsTaggingServiceFactory } from './saved_objects_tagging/saved_objects_tagging.stub'; -import { screenshotModeServiceFactory } from './screenshot_mode/screenshot_mode.stub'; -import { settingsServiceFactory } from './settings/settings.stub'; -import { shareServiceFactory } from './share/share.stub'; -import { usageCollectionServiceFactory } from './usage_collection/usage_collection.stub'; -import { spacesServiceFactory } from './spaces/spaces.stub'; -import { urlForwardingServiceFactory } from './url_forwarding/url_fowarding.stub'; -import { visualizationsServiceFactory } from './visualizations/visualizations.stub'; -import { dashboardContentManagementServiceFactory } from './dashboard_content_management/dashboard_content_management.stub'; -import { customBrandingServiceFactory } from './custom_branding/custom_branding.stub'; -import { savedObjectsManagementServiceFactory } from './saved_objects_management/saved_objects_management_service.stub'; -import { contentManagementServiceFactory } from './content_management/content_management_service.stub'; -import { serverlessServiceFactory } from './serverless/serverless_service.stub'; -import { userProfileServiceFactory } from './user_profile/user_profile_service.stub'; -import { observabilityAIAssistantServiceStubFactory } from './observability_ai_assistant/observability_ai_assistant_service.stub'; -import { noDataPageServiceFactory } from './no_data_page/no_data_page_service.stub'; -import { uiActionsServiceFactory } from './ui_actions/ui_actions_service.stub'; -import { dashboardRecentlyAccessedServiceFactory } from './dashboard_recently_accessed/dashboard_recently_accessed.stub'; -import { dashboardFavoritesServiceFactory } from './dashboard_favorites/dashboard_favorites_service.stub'; -import { dashboardContentInsightsServiceFactory } from './dashboard_content_insights/dashboard_content_insights.stub'; - -export const providers: PluginServiceProviders = { - dashboardContentManagement: new PluginServiceProvider(dashboardContentManagementServiceFactory), - analytics: new PluginServiceProvider(analyticsServiceFactory), - application: new PluginServiceProvider(applicationServiceFactory), - chrome: new PluginServiceProvider(chromeServiceFactory), - coreContext: new PluginServiceProvider(coreContextServiceFactory), - dashboardCapabilities: new PluginServiceProvider(dashboardCapabilitiesServiceFactory), - dashboardBackup: new PluginServiceProvider(dashboardBackupServiceFactory), - data: new PluginServiceProvider(dataServiceFactory), - dataViewEditor: new PluginServiceProvider(dataViewEditorServiceFactory), - documentationLinks: new PluginServiceProvider(documentationLinksServiceFactory), - embeddable: new PluginServiceProvider(embeddableServiceFactory), - http: new PluginServiceProvider(httpServiceFactory), - i18n: new PluginServiceProvider(i18nServiceFactory), - initializerContext: new PluginServiceProvider(initializerContextServiceFactory), - navigation: new PluginServiceProvider(navigationServiceFactory), - notifications: new PluginServiceProvider(notificationsServiceFactory), - overlays: new PluginServiceProvider(overlaysServiceFactory), - savedObjectsTagging: new PluginServiceProvider(savedObjectsTaggingServiceFactory), - screenshotMode: new PluginServiceProvider(screenshotModeServiceFactory), - settings: new PluginServiceProvider(settingsServiceFactory), - share: new PluginServiceProvider(shareServiceFactory), - spaces: new PluginServiceProvider(spacesServiceFactory), - urlForwarding: new PluginServiceProvider(urlForwardingServiceFactory), - usageCollection: new PluginServiceProvider(usageCollectionServiceFactory), - visualizations: new PluginServiceProvider(visualizationsServiceFactory), - customBranding: new PluginServiceProvider(customBrandingServiceFactory), - savedObjectsManagement: new PluginServiceProvider(savedObjectsManagementServiceFactory), - contentManagement: new PluginServiceProvider(contentManagementServiceFactory), - serverless: new PluginServiceProvider(serverlessServiceFactory), - noDataPage: new PluginServiceProvider(noDataPageServiceFactory), - uiActions: new PluginServiceProvider(uiActionsServiceFactory), - userProfile: new PluginServiceProvider(userProfileServiceFactory), - observabilityAIAssistant: new PluginServiceProvider(observabilityAIAssistantServiceStubFactory), - dashboardRecentlyAccessed: new PluginServiceProvider(dashboardRecentlyAccessedServiceFactory), - dashboardContentInsights: new PluginServiceProvider(dashboardContentInsightsServiceFactory), - dashboardFavorites: new PluginServiceProvider(dashboardFavoritesServiceFactory), -}; - -export const registry = new PluginServiceRegistry(providers); diff --git a/src/plugins/dashboard/public/services/plugin_services.ts b/src/plugins/dashboard/public/services/plugin_services.ts deleted file mode 100644 index a3b826bfe563..000000000000 --- a/src/plugins/dashboard/public/services/plugin_services.ts +++ /dev/null @@ -1,112 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { - PluginServiceProviders, - PluginServiceProvider, - PluginServiceRegistry, - PluginServices, -} from '@kbn/presentation-util-plugin/public'; - -import { DashboardPluginServiceParams, DashboardServices } from './types'; - -import { applicationServiceFactory } from './application/application_service'; -import { chromeServiceFactory } from './chrome/chrome_service'; -import { coreContextServiceFactory } from './core_context/core_context_service'; -import { dashboardCapabilitiesServiceFactory } from './dashboard_capabilities/dashboard_capabilities_service'; -import { dashboardBackupServiceFactory } from './dashboard_backup/dashboard_backup_service'; -import { dataServiceFactory } from './data/data_service'; -import { dataViewEditorServiceFactory } from './data_view_editor/data_view_editor_service'; -import { documentationLinksServiceFactory } from './documentation_links/documentation_links_service'; -import { embeddableServiceFactory } from './embeddable/embeddable_service'; -import { httpServiceFactory } from './http/http_service'; -import { i18nServiceFactory } from './i18n/i18n_service'; -import { initializerContextServiceFactory } from './initializer_context/initializer_context_service'; -import { navigationServiceFactory } from './navigation/navigation_service'; -import { notificationsServiceFactory } from './notifications/notifications_service'; -import { overlaysServiceFactory } from './overlays/overlays_service'; -import { screenshotModeServiceFactory } from './screenshot_mode/screenshot_mode_service'; -import { savedObjectsTaggingServiceFactory } from './saved_objects_tagging/saved_objects_tagging_service'; -import { settingsServiceFactory } from './settings/settings_service'; -import { shareServiceFactory } from './share/share_services'; -import { spacesServiceFactory } from './spaces/spaces_service'; -import { urlForwardingServiceFactory } from './url_forwarding/url_forwarding_service'; -import { visualizationsServiceFactory } from './visualizations/visualizations_service'; -import { usageCollectionServiceFactory } from './usage_collection/usage_collection_service'; -import { analyticsServiceFactory } from './analytics/analytics_service'; -import { customBrandingServiceFactory } from './custom_branding/custom_branding_service'; -import { savedObjectsManagementServiceFactory } from './saved_objects_management/saved_objects_management_service'; -import { dashboardContentManagementServiceFactory } from './dashboard_content_management/dashboard_content_management_service'; -import { contentManagementServiceFactory } from './content_management/content_management_service'; -import { serverlessServiceFactory } from './serverless/serverless_service'; -import { noDataPageServiceFactory } from './no_data_page/no_data_page_service'; -import { uiActionsServiceFactory } from './ui_actions/ui_actions_service'; -import { observabilityAIAssistantServiceFactory } from './observability_ai_assistant/observability_ai_assistant_service'; -import { userProfileServiceFactory } from './user_profile/user_profile_service'; -import { dashboardRecentlyAccessedFactory } from './dashboard_recently_accessed/dashboard_recently_accessed'; -import { dashboardFavoritesServiceFactory } from './dashboard_favorites/dashboard_favorites_service'; -import { dashboardContentInsightsServiceFactory } from './dashboard_content_insights/dashboard_content_insights_service'; - -const providers: PluginServiceProviders = { - dashboardContentManagement: new PluginServiceProvider(dashboardContentManagementServiceFactory, [ - 'savedObjectsTagging', - 'initializerContext', - 'dashboardBackup', - 'screenshotMode', - 'notifications', - 'embeddable', - 'spaces', - 'data', - ]), - dashboardBackup: new PluginServiceProvider(dashboardBackupServiceFactory, [ - 'notifications', - 'spaces', - ]), - - analytics: new PluginServiceProvider(analyticsServiceFactory), - application: new PluginServiceProvider(applicationServiceFactory), - chrome: new PluginServiceProvider(chromeServiceFactory), - coreContext: new PluginServiceProvider(coreContextServiceFactory), - dashboardCapabilities: new PluginServiceProvider(dashboardCapabilitiesServiceFactory), - data: new PluginServiceProvider(dataServiceFactory), - dataViewEditor: new PluginServiceProvider(dataViewEditorServiceFactory), - documentationLinks: new PluginServiceProvider(documentationLinksServiceFactory), - embeddable: new PluginServiceProvider(embeddableServiceFactory), - http: new PluginServiceProvider(httpServiceFactory), - i18n: new PluginServiceProvider(i18nServiceFactory), - initializerContext: new PluginServiceProvider(initializerContextServiceFactory), - navigation: new PluginServiceProvider(navigationServiceFactory), - notifications: new PluginServiceProvider(notificationsServiceFactory), - overlays: new PluginServiceProvider(overlaysServiceFactory), - savedObjectsTagging: new PluginServiceProvider(savedObjectsTaggingServiceFactory), - screenshotMode: new PluginServiceProvider(screenshotModeServiceFactory), - settings: new PluginServiceProvider(settingsServiceFactory), - share: new PluginServiceProvider(shareServiceFactory), - spaces: new PluginServiceProvider(spacesServiceFactory), - urlForwarding: new PluginServiceProvider(urlForwardingServiceFactory), - usageCollection: new PluginServiceProvider(usageCollectionServiceFactory), - visualizations: new PluginServiceProvider(visualizationsServiceFactory), - customBranding: new PluginServiceProvider(customBrandingServiceFactory), - savedObjectsManagement: new PluginServiceProvider(savedObjectsManagementServiceFactory), - contentManagement: new PluginServiceProvider(contentManagementServiceFactory), - serverless: new PluginServiceProvider(serverlessServiceFactory), - noDataPage: new PluginServiceProvider(noDataPageServiceFactory), - uiActions: new PluginServiceProvider(uiActionsServiceFactory), - observabilityAIAssistant: new PluginServiceProvider(observabilityAIAssistantServiceFactory), - userProfile: new PluginServiceProvider(userProfileServiceFactory), - dashboardRecentlyAccessed: new PluginServiceProvider(dashboardRecentlyAccessedFactory, ['http']), - dashboardContentInsights: new PluginServiceProvider(dashboardContentInsightsServiceFactory), - dashboardFavorites: new PluginServiceProvider(dashboardFavoritesServiceFactory), -}; - -export const pluginServices = new PluginServices(); - -export const registry = new PluginServiceRegistry( - providers -); diff --git a/src/plugins/dashboard/public/services/saved_objects_management/saved_objects_management_service.stub.ts b/src/plugins/dashboard/public/services/saved_objects_management/saved_objects_management_service.stub.ts deleted file mode 100644 index 085387b25eaf..000000000000 --- a/src/plugins/dashboard/public/services/saved_objects_management/saved_objects_management_service.stub.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; -import { savedObjectsManagementPluginMock } from '@kbn/saved-objects-management-plugin/public/mocks'; - -type SavedObjectsManagementServiceFactory = PluginServiceFactory; - -export const savedObjectsManagementServiceFactory: SavedObjectsManagementServiceFactory = () => { - return savedObjectsManagementPluginMock.createStartContract(); -}; diff --git a/src/plugins/dashboard/public/services/saved_objects_management/saved_objects_management_service.ts b/src/plugins/dashboard/public/services/saved_objects_management/saved_objects_management_service.ts deleted file mode 100644 index 3f471b0f12d4..000000000000 --- a/src/plugins/dashboard/public/services/saved_objects_management/saved_objects_management_service.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; - -export type SavedObjectsManagementServiceFactory = KibanaPluginServiceFactory< - SavedObjectsManagementPluginStart, - DashboardStartDependencies ->; - -export const savedObjectsManagementServiceFactory: SavedObjectsManagementServiceFactory = ({ - startPlugins, -}) => { - const { savedObjectsManagement } = startPlugins; - - return savedObjectsManagement; -}; diff --git a/src/plugins/dashboard/public/services/saved_objects_tagging/saved_objects_tagging.stub.ts b/src/plugins/dashboard/public/services/saved_objects_tagging/saved_objects_tagging.stub.ts deleted file mode 100644 index ed8e4e5486da..000000000000 --- a/src/plugins/dashboard/public/services/saved_objects_tagging/saved_objects_tagging.stub.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { taggingApiMock } from '@kbn/saved-objects-tagging-oss-plugin/public/mocks'; -import { DashboardSavedObjectsTaggingService } from './types'; - -type SavedObjectsTaggingServiceFactory = PluginServiceFactory; - -export const savedObjectsTaggingServiceFactory: SavedObjectsTaggingServiceFactory = () => { - const pluginMock = taggingApiMock.createUi(); - - return { - hasApi: true, - - // I'm not defining components so that I don't have to update the snapshot of `save_modal.test` - // However, if it's ever necessary, it can be done via: `components: pluginMock.components`, - parseSearchQuery: pluginMock.parseSearchQuery, - getSearchBarFilter: pluginMock.getSearchBarFilter, - getTagIdsFromReferences: pluginMock.getTagIdsFromReferences, - getTableColumnDefinition: pluginMock.getTableColumnDefinition, - }; -}; diff --git a/src/plugins/dashboard/public/services/saved_objects_tagging/saved_objects_tagging_service.ts b/src/plugins/dashboard/public/services/saved_objects_tagging/saved_objects_tagging_service.ts deleted file mode 100644 index 4440ee069d2b..000000000000 --- a/src/plugins/dashboard/public/services/saved_objects_tagging/saved_objects_tagging_service.ts +++ /dev/null @@ -1,51 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardSavedObjectsTaggingService } from './types'; - -export type SavedObjectsTaggingServiceFactory = KibanaPluginServiceFactory< - DashboardSavedObjectsTaggingService, - DashboardStartDependencies ->; -export const savedObjectsTaggingServiceFactory: SavedObjectsTaggingServiceFactory = ({ - startPlugins, -}) => { - const { savedObjectsTaggingOss } = startPlugins; - if (!savedObjectsTaggingOss) return { hasApi: false }; - - const { getTaggingApi } = savedObjectsTaggingOss; - const taggingApi = getTaggingApi(); - if (!taggingApi) return { hasApi: false }; - - const { - ui: { - components, - parseSearchQuery, - getSearchBarFilter, - updateTagsReferences, - getTagIdsFromReferences, - getTableColumnDefinition, - getTagList, - }, - } = taggingApi; - - return { - hasApi: true, - api: taggingApi, - components, - parseSearchQuery, - getSearchBarFilter, - updateTagsReferences, - getTagIdsFromReferences, - getTableColumnDefinition, - getTagList, - }; -}; diff --git a/src/plugins/dashboard/public/services/saved_objects_tagging/types.ts b/src/plugins/dashboard/public/services/saved_objects_tagging/types.ts deleted file mode 100644 index f08aa7c6c28f..000000000000 --- a/src/plugins/dashboard/public/services/saved_objects_tagging/types.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { SavedObjectsTaggingApi } from '@kbn/saved-objects-tagging-oss-plugin/public'; - -export interface DashboardSavedObjectsTaggingService { - hasApi: boolean; // remove this once the entire service is optional - api?: SavedObjectsTaggingApi; - components?: SavedObjectsTaggingApi['ui']['components']; - parseSearchQuery?: SavedObjectsTaggingApi['ui']['parseSearchQuery']; - getSearchBarFilter?: SavedObjectsTaggingApi['ui']['getSearchBarFilter']; - updateTagsReferences?: SavedObjectsTaggingApi['ui']['updateTagsReferences']; - getTagIdsFromReferences?: SavedObjectsTaggingApi['ui']['getTagIdsFromReferences']; - getTableColumnDefinition?: SavedObjectsTaggingApi['ui']['getTableColumnDefinition']; - getTagList?: SavedObjectsTaggingApi['ui']['getTagList']; -} diff --git a/src/plugins/dashboard/public/services/screenshot_mode/screenshot_mode.stub.ts b/src/plugins/dashboard/public/services/screenshot_mode/screenshot_mode.stub.ts deleted file mode 100644 index ef7c6760b03f..000000000000 --- a/src/plugins/dashboard/public/services/screenshot_mode/screenshot_mode.stub.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { screenshotModePluginMock } from '@kbn/screenshot-mode-plugin/public/mocks'; -import { DashboardScreenshotModeService } from './types'; - -type ScreenshotModeServiceFactory = PluginServiceFactory; - -export const screenshotModeServiceFactory: ScreenshotModeServiceFactory = () => { - const pluginMock = screenshotModePluginMock.createStartContract(); - - return { - isScreenshotMode: pluginMock.isScreenshotMode, - getScreenshotContext: pluginMock.getScreenshotContext, - }; -}; diff --git a/src/plugins/dashboard/public/services/screenshot_mode/screenshot_mode_service.ts b/src/plugins/dashboard/public/services/screenshot_mode/screenshot_mode_service.ts deleted file mode 100644 index 2e7e160ce93f..000000000000 --- a/src/plugins/dashboard/public/services/screenshot_mode/screenshot_mode_service.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardScreenshotModeService } from './types'; - -export type ScreenshotModeServiceFactory = KibanaPluginServiceFactory< - DashboardScreenshotModeService, - DashboardStartDependencies ->; -export const screenshotModeServiceFactory: ScreenshotModeServiceFactory = ({ startPlugins }) => { - const { - screenshotMode: { isScreenshotMode, getScreenshotContext }, - } = startPlugins; - - return { - isScreenshotMode, - getScreenshotContext, - }; -}; diff --git a/src/plugins/dashboard/public/services/screenshot_mode/types.ts b/src/plugins/dashboard/public/services/screenshot_mode/types.ts deleted file mode 100644 index 464ca9134960..000000000000 --- a/src/plugins/dashboard/public/services/screenshot_mode/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { ScreenshotModePluginStart } from '@kbn/screenshot-mode-plugin/public'; - -export interface DashboardScreenshotModeService { - isScreenshotMode: ScreenshotModePluginStart['isScreenshotMode']; - getScreenshotContext: ScreenshotModePluginStart['getScreenshotContext']; -} diff --git a/src/plugins/dashboard/public/services/serverless/serverless_service.stub.ts b/src/plugins/dashboard/public/services/serverless/serverless_service.stub.ts deleted file mode 100644 index 09b8fea6e9c1..000000000000 --- a/src/plugins/dashboard/public/services/serverless/serverless_service.stub.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardServerlessService } from './types'; - -export type ServerlessServiceFactory = PluginServiceFactory; - -export const serverlessServiceFactory: ServerlessServiceFactory = () => { - return {}; -}; diff --git a/src/plugins/dashboard/public/services/serverless/serverless_service.ts b/src/plugins/dashboard/public/services/serverless/serverless_service.ts deleted file mode 100644 index c9991f1b7cfd..000000000000 --- a/src/plugins/dashboard/public/services/serverless/serverless_service.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardServerlessService } from './types'; - -export type ServerlessServiceFactory = KibanaPluginServiceFactory< - DashboardServerlessService, - DashboardStartDependencies ->; - -export const serverlessServiceFactory: ServerlessServiceFactory = ({ startPlugins }) => { - const { serverless } = startPlugins; - - return { setBreadcrumbs: serverless?.setBreadcrumbs }; -}; diff --git a/src/plugins/dashboard/public/services/serverless/types.ts b/src/plugins/dashboard/public/services/serverless/types.ts deleted file mode 100644 index 8d6223fd0b46..000000000000 --- a/src/plugins/dashboard/public/services/serverless/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { ServerlessPluginStart } from '@kbn/serverless/public'; - -export interface DashboardServerlessService { - setBreadcrumbs?: ServerlessPluginStart['setBreadcrumbs']; -} diff --git a/src/plugins/dashboard/public/services/settings/settings.stub.ts b/src/plugins/dashboard/public/services/settings/settings.stub.ts deleted file mode 100644 index e71f83662aef..000000000000 --- a/src/plugins/dashboard/public/services/settings/settings.stub.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; -import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; -import { DashboardSettingsService } from './types'; - -type SettingsServiceFactory = PluginServiceFactory; - -export const settingsServiceFactory: SettingsServiceFactory = () => { - return { - i18n: i18nServiceMock.createStartContract(), - uiSettings: uiSettingsServiceMock.createStartContract(), - theme: themeServiceMock.createStartContract(), - isProjectEnabledInLabs: jest.fn().mockReturnValue(true), - }; -}; diff --git a/src/plugins/dashboard/public/services/settings/settings_service.ts b/src/plugins/dashboard/public/services/settings/settings_service.ts deleted file mode 100644 index c21a9a4baec0..000000000000 --- a/src/plugins/dashboard/public/services/settings/settings_service.ts +++ /dev/null @@ -1,34 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardSettingsService } from './types'; - -export type SettingsServiceFactory = KibanaPluginServiceFactory< - DashboardSettingsService, - DashboardStartDependencies ->; - -export const settingsServiceFactory: SettingsServiceFactory = ({ coreStart, startPlugins }) => { - const { i18n, uiSettings, theme } = coreStart; - - const { - presentationUtil: { - labsService: { isProjectEnabled }, - }, - } = startPlugins; - - return { - i18n, - uiSettings, - theme, - isProjectEnabledInLabs: isProjectEnabled, - }; -}; diff --git a/src/plugins/dashboard/public/services/settings/types.ts b/src/plugins/dashboard/public/services/settings/types.ts deleted file mode 100644 index 475687988f88..000000000000 --- a/src/plugins/dashboard/public/services/settings/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; -import type { PresentationLabsService } from '@kbn/presentation-util-plugin/public'; - -export interface DashboardSettingsService { - uiSettings: CoreStart['uiSettings']; - i18n: CoreStart['i18n']; - theme: CoreStart['theme']; - isProjectEnabledInLabs: PresentationLabsService['isProjectEnabled']; -} diff --git a/src/plugins/dashboard/public/services/share/share.stub.ts b/src/plugins/dashboard/public/services/share/share.stub.ts deleted file mode 100644 index 3189e7cfd933..000000000000 --- a/src/plugins/dashboard/public/services/share/share.stub.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardShareService } from './types'; - -type ShareServiceFactory = PluginServiceFactory; - -export const shareServiceFactory: ShareServiceFactory = () => { - const pluginMock = sharePluginMock.createStartContract(); - - return { - url: pluginMock.url, - toggleShareContextMenu: pluginMock.toggleShareContextMenu, - }; -}; diff --git a/src/plugins/dashboard/public/services/share/share_services.ts b/src/plugins/dashboard/public/services/share/share_services.ts deleted file mode 100644 index 0e280c9ae807..000000000000 --- a/src/plugins/dashboard/public/services/share/share_services.ts +++ /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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardShareService } from './types'; - -export type ShareServiceFactory = KibanaPluginServiceFactory< - DashboardShareService, - DashboardStartDependencies ->; - -export const shareServiceFactory: ShareServiceFactory = ({ startPlugins }) => { - const { share } = startPlugins; - if (!share) return {}; - - const { toggleShareContextMenu, url } = share; - - return { - url, - toggleShareContextMenu, - }; -}; diff --git a/src/plugins/dashboard/public/services/share/types.ts b/src/plugins/dashboard/public/services/share/types.ts deleted file mode 100644 index 8b21c741c186..000000000000 --- a/src/plugins/dashboard/public/services/share/types.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { SharePluginStart } from '@kbn/share-plugin/public'; - -export interface DashboardShareService { - url?: SharePluginStart['url']; - toggleShareContextMenu?: SharePluginStart['toggleShareContextMenu']; -} diff --git a/src/plugins/dashboard/public/services/spaces/spaces.stub.ts b/src/plugins/dashboard/public/services/spaces/spaces.stub.ts deleted file mode 100644 index 6c85c6158dfe..000000000000 --- a/src/plugins/dashboard/public/services/spaces/spaces.stub.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; -import { DashboardSpacesService } from './types'; - -type SpacesServiceFactory = PluginServiceFactory; - -export const spacesServiceFactory: SpacesServiceFactory = () => { - const pluginMock = spacesPluginMock.createStartContract(); - - return { - getActiveSpace$: pluginMock.getActiveSpace$, - getLegacyUrlConflict: pluginMock.ui.components.getLegacyUrlConflict, - redirectLegacyUrl: pluginMock.ui.redirectLegacyUrl, - }; -}; diff --git a/src/plugins/dashboard/public/services/spaces/spaces_service.ts b/src/plugins/dashboard/public/services/spaces/spaces_service.ts deleted file mode 100644 index 33df8d1db87d..000000000000 --- a/src/plugins/dashboard/public/services/spaces/spaces_service.ts +++ /dev/null @@ -1,34 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardSpacesService } from './types'; - -export type SpacesServiceFactory = KibanaPluginServiceFactory< - DashboardSpacesService, - DashboardStartDependencies ->; -export const spacesServiceFactory: SpacesServiceFactory = ({ startPlugins }) => { - const { spaces } = startPlugins; - if (!spaces || !spaces.ui) return {}; - - const { - getActiveSpace$, - ui: { - components: { getLegacyUrlConflict }, - redirectLegacyUrl, - }, - } = spaces; - return { - getActiveSpace$, - getLegacyUrlConflict, - redirectLegacyUrl, - }; -}; diff --git a/src/plugins/dashboard/public/services/spaces/types.ts b/src/plugins/dashboard/public/services/spaces/types.ts deleted file mode 100644 index 26330e682433..000000000000 --- a/src/plugins/dashboard/public/services/spaces/types.ts +++ /dev/null @@ -1,16 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { SpacesPluginStart } from '@kbn/spaces-plugin/public'; - -export interface DashboardSpacesService { - getActiveSpace$?: SpacesPluginStart['getActiveSpace$']; - getLegacyUrlConflict?: SpacesPluginStart['ui']['components']['getLegacyUrlConflict']; - redirectLegacyUrl?: SpacesPluginStart['ui']['redirectLegacyUrl']; -} diff --git a/src/plugins/dashboard/public/services/types.ts b/src/plugins/dashboard/public/services/types.ts deleted file mode 100644 index abfa5942d7a6..000000000000 --- a/src/plugins/dashboard/public/services/types.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginInitializerContext } from '@kbn/core/public'; -import { KibanaPluginServiceParams } from '@kbn/presentation-util-plugin/public'; -import { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; -import { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; - -import { DashboardStartDependencies } from '../plugin'; -import { DashboardAnalyticsService } from './analytics/types'; -import { DashboardApplicationService } from './application/types'; -import { DashboardChromeService } from './chrome/types'; -import { DashboardCoreContextService } from './core_context/types'; -import { DashboardCustomBrandingService } from './custom_branding/types'; -import { DashboardCapabilitiesService } from './dashboard_capabilities/types'; -import { DashboardContentManagementService } from './dashboard_content_management/types'; -import { DashboardBackupServiceType } from './dashboard_backup/types'; -import { DashboardDataService } from './data/types'; -import { DashboardDataViewEditorService } from './data_view_editor/types'; -import { DashboardDocumentationLinksService } from './documentation_links/types'; -import { DashboardEmbeddableService } from './embeddable/types'; -import { DashboardHTTPService } from './http/types'; -import { DashboardI18nService } from './i18n/types'; -import { DashboardInitializerContextService } from './initializer_context/types'; -import { DashboardNavigationService } from './navigation/types'; -import { DashboardNotificationsService } from './notifications/types'; -import { DashboardOverlaysService } from './overlays/types'; -import { DashboardSavedObjectsTaggingService } from './saved_objects_tagging/types'; -import { DashboardScreenshotModeService } from './screenshot_mode/types'; -import { DashboardSettingsService } from './settings/types'; -import { DashboardShareService } from './share/types'; -import { DashboardSpacesService } from './spaces/types'; -import { DashboardUrlForwardingService } from './url_forwarding/types'; -import { DashboardUsageCollectionService } from './usage_collection/types'; -import { DashboardVisualizationsService } from './visualizations/types'; -import { DashboardServerlessService } from './serverless/types'; -import { NoDataPageService } from './no_data_page/types'; -import { DashboardUiActionsService } from './ui_actions/types'; -import { ObservabilityAIAssistantService } from './observability_ai_assistant/types'; -import { DashboardUserProfileService } from './user_profile/types'; -import { DashboardRecentlyAccessedService } from './dashboard_recently_accessed/types'; -import { DashboardContentInsightsService } from './dashboard_content_insights/types'; -import { DashboardFavoritesService } from './dashboard_favorites/types'; - -export type DashboardPluginServiceParams = KibanaPluginServiceParams & { - initContext: PluginInitializerContext; // need a custom type so that initContext is a required parameter for initializerContext -}; -export interface DashboardServices { - dashboardBackup: DashboardBackupServiceType; - dashboardContentManagement: DashboardContentManagementService; - - analytics: DashboardAnalyticsService; - application: DashboardApplicationService; - chrome: DashboardChromeService; - coreContext: DashboardCoreContextService; - dashboardCapabilities: DashboardCapabilitiesService; - data: DashboardDataService; - dataViewEditor: DashboardDataViewEditorService; // this service is used only for the no data state - documentationLinks: DashboardDocumentationLinksService; - embeddable: DashboardEmbeddableService; - http: DashboardHTTPService; - i18n: DashboardI18nService; - initializerContext: DashboardInitializerContextService; - navigation: DashboardNavigationService; - notifications: DashboardNotificationsService; - overlays: DashboardOverlaysService; - savedObjectsTagging: DashboardSavedObjectsTaggingService; // TODO: make this optional in follow up - screenshotMode: DashboardScreenshotModeService; - settings: DashboardSettingsService; - share: DashboardShareService; // TODO: make this optional in follow up - spaces: DashboardSpacesService; // TODO: make this optional in follow up - urlForwarding: DashboardUrlForwardingService; - usageCollection: DashboardUsageCollectionService; // TODO: make this optional in follow up - visualizations: DashboardVisualizationsService; - customBranding: DashboardCustomBrandingService; - savedObjectsManagement: SavedObjectsManagementPluginStart; - contentManagement: ContentManagementPublicStart; - serverless: DashboardServerlessService; // TODO: make this optional in follow up - noDataPage: NoDataPageService; - uiActions: DashboardUiActionsService; - observabilityAIAssistant: ObservabilityAIAssistantService; // TODO: make this optional in follow up - userProfile: DashboardUserProfileService; - dashboardRecentlyAccessed: DashboardRecentlyAccessedService; - dashboardContentInsights: DashboardContentInsightsService; - dashboardFavorites: DashboardFavoritesService; -} diff --git a/src/plugins/dashboard/public/services/ui_actions/types.ts b/src/plugins/dashboard/public/services/ui_actions/types.ts deleted file mode 100644 index 94f931ba9fc1..000000000000 --- a/src/plugins/dashboard/public/services/ui_actions/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; - -export interface DashboardUiActionsService { - getTriggerCompatibleActions?: UiActionsStart['getTriggerCompatibleActions']; -} diff --git a/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.stub.ts b/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.stub.ts deleted file mode 100644 index 971b14393361..000000000000 --- a/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.stub.ts +++ /dev/null @@ -1,19 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardUiActionsService } from './types'; - -export type UIActionsServiceFactory = PluginServiceFactory; - -export const uiActionsServiceFactory: UIActionsServiceFactory = () => { - const pluginMock = uiActionsPluginMock.createStartContract(); - return { getTriggerCompatibleActions: pluginMock.getTriggerCompatibleActions }; -}; diff --git a/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.ts b/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.ts deleted file mode 100644 index 363082473df9..000000000000 --- a/src/plugins/dashboard/public/services/ui_actions/ui_actions_service.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardUiActionsService } from './types'; - -export type UsageCollectionServiceFactory = KibanaPluginServiceFactory< - DashboardUiActionsService, - DashboardStartDependencies ->; -export const uiActionsServiceFactory: UsageCollectionServiceFactory = ({ startPlugins }) => { - const { uiActions } = startPlugins; - if (!uiActions) return {}; - - const { getTriggerCompatibleActions } = uiActions; - return { - getTriggerCompatibleActions, - }; -}; diff --git a/src/plugins/dashboard/public/services/url_forwarding/types.ts b/src/plugins/dashboard/public/services/url_forwarding/types.ts deleted file mode 100644 index af032a10643a..000000000000 --- a/src/plugins/dashboard/public/services/url_forwarding/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { UrlForwardingStart } from '@kbn/url-forwarding-plugin/public'; - -export interface DashboardUrlForwardingService { - navigateToLegacyKibanaUrl: UrlForwardingStart['navigateToLegacyKibanaUrl']; -} diff --git a/src/plugins/dashboard/public/services/url_forwarding/url_forwarding_service.ts b/src/plugins/dashboard/public/services/url_forwarding/url_forwarding_service.ts deleted file mode 100644 index 7ddc92b29c9e..000000000000 --- a/src/plugins/dashboard/public/services/url_forwarding/url_forwarding_service.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardUrlForwardingService } from './types'; - -export type UrlForwardingServiceFactory = KibanaPluginServiceFactory< - DashboardUrlForwardingService, - DashboardStartDependencies ->; -export const urlForwardingServiceFactory: UrlForwardingServiceFactory = ({ startPlugins }) => { - const { - urlForwarding: { navigateToLegacyKibanaUrl }, - } = startPlugins; - - return { - navigateToLegacyKibanaUrl, - }; -}; diff --git a/src/plugins/dashboard/public/services/url_forwarding/url_fowarding.stub.ts b/src/plugins/dashboard/public/services/url_forwarding/url_fowarding.stub.ts deleted file mode 100644 index 29792e40fd27..000000000000 --- a/src/plugins/dashboard/public/services/url_forwarding/url_fowarding.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { urlForwardingPluginMock } from '@kbn/url-forwarding-plugin/public/mocks'; -import { DashboardUrlForwardingService } from './types'; - -type UrlForwardingServiceFactory = PluginServiceFactory; - -export const urlForwardingServiceFactory: UrlForwardingServiceFactory = () => { - const pluginMock = urlForwardingPluginMock.createStartContract(); - - return { - navigateToLegacyKibanaUrl: pluginMock.navigateToLegacyKibanaUrl, - }; -}; diff --git a/src/plugins/dashboard/public/services/usage_collection/types.ts b/src/plugins/dashboard/public/services/usage_collection/types.ts deleted file mode 100644 index 3aaaccbe9d8a..000000000000 --- a/src/plugins/dashboard/public/services/usage_collection/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; - -export interface DashboardUsageCollectionService { - reportUiCounter?: UsageCollectionStart['reportUiCounter']; -} diff --git a/src/plugins/dashboard/public/services/usage_collection/usage_collection.stub.ts b/src/plugins/dashboard/public/services/usage_collection/usage_collection.stub.ts deleted file mode 100644 index 1d3a3d119a7f..000000000000 --- a/src/plugins/dashboard/public/services/usage_collection/usage_collection.stub.ts +++ /dev/null @@ -1,22 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { usageCollectionPluginMock } from '@kbn/usage-collection-plugin/public/mocks'; -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardUsageCollectionService } from './types'; - -type UsageCollectionServiceFactory = PluginServiceFactory; - -export const usageCollectionServiceFactory: UsageCollectionServiceFactory = () => { - const pluginMock = usageCollectionPluginMock.createSetupContract(); - - return { - reportUiCounter: pluginMock.reportUiCounter, - }; -}; diff --git a/src/plugins/dashboard/public/services/usage_collection/usage_collection_service.ts b/src/plugins/dashboard/public/services/usage_collection/usage_collection_service.ts deleted file mode 100644 index 1d95aa3c2c4b..000000000000 --- a/src/plugins/dashboard/public/services/usage_collection/usage_collection_service.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardUsageCollectionService } from './types'; - -export type UsageCollectionServiceFactory = KibanaPluginServiceFactory< - DashboardUsageCollectionService, - DashboardStartDependencies ->; -export const usageCollectionServiceFactory: UsageCollectionServiceFactory = ({ startPlugins }) => { - const { usageCollection } = startPlugins; - if (!usageCollection) return {}; - - const { reportUiCounter } = usageCollection; - return { - reportUiCounter, - }; -}; diff --git a/src/plugins/dashboard/public/services/user_profile/types.ts b/src/plugins/dashboard/public/services/user_profile/types.ts deleted file mode 100644 index 0de4bed4479e..000000000000 --- a/src/plugins/dashboard/public/services/user_profile/types.ts +++ /dev/null @@ -1,14 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { CoreStart } from '@kbn/core/public'; - -export interface DashboardUserProfileService { - bulkGet: CoreStart['userProfile']['bulkGet']; -} diff --git a/src/plugins/dashboard/public/services/user_profile/user_profile_service.stub.ts b/src/plugins/dashboard/public/services/user_profile/user_profile_service.stub.ts deleted file mode 100644 index 37c20141deb6..000000000000 --- a/src/plugins/dashboard/public/services/user_profile/user_profile_service.stub.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; -import { DashboardUserProfileService } from './types'; - -export type UserProfileServiceFactory = PluginServiceFactory; - -export const userProfileServiceFactory: UserProfileServiceFactory = () => { - return userProfileServiceMock.createStart(); -}; diff --git a/src/plugins/dashboard/public/services/user_profile/user_profile_service.ts b/src/plugins/dashboard/public/services/user_profile/user_profile_service.ts deleted file mode 100644 index d0585ff37d22..000000000000 --- a/src/plugins/dashboard/public/services/user_profile/user_profile_service.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { DashboardStartDependencies } from '../../plugin'; -import { DashboardUserProfileService } from './types'; - -export type UserProfileServiceFactory = KibanaPluginServiceFactory< - DashboardUserProfileService, - DashboardStartDependencies ->; - -export const userProfileServiceFactory: UserProfileServiceFactory = ({ coreStart }) => { - const { userProfile } = coreStart; - - return userProfile; -}; diff --git a/src/plugins/dashboard/public/services/visualizations/types.ts b/src/plugins/dashboard/public/services/visualizations/types.ts deleted file mode 100644 index 32a96c2cd183..000000000000 --- a/src/plugins/dashboard/public/services/visualizations/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { VisualizationsStart } from '@kbn/visualizations-plugin/public'; - -export interface DashboardVisualizationsService { - get: VisualizationsStart['get']; - getAliases: VisualizationsStart['getAliases']; - getByGroup: VisualizationsStart['getByGroup']; - showNewVisModal: VisualizationsStart['showNewVisModal']; -} diff --git a/src/plugins/dashboard/public/services/visualizations/visualizations.stub.ts b/src/plugins/dashboard/public/services/visualizations/visualizations.stub.ts deleted file mode 100644 index a149080963fa..000000000000 --- a/src/plugins/dashboard/public/services/visualizations/visualizations.stub.ts +++ /dev/null @@ -1,25 +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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { PluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import { visualizationsPluginMock } from '@kbn/visualizations-plugin/public/mocks'; -import { DashboardVisualizationsService } from './types'; - -type HttpServiceFactory = PluginServiceFactory; - -export const visualizationsServiceFactory: HttpServiceFactory = () => { - const pluginMock = visualizationsPluginMock.createStartContract(); - - return { - get: pluginMock.get, - getAliases: pluginMock.getAliases, - getByGroup: pluginMock.getByGroup, - showNewVisModal: pluginMock.showNewVisModal, - }; -}; diff --git a/src/plugins/dashboard/public/services/visualizations/visualizations_service.ts b/src/plugins/dashboard/public/services/visualizations/visualizations_service.ts deleted file mode 100644 index c9aa8ed64f9c..000000000000 --- a/src/plugins/dashboard/public/services/visualizations/visualizations_service.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardVisualizationsService } from './types'; - -export type VisualizationsServiceFactory = KibanaPluginServiceFactory< - DashboardVisualizationsService, - DashboardStartDependencies ->; - -export const visualizationsServiceFactory: VisualizationsServiceFactory = ({ startPlugins }) => { - const { - visualizations: { get, getAliases, getByGroup, showNewVisModal }, - } = startPlugins; - - return { - get, - getAliases, - getByGroup, - showNewVisModal, - }; -}; diff --git a/src/plugins/dashboard/public/services/dashboard_capabilities/dashboard_capabilities_service.ts b/src/plugins/dashboard/public/utils/get_dashboard_capabilities.ts similarity index 56% rename from src/plugins/dashboard/public/services/dashboard_capabilities/dashboard_capabilities_service.ts rename to src/plugins/dashboard/public/utils/get_dashboard_capabilities.ts index 3909f839acb2..083ca2fea43a 100644 --- a/src/plugins/dashboard/public/services/dashboard_capabilities/dashboard_capabilities_service.ts +++ b/src/plugins/dashboard/public/utils/get_dashboard_capabilities.ts @@ -7,31 +7,22 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { KibanaPluginServiceFactory } from '@kbn/presentation-util-plugin/public'; -import type { DashboardStartDependencies } from '../../plugin'; -import type { DashboardCapabilitiesService } from './types'; +import { DashboardCapabilities } from '../../common'; +import { coreServices } from '../services/kibana_services'; -export type DashboardCapabilitiesServiceFactory = KibanaPluginServiceFactory< - DashboardCapabilitiesService, - DashboardStartDependencies ->; -export const dashboardCapabilitiesServiceFactory: DashboardCapabilitiesServiceFactory = ({ - coreStart, -}) => { +export const getDashboardCapabilities = (): DashboardCapabilities => { const { application: { - capabilities: { dashboard, maps, visualize }, + capabilities: { dashboard }, }, - } = coreStart; + } = coreServices; return { show: Boolean(dashboard.show), saveQuery: Boolean(dashboard.saveQuery), createNew: Boolean(dashboard.createNew), - mapsCapabilities: { save: Boolean(maps?.save) }, createShortUrl: Boolean(dashboard.createShortUrl), showWriteControls: Boolean(dashboard.showWriteControls), - visualizeCapabilities: { save: Boolean(visualize?.save) }, storeSearchSession: Boolean(dashboard.storeSearchSession), }; }; diff --git a/src/plugins/dashboard/tsconfig.json b/src/plugins/dashboard/tsconfig.json index f289f4f725fe..0f4059edfb0b 100644 --- a/src/plugins/dashboard/tsconfig.json +++ b/src/plugins/dashboard/tsconfig.json @@ -41,14 +41,8 @@ "@kbn/core-application-browser", "@kbn/ebt-tools", "@kbn/shared-ux-button-exit-full-screen", - "@kbn/core-analytics-browser-mocks", - "@kbn/core-application-browser-mocks", "@kbn/analytics", "@kbn/safer-lodash-set", - "@kbn/core-notifications-browser-mocks", - "@kbn/core-overlays-browser-mocks", - "@kbn/core-theme-browser-mocks", - "@kbn/core-ui-settings-browser-mocks", "@kbn/task-manager-plugin", "@kbn/core-execution-context-common", "@kbn/core-custom-branding-browser", @@ -66,7 +60,6 @@ "@kbn/serverless", "@kbn/no-data-page-plugin", "@kbn/react-kibana-mount", - "@kbn/core-lifecycle-browser", "@kbn/logging", "@kbn/presentation-publishing", "@kbn/presentation-containers", @@ -75,9 +68,7 @@ "@kbn/shared-ux-utility", "@kbn/core-test-helpers-model-versions", "@kbn/deeplinks-analytics", - "@kbn/core-user-profile-browser-mocks", "@kbn/react-kibana-context-render", - "@kbn/core-i18n-browser-mocks", "@kbn/observability-ai-assistant-plugin", "@kbn/esql-utils", "@kbn/lens-embeddable-utils", @@ -87,7 +78,7 @@ "@kbn/content-management-content-insights-server", "@kbn/managed-content-badge", "@kbn/content-management-favorites-public", - "@kbn/core-http-browser-mocks", + "@kbn/core-custom-branding-browser-mocks", ], "exclude": ["target/**/*"] } diff --git a/src/plugins/data_views/common/data_views/abstract_data_views.ts b/src/plugins/data_views/common/data_views/abstract_data_views.ts index 51bd618f8bca..2ad3f04fffc3 100644 --- a/src/plugins/data_views/common/data_views/abstract_data_views.ts +++ b/src/plugins/data_views/common/data_views/abstract_data_views.ts @@ -13,7 +13,7 @@ import type { SerializedFieldFormat, } from '@kbn/field-formats-plugin/common'; import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; -import { cloneDeep, merge } from 'lodash'; +import { cloneDeep } from 'lodash'; import type { DataViewFieldBase } from '@kbn/es-query'; import type { DataViewSpec, @@ -161,7 +161,7 @@ export abstract class AbstractDataView { } return acc; }, {} as Record) - : []; + : {}; this.allowNoIndex = spec?.allowNoIndex || false; @@ -191,7 +191,7 @@ export abstract class AbstractDataView { this.sourceFilters = [...(spec.sourceFilters || [])]; this.type = spec.type; this.typeMeta = spec.typeMeta; - this.fieldAttrs = cloneDeep(merge({}, extractedFieldAttrs, spec.fieldAttrs)) || {}; + this.fieldAttrs = new Map(Object.entries({ ...extractedFieldAttrs, ...spec.fieldAttrs })); this.runtimeFieldMap = cloneDeep(spec.runtimeFieldMap) || {}; this.namespaces = spec.namespaces || []; this.name = spec.name || ''; @@ -300,10 +300,8 @@ export abstract class AbstractDataView { attrName: K, value: FieldAttrSet[K] ) { - if (!this.fieldAttrs[fieldName]) { - this.fieldAttrs[fieldName] = {} as FieldAttrSet; - } - this.fieldAttrs[fieldName][attrName] = value; + const fieldAttrs = this.fieldAttrs.get(fieldName) || {}; + this.fieldAttrs.set(fieldName, { ...fieldAttrs, [attrName]: value }); } /** @@ -368,7 +366,7 @@ export abstract class AbstractDataView { const stringifyOrUndefined = (obj: any) => (obj ? JSON.stringify(obj) : undefined); return { - fieldAttrs: stringifyOrUndefined(this.fieldAttrs), + fieldAttrs: stringifyOrUndefined(Object.fromEntries(this.fieldAttrs.entries())), title: this.getIndexPattern(), timeFieldName: this.timeFieldName, sourceFilters: stringifyOrUndefined(this.sourceFilters), @@ -385,7 +383,7 @@ export abstract class AbstractDataView { protected toSpecShared(includeFields = true): DataViewSpec { // if fields aren't included, don't include count - const fieldAttrs = cloneDeep(this.fieldAttrs); + const fieldAttrs = Object.fromEntries(this.fieldAttrs.entries()); if (!includeFields) { Object.keys(fieldAttrs).forEach((key) => { delete fieldAttrs[key].count; @@ -546,5 +544,8 @@ export abstract class AbstractDataView { this.runtimeFieldMap[name] = removeFieldAttrs(runtimeField); } - getFieldAttrs = () => cloneDeep(this.fieldAttrs); + getFieldAttrs = () => { + const clonedFieldAttrs = cloneDeep(Object.fromEntries(this.fieldAttrs.entries())); + return new Map(Object.entries(clonedFieldAttrs)); + }; } diff --git a/src/plugins/data_views/common/data_views/data_view.test.ts b/src/plugins/data_views/common/data_views/data_view.test.ts index 854340099f14..ebb148bdb274 100644 --- a/src/plugins/data_views/common/data_views/data_view.test.ts +++ b/src/plugins/data_views/common/data_views/data_view.test.ts @@ -523,7 +523,7 @@ describe('IndexPattern', () => { }, }, }); - expect(dataView.getFieldAttrs()).toMatchInlineSnapshot(` + expect(Object.fromEntries(dataView.getFieldAttrs().entries())).toMatchInlineSnapshot(` Object { "test1": Object { "count": 5, @@ -555,7 +555,7 @@ describe('IndexPattern', () => { }, }, }); - expect(dataView.getFieldAttrs()).toMatchInlineSnapshot(` + expect(Object.fromEntries(dataView.getFieldAttrs().entries())).toMatchInlineSnapshot(` Object { "test1": Object { "count": 2, diff --git a/src/plugins/data_views/common/data_views/data_view_lazy.ts b/src/plugins/data_views/common/data_views/data_view_lazy.ts index 2d456fa1773a..7b16af56c060 100644 --- a/src/plugins/data_views/common/data_views/data_view_lazy.ts +++ b/src/plugins/data_views/common/data_views/data_view_lazy.ts @@ -132,11 +132,12 @@ export class DataViewLazy extends AbstractDataView { return col; } if (!cachedField) { + const fldAttrs = this.fieldAttrs.get(field.name) || {}; cachedField = new DataViewField({ ...field, - count: this.fieldAttrs?.[field.name]?.count, - customLabel: this.fieldAttrs?.[field.name]?.customLabel, - customDescription: this.fieldAttrs?.[field.name]?.customDescription, + count: fldAttrs.count, + customLabel: fldAttrs.customLabel, + customDescription: fldAttrs.customDescription, shortDotsEnable: this.shortDotsEnable, }); this.fieldCache.set(field.name, cachedField); @@ -338,6 +339,7 @@ export class DataViewLazy extends AbstractDataView { runtimeField: RuntimeFieldSpec, parentName?: string ) => { + const fldAttrs = this.fieldAttrs.get(name) || {}; spec[name] = { name, type: castEsToKbnFieldTypeName(fieldType), @@ -346,9 +348,9 @@ export class DataViewLazy extends AbstractDataView { aggregatable: true, searchable: true, readFromDocValues: false, - customLabel: this.fieldAttrs?.[name]?.customLabel, - customDescription: this.fieldAttrs?.[name]?.customDescription, - count: this.fieldAttrs?.[name]?.count, + customLabel: fldAttrs.customLabel, + customDescription: fldAttrs.customDescription, + count: fldAttrs.count, }; if (parentName) { @@ -391,14 +393,15 @@ export class DataViewLazy extends AbstractDataView { if (fld && !fld.scripted && fld.isMapped) { this.fieldCache.delete(field.name); } + const fldAttrs = this.fieldAttrs.get(field.name) || {}; fld = new DataViewField({ ...field, scripted: true, searchable: true, aggregatable: true, - count: this.fieldAttrs?.[field.name]?.count, - customLabel: this.fieldAttrs?.[field.name]?.customLabel, - customDescription: this.fieldAttrs?.[field.name]?.customDescription, + count: fldAttrs.count, + customLabel: fldAttrs.customLabel, + customDescription: fldAttrs.customDescription, }); this.fieldCache.set(field.name, fld); dataViewFields[field.name] = fld; @@ -437,11 +440,12 @@ export class DataViewLazy extends AbstractDataView { fld.spec.runtimeField = undefined; // unset if it was a runtime field but now mapped fld.spec.isMapped = true; } else { + const fldAttrs = this.fieldAttrs.get(field.name) || {}; fld = new DataViewField({ ...field, - count: this.fieldAttrs?.[field.name]?.count, - customLabel: this.fieldAttrs?.[field.name]?.customLabel, - customDescription: this.fieldAttrs?.[field.name]?.customDescription, + count: fldAttrs.count, + customLabel: fldAttrs.customLabel, + customDescription: fldAttrs.customDescription, shortDotsEnable: this.shortDotsEnable, }); this.fieldCache.set(field.name, fld); diff --git a/src/plugins/data_views/common/data_views/data_views.ts b/src/plugins/data_views/common/data_views/data_views.ts index 6dee1745e802..5e07e9138787 100644 --- a/src/plugins/data_views/common/data_views/data_views.ts +++ b/src/plugins/data_views/common/data_views/data_views.ts @@ -28,6 +28,7 @@ import { DataViewSpec, DataViewAttributes, FieldAttrs, + FieldAttrsAsObject, FieldSpec, DataViewFieldMap, TypeMeta, @@ -187,7 +188,7 @@ export interface DataViewsServicePublicMethods { * @params fieldAttrs - Field attributes, map by name * @returns Field map by name */ - fieldArrayToMap: (fields: FieldSpec[], fieldAttrs?: FieldAttrs | undefined) => DataViewFieldMap; + fieldArrayToMap: (fields: FieldSpec[], fieldAttrs?: FieldAttrsAsObject) => DataViewFieldMap; /** * Search for data views based on title * @param search - Search string @@ -658,7 +659,8 @@ export class DataViewsService { const scripted = this.scriptedFieldsEnabled ? indexPattern.getScriptedFields().map((field) => field.spec) : []; - const fieldAttrs = indexPattern.getFieldAttrs(); + + const fieldAttrs = Object.fromEntries(indexPattern.getFieldAttrs().entries()); const fieldsWithSavedAttrs = Object.values( this.fieldArrayToMap([...fields, ...scripted], fieldAttrs) ); @@ -721,7 +723,7 @@ export class DataViewsService { id: string, title: string, options: GetFieldsOptions, - fieldAttrs: FieldAttrs = {}, + fieldAttrs: FieldAttrsAsObject = {}, displayErrors: boolean = true ) => { const fieldsAsArr = Object.values(fields); @@ -772,7 +774,7 @@ export class DataViewsService { * @param fieldAttrs: FieldAttrs * @returns Record */ - fieldArrayToMap = (fields: FieldSpec[], fieldAttrs?: FieldAttrs) => + fieldArrayToMap = (fields: FieldSpec[], fieldAttrs?: FieldAttrsAsObject) => fields.reduce((collector, field) => { collector[field.name] = { ...field, @@ -814,7 +816,7 @@ export class DataViewsService { const parsedTypeMeta = typeMeta ? JSON.parse(typeMeta) : undefined; const parsedFieldFormatMap = fieldFormatMap ? JSON.parse(fieldFormatMap) : {}; const parsedFields: FieldSpec[] = fields ? JSON.parse(fields) : []; - const parsedFieldAttrs: FieldAttrs = fieldAttrs ? JSON.parse(fieldAttrs) : {}; + const parsedFieldAttrs: FieldAttrsAsObject = fieldAttrs ? JSON.parse(fieldAttrs) : {}; const parsedRuntimeFieldMap: Record = runtimeFieldMap ? JSON.parse(runtimeFieldMap) : {}; @@ -877,7 +879,10 @@ export class DataViewsService { displayErrors ); - const runtimeFieldSpecs = this.getRuntimeFields(runtimeFieldMap, spec.fieldAttrs); + const runtimeFieldSpecs = this.getRuntimeFields( + runtimeFieldMap, + new Map(Object.entries(spec.fieldAttrs || {})) + ); // mapped fields overwrite runtime fields return { fields: { ...runtimeFieldSpecs, ...fields }, indices: indices || [], etag }; }; @@ -946,7 +951,7 @@ export class DataViewsService { private getRuntimeFields = ( runtimeFieldMap: Record | undefined = {}, - fieldAttrs: FieldAttrs | undefined = {} + fieldAttrs: FieldAttrs | undefined = new Map() ) => { const spec: DataViewFieldMap = {}; @@ -956,6 +961,7 @@ export class DataViewsService { runtimeField: RuntimeFieldSpec, parentName?: string ) => { + const fldAttrs = fieldAttrs.get(name) || {}; spec[name] = { name, type: castEsToKbnFieldTypeName(fieldType), @@ -964,9 +970,9 @@ export class DataViewsService { aggregatable: true, searchable: true, readFromDocValues: false, - customLabel: fieldAttrs?.[name]?.customLabel, - customDescription: fieldAttrs?.[name]?.customDescription, - count: fieldAttrs?.[name]?.count, + customLabel: fldAttrs.customLabel, + customDescription: fldAttrs.customDescription, + count: fldAttrs.count, }; if (parentName) { diff --git a/src/plugins/data_views/common/types.ts b/src/plugins/data_views/common/types.ts index 068c3a74f686..45f747691fc4 100644 --- a/src/plugins/data_views/common/types.ts +++ b/src/plugins/data_views/common/types.ts @@ -173,10 +173,7 @@ export interface DataViewAttributes { * @public * Storage of field attributes. Necessary since the field list isn't saved. */ -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -export type FieldAttrs = { - [key: string]: FieldAttrSet; -}; +export type FieldAttrs = Map; /** * Field attributes that are stored on the data view @@ -198,6 +195,8 @@ export type FieldAttrSet = { count?: number; }; +export type FieldAttrsAsObject = Record; + /** * Handler for data view notifications * @public @@ -537,7 +536,7 @@ export type DataViewSpec = { /** * Map of field attributes by field name, currently customName and count */ - fieldAttrs?: FieldAttrs; + fieldAttrs?: FieldAttrsAsObject; /** * Determines whether failure to load field list should be reported as error */ diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index b84b00439c80..45e8755ca315 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -12,6 +12,7 @@ import { type DataView, DataViewType } from '@kbn/data-views-plugin/public'; import { DataViewPickerProps } from '@kbn/unified-search-plugin/public'; import { ENABLE_ESQL } from '@kbn/esql-utils'; import { TextBasedLanguages } from '@kbn/esql-utils'; +import { DiscoverFlyouts, dismissAllFlyoutsExceptFor } from '@kbn/discover-utils'; import { useSavedSearchInitial } from '../../state_management/discover_state_provider'; import { ESQL_TRANSITION_MODAL_KEY } from '../../../../../common/constants'; import { useInternalStateSelector } from '../../state_management/discover_internal_state_container'; @@ -233,6 +234,12 @@ export const DiscoverTopNav = ({ uiSettings, ]); + const onESQLDocsFlyoutVisibilityChanged = useCallback((isOpen: boolean) => { + if (isOpen) { + dismissAllFlyoutsExceptFor(DiscoverFlyouts.esqlDocs); + } + }, []); + const searchBarCustomization = useDiscoverCustomization('search_bar'); const SearchBar = useMemo( @@ -278,6 +285,7 @@ export const DiscoverTopNav = ({ ) : undefined } + onESQLDocsFlyoutVisibilityChanged={onESQLDocsFlyoutVisibilityChanged} /> {isESQLToDataViewTransitionModalVisible && ( diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx index 22645fa8d7aa..ee8187433ff4 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_badges.tsx @@ -11,6 +11,7 @@ import type { TopNavMenuBadgeProps } from '@kbn/navigation-plugin/public'; import { getTopNavUnsavedChangesBadge } from '@kbn/unsaved-changes-badge'; import { getManagedContentBadge } from '@kbn/managed-content-badge'; import { i18n } from '@kbn/i18n'; +import { dismissFlyouts, DiscoverFlyouts } from '@kbn/discover-utils'; import { DiscoverStateContainer } from '../../state_management/discover_state'; import type { TopNavCustomization } from '../../../../customizations'; import { onSaveSearch } from './on_save_search'; @@ -47,10 +48,7 @@ export const getTopNavBadges = ({ entries.push({ data: getTopNavUnsavedChangesBadge({ onRevert: async () => { - const lensEditFlyoutCancelButton = document.getElementById('lnsCancelEditOnFlyFlyout'); - if (lensEditFlyoutCancelButton) { - lensEditFlyoutCancelButton.click?.(); - } + dismissFlyouts([DiscoverFlyouts.lensEdit]); await stateContainer.actions.undoSavedSearchChanges(); }, onSave: diff --git a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx index 71904870a9e4..9ad389381b90 100644 --- a/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx +++ b/src/plugins/discover/public/components/discover_grid_flyout/discover_grid_flyout.tsx @@ -7,13 +7,14 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import React, { useMemo } from 'react'; +import React, { useEffect, useMemo } from 'react'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { Filter, Query, AggregateQuery, isOfAggregateQueryType } from '@kbn/es-query'; +import { AggregateQuery, Filter, isOfAggregateQueryType, Query } from '@kbn/es-query'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import type { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import type { DataTableColumnsMeta } from '@kbn/unified-data-table'; import type { DocViewsRegistry } from '@kbn/unified-doc-viewer'; +import { DiscoverFlyouts, dismissAllFlyoutsExceptFor } from '@kbn/discover-utils'; import { UnifiedDocViewerFlyout } from '@kbn/unified-doc-viewer-plugin/public'; import { useDiscoverServices } from '../../hooks/use_discover_services'; import { useFlyoutActions } from './use_flyout_actions'; @@ -88,6 +89,10 @@ export function DiscoverGridFlyout({ return getDocViewer({ record: actualHit }); }, [flyoutCustomization, getDocViewerAccessor, actualHit]); + useEffect(() => { + dismissAllFlyoutsExceptFor(DiscoverFlyouts.docViewer); + }, []); + return ( { + if (flyoutElement) { + dismissAllFlyoutsExceptFor(DiscoverFlyouts.lensEdit); + } + }, [flyoutElement]); + + return flyoutElement; } diff --git a/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx b/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx index 379b5563917f..cfffa8ae7f83 100644 --- a/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx +++ b/src/plugins/unified_search/public/query_string_input/esql_menu_popover.tsx @@ -22,7 +22,13 @@ import { FEEDBACK_LINK } from '@kbn/esql-utils'; import { LanguageDocumentationFlyout } from '@kbn/language-documentation'; import type { IUnifiedSearchPluginServices } from '../types'; -export const ESQLMenuPopover = () => { +export interface ESQLMenuPopoverProps { + onESQLDocsFlyoutVisibilityChanged?: (isOpen: boolean) => void; +} + +export const ESQLMenuPopover: React.FC = ({ + onESQLDocsFlyoutVisibilityChanged, +}) => { const kibana = useKibana(); const { docLinks } = kibana.services; @@ -34,6 +40,14 @@ export const ESQLMenuPopover = () => { setIsESQLMenuPopoverOpen(false); }, [isLanguageComponentOpen]); + const onHelpMenuVisibilityChange = useCallback( + (status: boolean) => { + setIsLanguageComponentOpen(status); + onESQLDocsFlyoutVisibilityChanged?.(status); + }, + [setIsLanguageComponentOpen, onESQLDocsFlyoutVisibilityChanged] + ); + const esqlPanelItems = useMemo(() => { const panelItems: EuiContextMenuPanelProps['items'] = []; panelItems.push( @@ -122,7 +136,7 @@ export const ESQLMenuPopover = () => { searchInDescription linkToDocumentation={docLinks?.links?.query?.queryESQL ?? ''} isHelpMenuOpen={isLanguageComponentOpen} - onHelpMenuVisibilityChange={setIsLanguageComponentOpen} + onHelpMenuVisibilityChange={onHelpMenuVisibilityChange} /> ); diff --git a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx index 9805381800cc..c4f04a3d01ce 100644 --- a/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_bar_top_row.tsx @@ -51,7 +51,7 @@ import { NoDataPopover } from './no_data_popover'; import { shallowEqual } from '../utils/shallow_equal'; import { AddFilterPopover } from './add_filter_popover'; import { DataViewPicker, DataViewPickerProps } from '../dataview_picker'; -import { ESQLMenuPopover } from './esql_menu_popover'; +import { ESQLMenuPopover, type ESQLMenuPopoverProps } from './esql_menu_popover'; import { FilterButtonGroup } from '../filter_bar/filter_button_group/filter_button_group'; import type { @@ -186,6 +186,7 @@ export interface QueryBarTopRowProps submitOnBlur?: boolean; renderQueryInputAppend?: () => React.ReactNode; disableExternalPadding?: boolean; + onESQLDocsFlyoutVisibilityChanged?: ESQLMenuPopoverProps['onESQLDocsFlyoutVisibilityChanged']; } export const SharingMetaFields = React.memo(function SharingMetaFields({ @@ -774,7 +775,11 @@ export const QueryBarTopRow = React.memo( wrap > {props.dataViewPickerOverride || renderDataViewsPicker()} - {Boolean(isQueryLangSelected) && } + {Boolean(isQueryLangSelected) && ( + + )} diff --git a/src/plugins/unified_search/public/search_bar/search_bar.tsx b/src/plugins/unified_search/public/search_bar/search_bar.tsx index 3ea5d0165df1..04e90347c59d 100644 --- a/src/plugins/unified_search/public/search_bar/search_bar.tsx +++ b/src/plugins/unified_search/public/search_bar/search_bar.tsx @@ -138,6 +138,7 @@ export interface SearchBarOwnProps { submitOnBlur?: boolean; renderQueryInputAppend?: () => React.ReactNode; + onESQLDocsFlyoutVisibilityChanged?: QueryBarTopRowProps['onESQLDocsFlyoutVisibilityChanged']; } export type SearchBarProps = SearchBarOwnProps & @@ -660,6 +661,7 @@ class SearchBarUI extends C suggestionsAbstraction={this.props.suggestionsAbstraction} renderQueryInputAppend={this.props.renderQueryInputAppend} disableExternalPadding={this.props.displayStyle === 'withBorders'} + onESQLDocsFlyoutVisibilityChanged={this.props.onESQLDocsFlyoutVisibilityChanged} /> ); diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts b/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts index 563d7bc33d1c..f3f4cd40145e 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_row_indicator_provider.ts @@ -24,7 +24,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const browser = getService('browser'); const dataViews = getService('dataViews'); - describe('extension getRowIndicatorProvider', () => { + // Failing: See https://github.com/elastic/kibana/issues/194043 + describe.skip('extension getRowIndicatorProvider', () => { before(async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); }); diff --git a/test/functional/apps/discover/group8/_flyouts.ts b/test/functional/apps/discover/group8/_flyouts.ts new file mode 100644 index 000000000000..d36c9f0766d2 --- /dev/null +++ b/test/functional/apps/discover/group8/_flyouts.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const { common, discover, timePicker, header } = getPageObjects([ + 'common', + 'discover', + 'timePicker', + 'header', + ]); + const kibanaServer = getService('kibanaServer'); + const security = getService('security'); + const retry = getService('retry'); + const dataGrid = getService('dataGrid'); + const esql = getService('esql'); + const testSubjects = getService('testSubjects'); + + describe('discover flyouts', function () { + async function isLensEditFlyoutOpen() { + return await testSubjects.exists('lnsChartSwitchPopover'); + } + + async function openLensEditFlyout() { + await testSubjects.click('unifiedHistogramEditFlyoutVisualization'); + await retry.waitFor('flyout', async () => { + return await isLensEditFlyoutOpen(); + }); + } + + before(async function () { + await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*' }); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + }); + + beforeEach(async function () { + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + }); + + after(async () => { + await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); + await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.uiSettings.replace({}); + await kibanaServer.savedObjects.cleanStandardList(); + }); + + it('doc viewer flyout should get dismissed on opening ESQL docs flyout', async function () { + await dataGrid.clickRowToggle({ rowIndex: 0 }); + expect(await dataGrid.isShowingDocViewer()).to.be(true); + await esql.openQuickReferenceFlyout(); + expect(await dataGrid.isShowingDocViewer()).to.be(false); + expect(await esql.isOpenQuickReferenceFlyout()).to.be(true); + }); + + it('doc viewer flyout should get dismissed on opening Lens Edit flyout', async function () { + await dataGrid.clickRowToggle({ rowIndex: 0 }); + expect(await dataGrid.isShowingDocViewer()).to.be(true); + await openLensEditFlyout(); + expect(await dataGrid.isShowingDocViewer()).to.be(false); + expect(await isLensEditFlyoutOpen()).to.be(true); + }); + + it('ESQL docs flyout should get dismissed on opening doc viewer flyout', async function () { + await esql.openQuickReferenceFlyout(); + expect(await esql.isOpenQuickReferenceFlyout()).to.be(true); + await dataGrid.clickRowToggle({ rowIndex: 0 }); + expect(await dataGrid.isShowingDocViewer()).to.be(true); + expect(await esql.isOpenQuickReferenceFlyout()).to.be(false); + }); + + it('ESQL docs flyout should get dismissed on opening Lens Edit flyout', async function () { + await esql.openQuickReferenceFlyout(); + expect(await esql.isOpenQuickReferenceFlyout()).to.be(true); + await openLensEditFlyout(); + expect(await isLensEditFlyoutOpen()).to.be(true); + expect(await esql.isOpenQuickReferenceFlyout()).to.be(false); + }); + + it('Lens Edit flyout should get dismissed on opening doc viewer flyout', async function () { + await openLensEditFlyout(); + expect(await isLensEditFlyoutOpen()).to.be(true); + await dataGrid.clickRowToggle({ rowIndex: 0 }); + expect(await dataGrid.isShowingDocViewer()).to.be(true); + expect(await isLensEditFlyoutOpen()).to.be(false); + }); + }); +} diff --git a/test/functional/apps/discover/group8/index.ts b/test/functional/apps/discover/group8/index.ts index 7eb0f9d3b086..14b544e2c201 100644 --- a/test/functional/apps/discover/group8/index.ts +++ b/test/functional/apps/discover/group8/index.ts @@ -24,5 +24,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_default_route')); loadTestFile(require.resolve('./_hide_announcements')); + loadTestFile(require.resolve('./_flyouts')); }); } diff --git a/test/functional/services/esql.ts b/test/functional/services/esql.ts index 81ccb22d208e..63836d2c5d2f 100644 --- a/test/functional/services/esql.ts +++ b/test/functional/services/esql.ts @@ -50,4 +50,23 @@ export class ESQLService extends FtrService { const toggle = await row.findByTestSubject('ESQLEditor-queryHistory-runQuery-button'); await toggle.click(); } + + public async openHelpMenu() { + await this.testSubjects.click('esql-menu-button'); + await this.retry.waitFor('popover to appear', async () => { + return await this.testSubjects.exists('esql-quick-reference'); + }); + } + + public async isOpenQuickReferenceFlyout() { + return await this.testSubjects.exists('esqlInlineDocumentationFlyout'); + } + + public async openQuickReferenceFlyout() { + await this.openHelpMenu(); + await this.testSubjects.click('esql-quick-reference'); + await this.retry.waitFor('quick reference to appear', async () => { + return await this.isOpenQuickReferenceFlyout(); + }); + } } diff --git a/versions.json b/versions.json index b92cb052dfc3..b2dc1d40794e 100644 --- a/versions.json +++ b/versions.json @@ -14,7 +14,7 @@ "previousMinor": true }, { - "version": "8.15.2", + "version": "8.15.3", "branch": "8.15", "previousMajor": true }, diff --git a/x-pack/examples/triggers_actions_ui_example/public/application.tsx b/x-pack/examples/triggers_actions_ui_example/public/application.tsx index 49871c9e46ce..4a429fbfd58d 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/application.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/application.tsx @@ -38,16 +38,14 @@ import { RuleStatusFilterSandbox } from './components/rule_status_filter_sandbox import { AlertsTableSandbox } from './components/alerts_table_sandbox'; import { RulesSettingsLinkSandbox } from './components/rules_settings_link_sandbox'; -import { RuleActionsSandbox } from './components/rule_form/rule_actions_sandbox'; -import { RuleDetailsSandbox } from './components/rule_form/rule_details_sandbox'; - export interface TriggersActionsUiExampleComponentParams { http: CoreStart['http']; - notification: CoreStart['notifications']; + notifications: CoreStart['notifications']; application: CoreStart['application']; docLinks: CoreStart['docLinks']; i18n: CoreStart['i18n']; theme: CoreStart['theme']; + settings: CoreStart['settings']; history: ScopedHistory; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; data: DataPublicPluginStart; @@ -62,7 +60,8 @@ const TriggersActionsUiExampleApp = ({ triggersActionsUi, http, application, - notification, + notifications, + settings, docLinks, i18n, theme, @@ -192,7 +191,7 @@ const TriggersActionsUiExampleApp = ({ plugins={{ http, application, - notification, + notifications, docLinks, i18n, theme, @@ -200,7 +199,9 @@ const TriggersActionsUiExampleApp = ({ data, dataViews, unifiedSearch, + settings, ruleTypeRegistry: triggersActionsUi.ruleTypeRegistry, + actionTypeRegistry: triggersActionsUi.actionTypeRegistry, }} returnUrl={application.getUrlForApp('triggersActionsUiExample')} /> @@ -216,7 +217,7 @@ const TriggersActionsUiExampleApp = ({ plugins={{ http, application, - notification, + notifications, docLinks, theme, i18n, @@ -224,31 +225,15 @@ const TriggersActionsUiExampleApp = ({ data, dataViews, unifiedSearch, + settings, ruleTypeRegistry: triggersActionsUi.ruleTypeRegistry, + actionTypeRegistry: triggersActionsUi.actionTypeRegistry, }} returnUrl={application.getUrlForApp('triggersActionsUiExample')} /> )} /> - ( - - - - )} - /> - ( - - - - )} - /> @@ -262,7 +247,7 @@ export const renderApp = ( deps: TriggersActionsUiExamplePublicStartDeps, { appBasePath, element, history }: AppMountParameters ) => { - const { http, notifications, docLinks, application, i18n, theme } = core; + const { http, notifications, docLinks, application, i18n, theme, settings } = core; const { triggersActionsUi } = deps; const { ruleTypeRegistry, actionTypeRegistry } = triggersActionsUi; @@ -281,11 +266,12 @@ export const renderApp = ( { - return {}} />; -}; diff --git a/x-pack/examples/triggers_actions_ui_example/public/components/rule_form/rule_details_sandbox.tsx b/x-pack/examples/triggers_actions_ui_example/public/components/rule_form/rule_details_sandbox.tsx deleted file mode 100644 index 56397d6030bf..000000000000 --- a/x-pack/examples/triggers_actions_ui_example/public/components/rule_form/rule_details_sandbox.tsx +++ /dev/null @@ -1,13 +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 { RuleDetails } from '@kbn/alerts-ui-shared/src/rule_form'; - -export const RuleDetailsSandbox = () => { - return ; -}; diff --git a/x-pack/examples/triggers_actions_ui_example/public/components/sidebar.tsx b/x-pack/examples/triggers_actions_ui_example/public/components/sidebar.tsx index 7faaae11ef0f..1d73a88d8ee2 100644 --- a/x-pack/examples/triggers_actions_ui_example/public/components/sidebar.tsx +++ b/x-pack/examples/triggers_actions_ui_example/public/components/sidebar.tsx @@ -89,16 +89,6 @@ export const Sidebar = ({ history }: { history: ScopedHistory }) => { name: 'Rule Edit', onClick: () => history.push('/rule/edit/test'), }, - { - id: 'rule-actions', - name: 'Rule Actions', - onClick: () => history.push('/rule_actions'), - }, - { - id: 'rule-details', - name: 'Rule Details', - onClick: () => history.push('/rule_details'), - }, ], }, ]} diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts index 58f08d8e50f8..02294bdd870f 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.test.ts @@ -5,7 +5,13 @@ * 2.0. */ -import { isAllowed, isAnonymized, isDenied, getIsDataAnonymizable } from '.'; +import { + isAllowed, + isAnonymized, + isDenied, + getIsDataAnonymizable, + replaceAnonymizedValuesWithOriginalValues, +} from '.'; const anonymizationFields = [ { id: 'fieldName1', field: 'fieldName1', allowed: true, anonymized: false }, @@ -91,4 +97,41 @@ describe('helpers', () => { expect(isAnonymized({ anonymizationFields: [], field: 'user.name' })).toBe(false); }); }); + + describe('replaceAnonymizedValuesWithOriginalValues', () => { + const replacements = { + '3541b730-1dce-4937-b63f-0d618ea1cc5f': 'not-an-administrator', + 'b222e892-431e-4e4f-9295-2ba92ef9d12d': 'domain-controller', + }; + + it('replaces anonymized values with original values', () => { + const messageContent = + 'User {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} added a member to the Administrators group on host {{ host.name b222e892-431e-4e4f-9295-2ba92ef9d12d }}'; + + const result = replaceAnonymizedValuesWithOriginalValues({ messageContent, replacements }); + + expect(result).toEqual( + 'User {{ user.name not-an-administrator }} added a member to the Administrators group on host {{ host.name domain-controller }}' + ); + }); + + it('returns the original messageContent if no replacements are found', () => { + const messageContent = 'There are no replacements applicable to this message'; + + const result = replaceAnonymizedValuesWithOriginalValues({ messageContent, replacements }); + + expect(result).toEqual(messageContent); + }); + + it('replaces multiple occurrences of the same replacement key', () => { + const messageContent = + 'User {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} added a member to the Administrators group on host {{ host.name b222e892-431e-4e4f-9295-2ba92ef9d12d }}, which is unusual because {{ user.name 3541b730-1dce-4937-b63f-0d618ea1cc5f }} is not a member of the Administrators group.'; + + const result = replaceAnonymizedValuesWithOriginalValues({ messageContent, replacements }); + + expect(result).toEqual( + 'User {{ user.name not-an-administrator }} added a member to the Administrators group on host {{ host.name domain-controller }}, which is unusual because {{ user.name not-an-administrator }} is not a member of the Administrators group.' + ); + }); + }); }); diff --git a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts index b6bdb5009364..62f190f3d37e 100644 --- a/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts +++ b/x-pack/packages/kbn-elastic-assistant-common/impl/data_anonymization/helpers/index.ts @@ -42,12 +42,11 @@ export const replaceAnonymizedValuesWithOriginalValues = ({ messageContent: string; replacements: Replacements; }): string => - replacements != null - ? Object.keys(replacements).reduce((acc, key) => { - const value = replacements[key]; - return acc.replaceAll(key, value); - }, messageContent) - : messageContent; + Object.keys(replacements).reduce((acc, key) => { + const value = replacements[key]; + + return acc.replaceAll(key, value); + }, messageContent); export const replaceOriginalValuesWithUuidValues = ({ messageContent, diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx index 319ee812a3cf..cefc008eba99 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx @@ -95,6 +95,20 @@ export const EvaluationSettings: React.FC = React.memo(() => { }, [setSelectedDatasetOptions] ); + const onDatasetCreateOption = useCallback( + (searchValue: string) => { + const normalizedSearchValue = searchValue.trim().toLowerCase(); + if (!normalizedSearchValue) { + return; + } + const newOption = { + label: searchValue, + }; + + setSelectedDatasetOptions([newOption]); + }, + [setSelectedDatasetOptions] + ); // Predictions // Connectors / Models @@ -244,6 +258,7 @@ export const EvaluationSettings: React.FC = React.memo(() => { options={datasetOptions} selectedOptions={selectedDatasetOptions} onChange={onDatasetOptionsChange} + onCreateOption={onDatasetCreateOption} compressed={true} /> diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts index b1adb6296b2a..62902d0f1409 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/translations.ts @@ -163,7 +163,8 @@ export const EVALUATOR_DATASET_LABEL = i18n.translate( export const LANGSMITH_DATASET_DESCRIPTION = i18n.translate( 'xpack.elasticAssistant.assistant.settings.evaluationSettings.langsmithDatasetDescription', { - defaultMessage: 'Name of dataset hosted on LangSmith to evaluate.', + defaultMessage: + 'Name of dataset hosted on LangSmith to evaluate. Must manually enter on cloud environments.', } ); diff --git a/x-pack/performance/journeys_e2e/web_logs_dashboard_dataview.ts b/x-pack/performance/journeys_e2e/web_logs_dashboard_dataview.ts new file mode 100644 index 000000000000..1c0ae9e061ae --- /dev/null +++ b/x-pack/performance/journeys_e2e/web_logs_dashboard_dataview.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Journey } from '@kbn/journeys'; +import { subj } from '@kbn/test-subj-selector'; + +export const journey = new Journey({ + esArchives: ['x-pack/performance/es_archives/sample_data_logs'], + kbnArchives: ['x-pack/performance/kbn_archives/logs_no_map_dashboard_dataview'], +}) + + .step('Go to Dashboards Page', async ({ page, kbnUrl, kibanaPage }) => { + await page.goto(kbnUrl.get(`/app/dashboards`)); + await kibanaPage.waitForListViewTable(); + }) + + .step('Go to Web Logs Dashboard', async ({ page, kibanaPage }) => { + await page.click(subj('dashboardListingTitleLink-[Logs]-Web-Traffic')); + await kibanaPage.waitForVisualizations({ count: 11 }); + }); diff --git a/x-pack/performance/kbn_archives/logs_no_map_dashboard_dataview.json b/x-pack/performance/kbn_archives/logs_no_map_dashboard_dataview.json new file mode 100644 index 000000000000..fa2344945255 --- /dev/null +++ b/x-pack/performance/kbn_archives/logs_no_map_dashboard_dataview.json @@ -0,0 +1,367 @@ +{ + "attributes": { + "fieldFormatMap": "{\"hour_of_day\":{}}", + "name": "Kibana Sample Data Logs", + "runtimeFieldMap": "{\"hour_of_day\":{\"type\":\"long\",\"script\":{\"source\":\"emit(doc['timestamp'].value.getHour());\"}}}", + "timeFieldName": "timestamp", + "title": "kibana_sample_data_logs" + }, + "coreMigrationVersion": "8.6.0", + "created_at": "2022-10-26T13:11:17.374Z", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "migrationVersion": { + "index-pattern": "8.0.0" + }, + "references": [], + "type": "index-pattern", + "updated_at": "2022-10-26T13:11:17.374Z", + "version": "WzEzNiwxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "[Logs] Machine OS and Destination Sankey Chart", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"[Logs] Machine OS and Destination Sankey Chart\",\"type\":\"vega\",\"params\":{\"spec\":\"{ \\n $schema: https://vega.github.io/schema/vega/v5.json\\n data: [\\n\\t{\\n \\t// query ES based on the currently selected time range and filter string\\n \\tname: rawData\\n \\turl: {\\n \\t%context%: true\\n \\t%timefield%: timestamp\\n \\tindex: kibana_sample_data_logs\\n \\tbody: {\\n \\tsize: 0\\n \\taggs: {\\n \\ttable: {\\n \\tcomposite: {\\n \\tsize: 10000\\n \\tsources: [\\n \\t{\\n \\tstk1: {\\n \\tterms: {field: \\\"machine.os.keyword\\\"}\\n \\t}\\n \\t}\\n \\t{\\n \\tstk2: {\\n \\tterms: {field: \\\"geo.dest\\\"}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t}\\n \\t// From the result, take just the data we are interested in\\n \\tformat: {property: \\\"aggregations.table.buckets\\\"}\\n \\t// Convert key.stk1 -> stk1 for simpler access below\\n \\ttransform: [\\n \\t{type: \\\"formula\\\", expr: \\\"datum.key.stk1\\\", as: \\\"stk1\\\"}\\n \\t{type: \\\"formula\\\", expr: \\\"datum.key.stk2\\\", as: \\\"stk2\\\"}\\n \\t{type: \\\"formula\\\", expr: \\\"datum.doc_count\\\", as: \\\"size\\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: nodes\\n \\tsource: rawData\\n \\ttransform: [\\n \\t// when a country is selected, filter out unrelated data\\n \\t{\\n \\ttype: filter\\n \\texpr: !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\n \\t}\\n \\t// Set new key for later lookups - identifies each node\\n \\t{type: \\\"formula\\\", expr: \\\"datum.stk1+datum.stk2\\\", as: \\\"key\\\"}\\n \\t// instead of each table row, create two new rows,\\n \\t// one for the source (stack=stk1) and one for destination node (stack=stk2).\\n \\t// The country code stored in stk1 and stk2 fields is placed into grpId field.\\n \\t{\\n \\ttype: fold\\n \\tfields: [\\\"stk1\\\", \\\"stk2\\\"]\\n \\tas: [\\\"stack\\\", \\\"grpId\\\"]\\n \\t}\\n \\t// Create a sortkey, different for stk1 and stk2 stacks.\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\n \\tas: sortField\\n \\t}\\n \\t// Calculate y0 and y1 positions for stacking nodes one on top of the other,\\n \\t// independently for each stack, and ensuring they are in the proper order,\\n \\t// alphabetical from the top (reversed on the y axis)\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\\"stack\\\"]\\n \\tsort: {field: \\\"sortField\\\", order: \\\"descending\\\"}\\n \\tfield: size\\n \\t}\\n \\t// calculate vertical center point for each node, used to draw edges\\n \\t{type: \\\"formula\\\", expr: \\\"(datum.y0+datum.y1)/2\\\", as: \\\"yc\\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: groups\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// combine all nodes into country groups, summing up the doc counts\\n \\t{\\n \\ttype: aggregate\\n \\tgroupby: [\\\"stack\\\", \\\"grpId\\\"]\\n \\tfields: [\\\"size\\\"]\\n \\tops: [\\\"sum\\\"]\\n \\tas: [\\\"total\\\"]\\n \\t}\\n \\t// re-calculate the stacking y0,y1 values\\n \\t{\\n \\ttype: stack\\n \\tgroupby: [\\\"stack\\\"]\\n \\tsort: {field: \\\"grpId\\\", order: \\\"descending\\\"}\\n \\tfield: total\\n \\t}\\n \\t// project y0 and y1 values to screen coordinates\\n \\t// doing it once here instead of doing it several times in marks\\n \\t{type: \\\"formula\\\", expr: \\\"scale('y', datum.y0)\\\", as: \\\"scaledY0\\\"}\\n \\t{type: \\\"formula\\\", expr: \\\"scale('y', datum.y1)\\\", as: \\\"scaledY1\\\"}\\n \\t// boolean flag if the label should be on the right of the stack\\n \\t{type: \\\"formula\\\", expr: \\\"datum.stack == 'stk1'\\\", as: \\\"rightLabel\\\"}\\n \\t// Calculate traffic percentage for this country using \\\"y\\\" scale\\n \\t// domain upper bound, which represents the total traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.total/domain('y')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n\\t{\\n \\t// This is a temp lookup table with all the 'stk2' stack nodes\\n \\tname: destinationNodes\\n \\tsource: nodes\\n \\ttransform: [\\n \\t{type: \\\"filter\\\", expr: \\\"datum.stack == 'stk2'\\\"}\\n \\t]\\n\\t}\\n\\t{\\n \\tname: edges\\n \\tsource: nodes\\n \\ttransform: [\\n \\t// we only want nodes from the left stack\\n \\t{type: \\\"filter\\\", expr: \\\"datum.stack == 'stk1'\\\"}\\n \\t// find corresponding node from the right stack, keep it as \\\"target\\\"\\n \\t{\\n \\ttype: lookup\\n \\tfrom: destinationNodes\\n \\tkey: key\\n \\tfields: [\\\"key\\\"]\\n \\tas: [\\\"target\\\"]\\n \\t}\\n \\t// calculate SVG link path between stk1 and stk2 stacks for the node pair\\n \\t{\\n \\ttype: linkpath\\n \\torient: horizontal\\n \\tshape: diagonal\\n \\tsourceY: {expr: \\\"scale('y', datum.yc)\\\"}\\n \\tsourceX: {expr: \\\"scale('x', 'stk1') + bandwidth('x')\\\"}\\n \\ttargetY: {expr: \\\"scale('y', datum.target.yc)\\\"}\\n \\ttargetX: {expr: \\\"scale('x', 'stk2')\\\"}\\n \\t}\\n \\t// A little trick to calculate the thickness of the line.\\n \\t// The value needs to be the same as the hight of the node, but scaling\\n \\t// size to screen's height gives inversed value because screen's Y\\n \\t// coordinate goes from the top to the bottom, whereas the graph's Y=0\\n \\t// is at the bottom. So subtracting scaled doc count from screen height\\n \\t// (which is the \\\"lower\\\" bound of the \\\"y\\\" scale) gives us the right value\\n \\t{\\n \\ttype: formula\\n \\texpr: range('y')[0]-scale('y', datum.size)\\n \\tas: strokeWidth\\n \\t}\\n \\t// Tooltip needs individual link's percentage of all traffic\\n \\t{\\n \\ttype: formula\\n \\texpr: datum.size/domain('y')[1]\\n \\tas: percentage\\n \\t}\\n \\t]\\n\\t}\\n ]\\n scales: [\\n\\t{\\n \\t// calculates horizontal stack positioning\\n \\tname: x\\n \\ttype: band\\n \\trange: width\\n \\tdomain: [\\\"stk1\\\", \\\"stk2\\\"]\\n \\tpaddingOuter: 0.05\\n \\tpaddingInner: 0.95\\n\\t}\\n\\t{\\n \\t// this scale goes up as high as the highest y1 value of all nodes\\n \\tname: y\\n \\ttype: linear\\n \\trange: height\\n \\tdomain: {data: \\\"nodes\\\", field: \\\"y1\\\"}\\n\\t}\\n\\t{\\n \\t// use rawData to ensure the colors stay the same when clicking.\\n \\tname: color\\n \\ttype: ordinal\\n \\trange: category\\n \\tdomain: {data: \\\"rawData\\\", field: \\\"stk1\\\"}\\n\\t}\\n\\t{\\n \\t// this scale is used to map internal ids (stk1, stk2) to stack names\\n \\tname: stackNames\\n \\ttype: ordinal\\n \\trange: [\\\"Source\\\", \\\"Destination\\\"]\\n \\tdomain: [\\\"stk1\\\", \\\"stk2\\\"]\\n\\t}\\n ]\\n axes: [\\n\\t{\\n \\t// x axis should use custom label formatting to print proper stack names\\n \\torient: bottom\\n \\tscale: x\\n \\tencode: {\\n \\tlabels: {\\n \\tupdate: {\\n \\ttext: {scale: \\\"stackNames\\\", field: \\\"value\\\"}\\n \\t}\\n \\t}\\n \\t}\\n\\t}\\n\\t{orient: \\\"left\\\", scale: \\\"y\\\"}\\n ]\\n marks: [\\n\\t{\\n \\t// draw the connecting line between stacks\\n \\ttype: path\\n \\tname: edgeMark\\n \\tfrom: {data: \\\"edges\\\"}\\n \\t// this prevents some autosizing issues with large strokeWidth for paths\\n \\tclip: true\\n \\tencode: {\\n \\tupdate: {\\n \\t// By default use color of the left node, except when showing traffic\\n \\t// from just one country, in which case use destination color.\\n \\tstroke: [\\n \\t{\\n \\ttest: groupSelector && groupSelector.stack=='stk1'\\n \\tscale: color\\n \\tfield: stk2\\n \\t}\\n \\t{scale: \\\"color\\\", field: \\\"stk1\\\"}\\n \\t]\\n \\tstrokeWidth: {field: \\\"strokeWidth\\\"}\\n \\tpath: {field: \\\"path\\\"}\\n \\t// when showing all traffic, and hovering over a country,\\n \\t// highlight the traffic from that country.\\n \\tstrokeOpacity: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.9 : 0.3\\n \\t}\\n \\t// Ensure that the hover-selected edges show on top\\n \\tzindex: {\\n \\tsignal: !groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\n \\t}\\n \\t// format tooltip string\\n \\ttooltip: {\\n \\tsignal: datum.stk1 + ' → ' + datum.stk2 + '\\t' + format(datum.size, ',.0f') + ' (' + format(datum.percentage, '.1%') + ')'\\n \\t}\\n \\t}\\n \\t// Simple mouseover highlighting of a single line\\n \\thover: {\\n \\tstrokeOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw stack groups (countries)\\n \\ttype: rect\\n \\tname: groupMark\\n \\tfrom: {data: \\\"groups\\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tfill: {scale: \\\"color\\\", field: \\\"grpId\\\"}\\n \\twidth: {scale: \\\"x\\\", band: 1}\\n \\t}\\n \\tupdate: {\\n \\tx: {scale: \\\"x\\\", field: \\\"stack\\\"}\\n \\ty: {field: \\\"scaledY0\\\"}\\n \\ty2: {field: \\\"scaledY1\\\"}\\n \\tfillOpacity: {value: 0.6}\\n \\ttooltip: {\\n \\tsignal: datum.grpId + ' ' + format(datum.total, ',.0f') + ' (' + format(datum.percentage, '.1%') + ')'\\n \\t}\\n \\t}\\n \\thover: {\\n \\tfillOpacity: {value: 1}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// draw country code labels on the inner side of the stack\\n \\ttype: text\\n \\tfrom: {data: \\\"groups\\\"}\\n \\t// don't process events for the labels - otherwise line mouseover is unclean\\n \\tinteractive: false\\n \\tencode: {\\n \\tupdate: {\\n \\t// depending on which stack it is, position x with some padding\\n \\tx: {\\n \\tsignal: scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\n \\t}\\n \\t// middle of the group\\n \\tyc: {signal: \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"}\\n \\talign: {signal: \\\"datum.rightLabel ? 'left' : 'right'\\\"}\\n \\tbaseline: {value: \\\"middle\\\"}\\n \\tfontWeight: {value: \\\"bold\\\"}\\n \\t// only show text label if the group's height is large enough\\n \\ttext: {signal: \\\"abs(datum.scaledY0-datum.scaledY1) > 13 ? datum.grpId : ''\\\"}\\n \\t}\\n \\t}\\n\\t}\\n\\t{\\n \\t// Create a \\\"show all\\\" button. Shown only when a country is selected.\\n \\ttype: group\\n \\tdata: [\\n \\t// We need to make the button show only when groupSelector signal is true.\\n \\t// Each mark is drawn as many times as there are elements in the backing data.\\n \\t// Which means that if values list is empty, it will not be drawn.\\n \\t// Here I create a data source with one empty object, and filter that list\\n \\t// based on the signal value. This can only be done in a group.\\n \\t{\\n \\tname: dataForShowAll\\n \\tvalues: [{}]\\n \\ttransform: [{type: \\\"filter\\\", expr: \\\"groupSelector\\\"}]\\n \\t}\\n \\t]\\n \\t// Set button size and positioning\\n \\tencode: {\\n \\tenter: {\\n \\txc: {signal: \\\"width/2\\\"}\\n \\ty: {value: 30}\\n \\twidth: {value: 80}\\n \\theight: {value: 30}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\t// This group is shown as a button with rounded corners.\\n \\ttype: group\\n \\t// mark name allows signal capturing\\n \\tname: groupReset\\n \\t// Only shows button if dataForShowAll has values.\\n \\tfrom: {data: \\\"dataForShowAll\\\"}\\n \\tencode: {\\n \\tenter: {\\n \\tcornerRadius: {value: 6}\\n \\tfill: {value: \\\"#F5F7FA\\\"}\\n \\tstroke: {value: \\\"#c1c1c1\\\"}\\n \\tstrokeWidth: {value: 2}\\n \\t// use parent group's size\\n \\theight: {\\n \\tfield: {group: \\\"height\\\"}\\n \\t}\\n \\twidth: {\\n \\tfield: {group: \\\"width\\\"}\\n \\t}\\n \\t}\\n \\tupdate: {\\n \\t// groups are transparent by default\\n \\topacity: {value: 1}\\n \\t}\\n \\thover: {\\n \\topacity: {value: 0.7}\\n \\t}\\n \\t}\\n \\tmarks: [\\n \\t{\\n \\ttype: text\\n \\t// if true, it will prevent clicking on the button when over text.\\n \\tinteractive: false\\n \\tencode: {\\n \\tenter: {\\n \\t// center text in the paren group\\n \\txc: {\\n \\tfield: {group: \\\"width\\\"}\\n \\tmult: 0.5\\n \\t}\\n \\tyc: {\\n \\tfield: {group: \\\"height\\\"}\\n \\tmult: 0.5\\n \\toffset: 2\\n \\t}\\n \\talign: {value: \\\"center\\\"}\\n \\tbaseline: {value: \\\"middle\\\"}\\n \\tfontWeight: {value: \\\"bold\\\"}\\n \\ttext: {value: \\\"Show All\\\"}\\n \\t}\\n \\t}\\n \\t}\\n \\t]\\n \\t}\\n \\t]\\n\\t}\\n ]\\n signals: [\\n\\t{\\n \\t// used to highlight traffic to/from the same country\\n \\tname: groupHover\\n \\tvalue: {}\\n \\ton: [\\n \\t{\\n \\tevents: @groupMark:mouseover\\n \\tupdate: \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n \\t}\\n \\t{events: \\\"mouseout\\\", update: \\\"{}\\\"}\\n \\t]\\n\\t}\\n\\t// used to filter only the data related to the selected country\\n\\t{\\n \\tname: groupSelector\\n \\tvalue: false\\n \\ton: [\\n \\t{\\n \\t// Clicking groupMark sets this signal to the filter values\\n \\tevents: @groupMark:click!\\n \\tupdate: \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n \\t}\\n \\t{\\n \\t// Clicking \\\"show all\\\" button, or double-clicking anywhere resets it\\n \\tevents: [\\n \\t{type: \\\"click\\\", markname: \\\"groupReset\\\"}\\n \\t{type: \\\"dblclick\\\"}\\n \\t]\\n \\tupdate: \\\"false\\\"\\n \\t}\\n \\t]\\n\\t}\\n ]\\n}\\n\"},\"aggs\":[]}" + }, + "coreMigrationVersion": "8.6.0", + "created_at": "2022-10-26T13:11:17.374Z", + "id": "7cbd2350-2223-11e8-b802-5bcf64c2cfb4", + "migrationVersion": { + "visualization": "8.5.0" + }, + "references": [], + "type": "visualization", + "updated_at": "2022-10-26T13:11:17.374Z", + "version": "WzEzMywxXQ==" +} + +{ + "attributes": { + "description": "", + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}" + }, + "title": "[Logs] Unique Destination Heatmap", + "uiStateJSON": "{}", + "version": 1, + "visState": "{\"title\":\"[Logs] Unique Destination Heatmap\",\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n $schema: https://vega.github.io/schema/vega-lite/v5.json\\n data: {\\n url: {\\n %context%: true\\n %timefield%: @timestamp\\n index: kibana_sample_data_logs\\n body: {\\n aggs: {\\n countries: {\\n terms: {\\n field: geo.dest\\n size: 25\\n }\\n aggs: {\\n hours: {\\n histogram: {\\n field: hour_of_day\\n interval: 1\\n }\\n aggs: {\\n unique: {\\n cardinality: {\\n field: clientip\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n size: 0\\n }\\n }\\n format: {property: \\\"aggregations.countries.buckets\\\"}\\n }\\n \\n transform: [\\n {\\n flatten: [\\\"hours.buckets\\\"],\\n as: [\\\"buckets\\\"]\\n },\\n {\\n filter: \\\"datum.buckets.unique.value > 0\\\"\\n }\\n ]\\n\\n mark: {\\n type: rect\\n tooltip: {\\n expr: \\\"{\\\\\\\"Unique Visitors\\\\\\\": datum.buckets.unique.value,\\\\\\\"geo.src\\\\\\\": datum.key,\\\\\\\"Hour\\\\\\\": datum.buckets.key}\\\"\\n }\\n }\\n\\n encoding: {\\n x: {\\n field: buckets.key\\n type: nominal\\n scale: {\\n domain: {\\n expr: \\\"sequence(0, 24)\\\"\\n }\\n }\\n axis: {\\n title: false\\n labelAngle: 0\\n }\\n }\\n y: {\\n field: key\\n type: nominal\\n sort: {\\n field: -buckets.unique.value\\n }\\n axis: {title: false}\\n }\\n color: {\\n field: buckets.unique.value\\n type: quantitative\\n axis: {title: false}\\n scale: {\\n scheme: blues\\n }\\n }\\n }\\n}\\n\"}}" + }, + "coreMigrationVersion": "8.6.0", + "created_at": "2022-10-26T13:11:17.374Z", + "id": "cb099a20-ea66-11eb-9425-113343a037e3", + "migrationVersion": { + "visualization": "8.5.0" + }, + "references": [], + "type": "visualization", + "updated_at": "2022-10-26T13:11:17.374Z", + "version": "WzEzMCwxXQ==" +} + +{ + "attributes": { + "state": { + "datasourceStates": { + "formBased": { + "layers": { + "7d9a32b1-8cc2-410c-83a5-2eb66a3f0321": { + "columnOrder": [ + "a8511a62-2b78-4ba4-9425-a417df6e059f", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X0", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X1", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X2", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X3" + ], + "columns": { + "a8511a62-2b78-4ba4-9425-a417df6e059f": { + "dataType": "number", + "isBucketed": true, + "label": "bytes", + "operationType": "range", + "params": { + "maxBars": "auto", + "ranges": [ + { + "from": 0, + "label": "", + "to": 1000 + } + ], + "type": "histogram" + }, + "scale": "interval", + "sourceField": "bytes" + }, + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "% of visits", + "operationType": "formula", + "params": { + "format": { + "id": "percent", + "params": { + "decimals": 1 + } + }, + "formula": "count() / overall_sum(count())", + "isFormulaBroken": false + }, + "references": [ + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X3" + ], + "scale": "ratio" + }, + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X0": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of count() / overall_sum(count())", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X1": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of count() / overall_sum(count())", + "operationType": "count", + "scale": "ratio", + "sourceField": "___records___" + }, + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X2": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of count() / overall_sum(count())", + "operationType": "overall_sum", + "references": [ + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X1" + ], + "scale": "ratio" + }, + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X3": { + "customLabel": true, + "dataType": "number", + "isBucketed": false, + "label": "Part of count() / overall_sum(count())", + "operationType": "math", + "params": { + "tinymathAst": { + "args": [ + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X0", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X2" + ], + "location": { + "max": 30, + "min": 0 + }, + "name": "divide", + "text": "count() / overall_sum(count())", + "type": "function" + } + }, + "references": [ + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X0", + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260X2" + ], + "scale": "ratio" + } + }, + "incompleteColumns": {} + } + } + } + }, + "filters": [], + "query": { + "language": "kuery", + "query": "" + }, + "visualization": { + "axisTitlesVisibilitySettings": { + "x": false, + "yLeft": false, + "yRight": true + }, + "fittingFunction": "None", + "gridlinesVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "layers": [ + { + "accessors": [ + "b5f3dc78-dba8-4db8-87b6-24a0b9cca260" + ], + "layerId": "7d9a32b1-8cc2-410c-83a5-2eb66a3f0321", + "layerType": "data", + "position": "top", + "seriesType": "bar_stacked", + "showGridlines": false, + "xAccessor": "a8511a62-2b78-4ba4-9425-a417df6e059f" + } + ], + "legend": { + "isVisible": true, + "legendSize": "auto", + "position": "right" + }, + "preferredSeriesType": "bar_stacked", + "tickLabelsVisibilitySettings": { + "x": true, + "yLeft": true, + "yRight": true + }, + "valueLabels": "hide", + "yLeftExtent": { + "mode": "full" + }, + "yRightExtent": { + "mode": "full" + } + } + }, + "title": "[Logs] Bytes distribution", + "visualizationType": "lnsXY" + }, + "coreMigrationVersion": "8.6.0", + "created_at": "2022-10-26T13:11:17.374Z", + "id": "16b1d7d0-ea71-11eb-8b4b-f7b600de0f7d", + "migrationVersion": { + "lens": "8.6.0" + }, + "references": [ + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "indexpattern-datasource-layer-7d9a32b1-8cc2-410c-83a5-2eb66a3f0321", + "type": "index-pattern" + } + ], + "type": "lens", + "updated_at": "2022-10-26T13:11:17.374Z", + "version": "WzEzNSwxXQ==" +} + +{ + "attributes": { + "version": 2, + "controlGroupInput": { + "chainingSystem": "HIERARCHICAL", + "controlStyle": "oneLine", + "showApplySelections": false, + "ignoreParentSettingsJSON": "{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}", + "panelsJSON": "{\"612f8db8-9ba9-41cf-a809-d133fe9b83a8\":{\"grow\":true,\"order\":0,\"type\":\"optionsListControl\",\"width\":\"small\",\"explicitInput\":{\"id\":\"612f8db8-9ba9-41cf-a809-d133fe9b83a8\",\"dataViewId\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"fieldName\":\"geo.src\",\"title\":\"Source Country\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"9807212f-5078-4c42-879c-6f28b3033fc9\":{\"grow\":true,\"order\":1,\"type\":\"optionsListControl\",\"width\":\"small\",\"explicitInput\":{\"id\":\"9807212f-5078-4c42-879c-6f28b3033fc9\",\"dataViewId\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"fieldName\":\"machine.os.keyword\",\"title\":\"OS\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"sort\":{\"by\":\"_count\",\"direction\":\"desc\"}}},\"6bf7a1b4-282e-43ac-aa46-81b97fa3acae\":{\"grow\":true,\"order\":2,\"type\":\"rangeSliderControl\",\"width\":\"small\",\"explicitInput\":{\"id\":\"6bf7a1b4-282e-43ac-aa46-81b97fa3acae\",\"dataViewId\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"fieldName\":\"bytes\",\"title\":\"Bytes\",\"step\":1}}}" + }, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}" + }, + "description": "Analyze mock web traffic log data for Elastic's website", + "refreshInterval": { + "pause": true, + "value": 60000 + }, + "timeRestore": true, + "optionsJSON": "{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}", + "panelsJSON": "[{\"type\":\"lens\",\"gridData\":{\"x\":36,\"y\":0,\"w\":12,\"h\":7,\"i\":\"11\"},\"panelIndex\":\"11\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsMetric\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-28b89898-3feb-415a-8dd9-74d755ac7c2a\"}],\"state\":{\"visualization\":{\"layerId\":\"28b89898-3feb-415a-8dd9-74d755ac7c2a\",\"layerType\":\"data\",\"metricAccessor\":\"f92c482e-1eee-4c2a-9338-64fb3eec286a\",\"palette\":{\"name\":\"custom\",\"type\":\"palette\",\"params\":{\"steps\":3,\"name\":\"custom\",\"reverse\":false,\"rangeType\":\"number\",\"rangeMin\":0,\"rangeMax\":null,\"progression\":\"fixed\",\"stops\":[{\"color\":\"#D23115\",\"stop\":500},{\"color\":\"#FCC400\",\"stop\":1000},{\"color\":\"#68BC00\",\"stop\":1658}],\"colorStops\":[{\"color\":\"#D23115\",\"stop\":0},{\"color\":\"#FCC400\",\"stop\":500},{\"color\":\"#68BC00\",\"stop\":1000}],\"continuity\":\"above\",\"maxSteps\":5}}},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"28b89898-3feb-415a-8dd9-74d755ac7c2a\":{\"columns\":{\"f92c482e-1eee-4c2a-9338-64fb3eec286a\":{\"label\":\"Unique Visitors\",\"dataType\":\"number\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"clientip\",\"isBucketed\":false,\"params\":{\"emptyAsNull\":true},\"customLabel\":true}},\"columnOrder\":[\"f92c482e-1eee-4c2a-9338-64fb3eec286a\"],\"incompleteColumns\":{}}}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"hidePanelTitles\":true,\"enhancements\":{}}},{\"type\":\"visualization\",\"gridData\":{\"x\":24,\"y\":14,\"w\":23,\"h\":41,\"i\":\"14\"},\"panelIndex\":\"14\",\"embeddableConfig\":{\"enhancements\":{\"dynamicActions\":{\"events\":[]}}},\"panelRefName\":\"panel_14\"},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":7,\"w\":24,\"h\":7,\"i\":\"15\"},\"panelIndex\":\"15\",\"embeddableConfig\":{\"attributes\":{\"title\":\"[Logs] Response Codes Over Time + Annotations (converted)\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-b38fe501-4b47-4de8-a423-6656d1162174\"},{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"xy-visualization-layer-f265e722-ae38-495c-903c-48aa7931fa82\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"showSingleSeries\":true,\"position\":\"bottom\",\"shouldTruncate\":true,\"maxLines\":1},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"fillOpacity\":0.5,\"yLeftExtent\":{\"mode\":\"full\"},\"yRightExtent\":{\"mode\":\"full\"},\"yLeftScale\":\"linear\",\"yRightScale\":\"linear\",\"axisTitlesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"seriesType\":\"area_percentage_stacked\",\"layerType\":\"data\",\"layerId\":\"b38fe501-4b47-4de8-a423-6656d1162174\",\"accessors\":[\"896c5eb2-81c5-44f1-a4a1-57344161ea62\"],\"yConfig\":[{\"forAccessor\":\"896c5eb2-81c5-44f1-a4a1-57344161ea62\",\"color\":\"rgba(115,216,255,1)\",\"axisMode\":\"left\"}],\"xAccessor\":\"8986e393-d24f-49b0-96ca-118fd66d75e5\",\"splitAccessor\":\"43f5bb0f-c6da-43a0-8a0a-50e9838ed34b\",\"palette\":{\"name\":\"default\",\"type\":\"palette\"}},{\"layerId\":\"f265e722-ae38-495c-903c-48aa7931fa82\",\"layerType\":\"annotations\",\"ignoreGlobalFilters\":true,\"annotations\":[{\"type\":\"query\",\"id\":\"bd7548a0-2223-11e8-832f-d5027f3c8a47\",\"label\":\"Event\",\"key\":{\"type\":\"point_in_time\"},\"color\":\"#D33115\",\"timeField\":\"timestamp\",\"icon\":\"asterisk\",\"filter\":{\"type\":\"kibana_query\",\"query\":\"tags:error AND tags:security\",\"language\":\"lucene\"},\"extraFields\":[\"geo.src\"]}]}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"b38fe501-4b47-4de8-a423-6656d1162174\":{\"columns\":{\"8986e393-d24f-49b0-96ca-118fd66d75e5\":{\"label\":\"timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"43f5bb0f-c6da-43a0-8a0a-50e9838ed34b\":{\"label\":\"Filters\",\"dataType\":\"string\",\"operationType\":\"filters\",\"scale\":\"ordinal\",\"isBucketed\":true,\"params\":{\"filters\":[{\"input\":{\"query\":\"response.keyword >= 200 and response.keyword < 400\",\"language\":\"kuery\"},\"label\":\"HTTP 2xx and 3xx\"},{\"input\":{\"query\":\"response.keyword >= 400 and response.keyword < 500\",\"language\":\"kuery\"},\"label\":\"HTTP 4xx\"},{\"input\":{\"query\":\"response.keyword >= 500\",\"language\":\"kuery\"},\"label\":\"HTTP 5xx\"}]}},\"896c5eb2-81c5-44f1-a4a1-57344161ea62\":{\"label\":\"Response Code Count\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":true},\"customLabel\":true}},\"columnOrder\":[\"8986e393-d24f-49b0-96ca-118fd66d75e5\",\"43f5bb0f-c6da-43a0-8a0a-50e9838ed34b\",\"896c5eb2-81c5-44f1-a4a1-57344161ea62\"],\"incompleteColumns\":{}}}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{},\"hidePanelTitles\":false},\"title\":\"[Logs] Response Codes Over Time + Annotations\"},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":0,\"w\":24,\"h\":7,\"i\":\"343f0bef-0b19-452e-b1c8-59beb18b6f0c\"},\"panelIndex\":\"343f0bef-0b19-452e-b1c8-59beb18b6f0c\",\"embeddableConfig\":{\"hidePanelTitles\":true,\"enhancements\":{\"dynamicActions\":{\"events\":[]}},\"savedVis\":{\"title\":\"[Logs] Markdown Instructions\",\"description\":\"\",\"type\":\"markdown\",\"params\":{\"fontSize\":12,\"openLinksInNewTab\":true,\"markdown\":\"## Sample Logs Data\\nThis dashboard contains sample data for you to play with. You can view it, search it, and interact with the visualizations. For more information about Kibana, check our [docs](https://www.elastic.co/guide/en/kibana/current/index.html).\"},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}}}}},{\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":0,\"w\":12,\"h\":7,\"i\":\"bb94016e-f4a6-49ca-87a9-296a2869d570\"},\"panelIndex\":\"bb94016e-f4a6-49ca-87a9-296a2869d570\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsMetric\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-483defd2-775b-4a62-bdef-496c819bb8ed\"}],\"state\":{\"visualization\":{\"layerId\":\"483defd2-775b-4a62-bdef-496c819bb8ed\",\"layerType\":\"data\",\"metricAccessor\":\"37430d12-7452-4cc9-b035-5cfd4061edf0\"},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"483defd2-775b-4a62-bdef-496c819bb8ed\":{\"columns\":{\"37430d12-7452-4cc9-b035-5cfd4061edf0\":{\"label\":\"Visits\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"customLabel\":true}},\"columnOrder\":[\"37430d12-7452-4cc9-b035-5cfd4061edf0\"],\"incompleteColumns\":{}}}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}}},{\"type\":\"lens\",\"gridData\":{\"x\":24,\"y\":7,\"w\":12,\"h\":7,\"i\":\"01d8e435-91c0-484f-a11e-856747050b0a\"},\"panelIndex\":\"01d8e435-91c0-484f-a11e-856747050b0a\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsMetric\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a\"}],\"state\":{\"visualization\":{\"layerId\":\"f3793bb7-3971-4753-866d-4008e77a9f9a\",\"layerType\":\"data\",\"metricAccessor\":\"71c076a6-e782-4866-b8df-5fd85a41f08b\"},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"f3793bb7-3971-4753-866d-4008e77a9f9a\":{\"columns\":{\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\":{\"label\":\"Part of HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"filter\":{\"query\":\"response.keyword >= 400 and response.keyword < 500\",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":false},\"customLabel\":true},\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\":{\"label\":\"Part of HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":false},\"customLabel\":true},\"71c076a6-e782-4866-b8df-5fd85a41f08bX2\":{\"label\":\"Part of HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"math\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"tinymathAst\":{\"type\":\"function\",\"name\":\"divide\",\"args\":[\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\"],\"location\":{\"min\":0,\"max\":73},\"text\":\"count(kql='response.keyword >= 400 and response.keyword < 500') / count()\"}},\"references\":[\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\"],\"customLabel\":true},\"71c076a6-e782-4866-b8df-5fd85a41f08b\":{\"label\":\"HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"formula\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"formula\":\"count(kql='response.keyword >= 400 and response.keyword < 500') / count()\",\"isFormulaBroken\":false,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":1,\"compact\":true}}},\"references\":[\"71c076a6-e782-4866-b8df-5fd85a41f08bX2\"],\"customLabel\":true}},\"columnOrder\":[\"71c076a6-e782-4866-b8df-5fd85a41f08b\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX2\"],\"incompleteColumns\":{}}}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}}},{\"type\":\"lens\",\"gridData\":{\"x\":36,\"y\":7,\"w\":12,\"h\":7,\"i\":\"8c1456d4-1993-4ba2-b701-04aca02c9fef\"},\"panelIndex\":\"8c1456d4-1993-4ba2-b701-04aca02c9fef\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsMetric\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a\"}],\"state\":{\"visualization\":{\"layerId\":\"f3793bb7-3971-4753-866d-4008e77a9f9a\",\"layerType\":\"data\",\"metricAccessor\":\"71c076a6-e782-4866-b8df-5fd85a41f08b\"},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"f3793bb7-3971-4753-866d-4008e77a9f9a\":{\"columns\":{\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\":{\"label\":\"Part of HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"filter\":{\"query\":\"response.keyword >= 500\",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":false},\"customLabel\":true},\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\":{\"label\":\"Part of HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"params\":{\"emptyAsNull\":false},\"customLabel\":true},\"71c076a6-e782-4866-b8df-5fd85a41f08bX2\":{\"label\":\"Part of HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"math\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"tinymathAst\":{\"type\":\"function\",\"name\":\"divide\",\"args\":[\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\"],\"location\":{\"min\":0,\"max\":46},\"text\":\"count(kql='response.keyword >= 500') / count()\"}},\"references\":[\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\"],\"customLabel\":true},\"71c076a6-e782-4866-b8df-5fd85a41f08b\":{\"label\":\"HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"formula\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"formula\":\"count(kql='response.keyword >= 500') / count()\",\"isFormulaBroken\":false,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":1,\"compact\":true}}},\"references\":[\"71c076a6-e782-4866-b8df-5fd85a41f08bX2\"],\"customLabel\":true}},\"columnOrder\":[\"71c076a6-e782-4866-b8df-5fd85a41f08b\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX0\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX1\",\"71c076a6-e782-4866-b8df-5fd85a41f08bX2\"],\"incompleteColumns\":{}}}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}}},{\"type\":\"visualization\",\"gridData\":{\"x\":0,\"y\":14,\"w\":24,\"h\":15,\"i\":\"8e59c7cf-6e42-4343-a113-c4a255fcf2ce\"},\"panelIndex\":\"8e59c7cf-6e42-4343-a113-c4a255fcf2ce\",\"embeddableConfig\":{\"enhancements\":{\"dynamicActions\":{\"events\":[]}},\"savedVis\":{\"id\":\"cb099a20-ea66-11eb-9425-113343a037e3\",\"title\":\"\",\"description\":\"\",\"type\":\"vega\",\"params\":{\"spec\":\"{\\n $schema: https://vega.github.io/schema/vega-lite/v5.json\\n data: {\\n url: {\\n %context%: true\\n %timefield%: @timestamp\\n index: kibana_sample_data_logs\\n body: {\\n aggs: {\\n countries: {\\n terms: {\\n field: geo.src\\n size: 25\\n }\\n aggs: {\\n hours: {\\n histogram: {\\n field: hour_of_day\\n interval: 1\\n }\\n aggs: {\\n unique: {\\n cardinality: {\\n field: clientip\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n size: 0\\n }\\n }\\n format: {property: \\\"aggregations.countries.buckets\\\"}\\n }\\n \\n transform: [\\n {\\n flatten: [\\\"hours.buckets\\\"],\\n as: [\\\"buckets\\\"]\\n }\\n ]\\n\\n mark: {\\n type: rect\\n tooltip: true\\n }\\n\\n encoding: {\\n x: {\\n field: buckets.key\\n type: ordinal\\n axis: {\\n title: false\\n labelAngle: 0\\n }\\n }\\n y: {\\n field: key\\n type: nominal\\n sort: {\\n field: -buckets.unique.value\\n }\\n axis: {title: false}\\n }\\n color: {\\n field: buckets.unique.value\\n type: quantitative\\n axis: {title: false}\\n scale: {\\n scheme: reds\\n }\\n }\\n }\\n}\\n\"},\"uiState\":{},\"data\":{\"aggs\":[],\"searchSource\":{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}}}}},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":29,\"w\":24,\"h\":13,\"i\":\"21bb0939-ee09-4021-8848-6552b3a6a788\"},\"panelIndex\":\"21bb0939-ee09-4021-8848-6552b3a6a788\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-c840e93e-2949-4723-ad35-6bdb2d724404\"}],\"state\":{\"visualization\":{\"columns\":[{\"columnId\":\"4e64d6d7-4f92-4d5e-abbb-13796604db30\",\"isTransposed\":false},{\"columnId\":\"fb9a848d-76f3-4005-a067-4259a50b5621\",\"isTransposed\":false},{\"columnId\":\"a2760bc2-9a6e-46a1-8595-86f61573c7cf\",\"isTransposed\":false},{\"columnId\":\"2c8bd8d5-35ff-4386-8d27-3ba882b13e43\",\"isTransposed\":false,\"colorMode\":\"text\",\"palette\":{\"name\":\"custom\",\"type\":\"palette\",\"params\":{\"steps\":5,\"stops\":[{\"color\":\"#d23115\",\"stop\":1000},{\"color\":\"#fcc400\",\"stop\":1500},{\"color\":\"#68bc00\",\"stop\":1501}],\"rangeType\":\"number\",\"rangeMin\":0,\"rangeMax\":null,\"continuity\":\"above\",\"colorStops\":[{\"color\":\"#d23115\",\"stop\":0},{\"color\":\"#fcc400\",\"stop\":1000},{\"color\":\"#68bc00\",\"stop\":1500}],\"name\":\"custom\"}}},{\"columnId\":\"defa6f97-b874-4556-8438-056fb437787b\",\"isTransposed\":false,\"colorMode\":\"text\",\"palette\":{\"name\":\"custom\",\"type\":\"palette\",\"params\":{\"steps\":5,\"stops\":[{\"color\":\"#D23115\",\"stop\":10},{\"color\":\"#FCC400\",\"stop\":25},{\"color\":\"#68bc00\",\"stop\":26}],\"rangeType\":\"number\",\"rangeMin\":0,\"rangeMax\":null,\"continuity\":\"above\",\"colorStops\":[{\"color\":\"#D23115\",\"stop\":0},{\"color\":\"#FCC400\",\"stop\":10},{\"color\":\"#68bc00\",\"stop\":25}],\"name\":\"custom\"}}}],\"layerId\":\"c840e93e-2949-4723-ad35-6bdb2d724404\",\"layerType\":\"data\"},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"c840e93e-2949-4723-ad35-6bdb2d724404\":{\"columns\":{\"4e64d6d7-4f92-4d5e-abbb-13796604db30\":{\"label\":\"Type\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"extension.keyword\",\"isBucketed\":true,\"params\":{\"size\":10,\"orderBy\":{\"type\":\"column\",\"columnId\":\"fb9a848d-76f3-4005-a067-4259a50b5621\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"terms\"},\"include\":[],\"exclude\":[],\"includeIsRegex\":false,\"excludeIsRegex\":false},\"customLabel\":true},\"fb9a848d-76f3-4005-a067-4259a50b5621\":{\"label\":\"Bytes (Total)\",\"dataType\":\"number\",\"operationType\":\"sum\",\"sourceField\":\"bytes\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"a2760bc2-9a6e-46a1-8595-86f61573c7cf\":{\"label\":\"Bytes (Last Hour)\",\"dataType\":\"number\",\"operationType\":\"sum\",\"sourceField\":\"bytes\",\"isBucketed\":false,\"scale\":\"ratio\",\"reducedTimeRange\":\"1h\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"2c8bd8d5-35ff-4386-8d27-3ba882b13e43\":{\"label\":\"Unique Visits (Total)\",\"dataType\":\"number\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"clientip\",\"isBucketed\":false,\"params\":{\"emptyAsNull\":true},\"customLabel\":true},\"defa6f97-b874-4556-8438-056fb437787b\":{\"label\":\"Unique count of clientip\",\"dataType\":\"number\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"clientip\",\"isBucketed\":false,\"reducedTimeRange\":\"1h\",\"params\":{\"emptyAsNull\":true}}},\"columnOrder\":[\"4e64d6d7-4f92-4d5e-abbb-13796604db30\",\"fb9a848d-76f3-4005-a067-4259a50b5621\",\"a2760bc2-9a6e-46a1-8595-86f61573c7cf\",\"2c8bd8d5-35ff-4386-8d27-3ba882b13e43\",\"defa6f97-b874-4556-8438-056fb437787b\"],\"sampling\":1,\"incompleteColumns\":{}}}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}}},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":42,\"w\":24,\"h\":13,\"i\":\"cbca842c-b9fa-4523-9ce0-14e350866e33\"},\"panelIndex\":\"cbca842c-b9fa-4523-9ce0-14e350866e33\",\"embeddableConfig\":{\"hidePanelTitles\":false,\"enhancements\":{}},\"title\":\"[Logs] Bytes distribution\",\"panelRefName\":\"panel_cbca842c-b9fa-4523-9ce0-14e350866e33\"},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":55,\"w\":48,\"h\":19,\"i\":\"1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b\"},\"panelIndex\":\"1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"type\":\"lens\",\"visualizationType\":\"lnsDatatable\",\"state\":{\"datasourceStates\":{\"formBased\":{\"layers\":{\"c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0\":{\"columns\":{\"42783ad7-dbcf-4310-bc06-f21f4eaaac96\":{\"label\":\"URL\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"url.keyword\",\"isBucketed\":true,\"params\":{\"size\":1000,\"orderBy\":{\"type\":\"column\",\"columnId\":\"f7835375-4d5b-4839-95ea-41928192a319\"},\"orderDirection\":\"desc\",\"otherBucket\":true,\"missingBucket\":false},\"customLabel\":true},\"f7835375-4d5b-4839-95ea-41928192a319\":{\"label\":\"Visits\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"customLabel\":true},\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX0\":{\"label\":\"Part of HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"filter\":{\"query\":\"response.keyword >= 400 and response.keyword < 500\",\"language\":\"kuery\"},\"customLabel\":true},\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX1\":{\"label\":\"Part of HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"customLabel\":true},\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX2\":{\"label\":\"Part of HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"math\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"tinymathAst\":{\"type\":\"function\",\"name\":\"divide\",\"args\":[\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX0\",\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX1\"],\"location\":{\"min\":0,\"max\":73},\"text\":\"count(kql='response.keyword >= 400 and response.keyword < 500') / count()\"}},\"references\":[\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX0\",\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX1\"],\"customLabel\":true},\"07fc84ca-4147-4ba9-879e-d1b4e086e1da\":{\"label\":\"HTTP 4xx\",\"dataType\":\"number\",\"operationType\":\"formula\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"formula\":\"count(kql='response.keyword >= 400 and response.keyword < 500') / count()\",\"isFormulaBroken\":false,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":1}}},\"references\":[\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX2\"],\"customLabel\":true},\"791d5a5b-a7ba-4e9e-b533-51b33c7d7747\":{\"label\":\"Unique\",\"dataType\":\"number\",\"operationType\":\"unique_count\",\"scale\":\"ratio\",\"sourceField\":\"clientip\",\"isBucketed\":false,\"customLabel\":true},\"611e3509-e834-4fdd-b573-44e959e95d27\":{\"label\":\"95th percentile of bytes\",\"dataType\":\"number\",\"operationType\":\"percentile\",\"sourceField\":\"bytes\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"percentile\":95,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}}},\"9f79ecca-123f-4098-a658-6b0e998da003\":{\"label\":\"Median of bytes\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"bytes\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}}},\"491285fd-0196-402c-9b7f-4660fdc1c22aX0\":{\"label\":\"Part of HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"filter\":{\"query\":\"response.keyword >= 500\",\"language\":\"kuery\"},\"customLabel\":true},\"491285fd-0196-402c-9b7f-4660fdc1c22aX1\":{\"label\":\"Part of HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"count\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"___records___\",\"customLabel\":true},\"491285fd-0196-402c-9b7f-4660fdc1c22aX2\":{\"label\":\"Part of HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"math\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"tinymathAst\":{\"type\":\"function\",\"name\":\"divide\",\"args\":[\"491285fd-0196-402c-9b7f-4660fdc1c22aX0\",\"491285fd-0196-402c-9b7f-4660fdc1c22aX1\"],\"location\":{\"min\":0,\"max\":46},\"text\":\"count(kql='response.keyword >= 500') / count()\"}},\"references\":[\"491285fd-0196-402c-9b7f-4660fdc1c22aX0\",\"491285fd-0196-402c-9b7f-4660fdc1c22aX1\"],\"customLabel\":true},\"491285fd-0196-402c-9b7f-4660fdc1c22a\":{\"label\":\"HTTP 5xx\",\"dataType\":\"number\",\"operationType\":\"formula\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"formula\":\"count(kql='response.keyword >= 500') / count()\",\"isFormulaBroken\":false,\"format\":{\"id\":\"percent\",\"params\":{\"decimals\":1}}},\"references\":[\"491285fd-0196-402c-9b7f-4660fdc1c22aX2\"],\"customLabel\":true}},\"columnOrder\":[\"42783ad7-dbcf-4310-bc06-f21f4eaaac96\",\"f7835375-4d5b-4839-95ea-41928192a319\",\"791d5a5b-a7ba-4e9e-b533-51b33c7d7747\",\"07fc84ca-4147-4ba9-879e-d1b4e086e1da\",\"491285fd-0196-402c-9b7f-4660fdc1c22a\",\"491285fd-0196-402c-9b7f-4660fdc1c22aX0\",\"491285fd-0196-402c-9b7f-4660fdc1c22aX1\",\"491285fd-0196-402c-9b7f-4660fdc1c22aX2\",\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX0\",\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX1\",\"07fc84ca-4147-4ba9-879e-d1b4e086e1daX2\",\"611e3509-e834-4fdd-b573-44e959e95d27\",\"9f79ecca-123f-4098-a658-6b0e998da003\"],\"incompleteColumns\":{}}}}},\"visualization\":{\"layerId\":\"c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0\",\"columns\":[{\"columnId\":\"42783ad7-dbcf-4310-bc06-f21f4eaaac96\",\"width\":650.6666666666666},{\"columnId\":\"f7835375-4d5b-4839-95ea-41928192a319\"},{\"columnId\":\"491285fd-0196-402c-9b7f-4660fdc1c22a\",\"isTransposed\":false,\"width\":81.66666666666669,\"colorMode\":\"cell\",\"palette\":{\"name\":\"custom\",\"type\":\"palette\",\"params\":{\"steps\":5,\"stops\":[{\"color\":\"#fbddd6\",\"stop\":0.1},{\"color\":\"#CC5642\",\"stop\":1}],\"rangeType\":\"number\",\"name\":\"custom\",\"colorStops\":[{\"color\":\"#fbddd6\",\"stop\":0.05},{\"color\":\"#CC5642\",\"stop\":0.1}],\"rangeMin\":0.05,\"rangeMax\":0.1}}},{\"columnId\":\"07fc84ca-4147-4ba9-879e-d1b4e086e1da\",\"isTransposed\":false,\"colorMode\":\"cell\",\"palette\":{\"name\":\"custom\",\"type\":\"palette\",\"params\":{\"steps\":5,\"stops\":[{\"color\":\"#fbddd6\",\"stop\":0.1},{\"color\":\"#cc5642\",\"stop\":1.1}],\"name\":\"custom\",\"colorStops\":[{\"color\":\"#fbddd6\",\"stop\":0.05},{\"color\":\"#cc5642\",\"stop\":0.1}],\"rangeType\":\"number\",\"rangeMin\":0.05,\"rangeMax\":0.1}}},{\"columnId\":\"791d5a5b-a7ba-4e9e-b533-51b33c7d7747\",\"isTransposed\":false},{\"columnId\":\"611e3509-e834-4fdd-b573-44e959e95d27\",\"isTransposed\":false},{\"columnId\":\"9f79ecca-123f-4098-a658-6b0e998da003\",\"isTransposed\":false}],\"sorting\":{\"columnId\":\"491285fd-0196-402c-9b7f-4660fdc1c22a\",\"direction\":\"desc\"},\"layerType\":\"data\",\"rowHeight\":\"single\",\"rowHeightLines\":1},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[]},\"references\":[{\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-current-indexpattern\",\"type\":\"index-pattern\"},{\"id\":\"90943e30-9a47-11e8-b64d-95841ca0b247\",\"name\":\"indexpattern-datasource-layer-c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0\",\"type\":\"index-pattern\"}]},\"enhancements\":{\"dynamicActions\":{\"events\":[]}},\"hidePanelTitles\":false},\"title\":\"[Logs] Errors by host\"}]", + "timeFrom": "now-7d/d", + "title": "[Logs] Web Traffic", + "timeTo": "now" + }, + "coreMigrationVersion": "8.6.0", + "created_at": "2022-10-26T13:15:53.832Z", + "id": "edf84fe0-e1a0-11e7-b6d5-4dc382ef7f5b", + "migrationVersion": { + "dashboard": "8.6.0" + }, + "references": [ + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "11:indexpattern-datasource-layer-28b89898-3feb-415a-8dd9-74d755ac7c2a" + }, + { + "name": "14:panel_14", + "type": "visualization", + "id": "7cbd2350-2223-11e8-b802-5bcf64c2cfb4" + }, + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "15:indexpattern-datasource-layer-b38fe501-4b47-4de8-a423-6656d1162174" + }, + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "15:xy-visualization-layer-f265e722-ae38-495c-903c-48aa7931fa82" + }, + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "bb94016e-f4a6-49ca-87a9-296a2869d570:indexpattern-datasource-layer-483defd2-775b-4a62-bdef-496c819bb8ed" + }, + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "01d8e435-91c0-484f-a11e-856747050b0a:indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a" + }, + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "8c1456d4-1993-4ba2-b701-04aca02c9fef:indexpattern-datasource-layer-f3793bb7-3971-4753-866d-4008e77a9f9a" + }, + { + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "21bb0939-ee09-4021-8848-6552b3a6a788:indexpattern-datasource-layer-c840e93e-2949-4723-ad35-6bdb2d724404" + }, + { + "name": "cbca842c-b9fa-4523-9ce0-14e350866e33:panel_cbca842c-b9fa-4523-9ce0-14e350866e33", + "type": "lens", + "id": "16b1d7d0-ea71-11eb-8b4b-f7b600de0f7d" + }, + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b:indexpattern-datasource-current-indexpattern", + "type": "index-pattern" + }, + { + "id": "90943e30-9a47-11e8-b64d-95841ca0b247", + "name": "1d5f0b3f-d9d2-4b26-997b-83bc5ca3090b:indexpattern-datasource-layer-c35dc8ee-50d1-4ef7-8b4b-9c21a7e7d3b0", + "type": "index-pattern" + }, + { + "name": "controlGroup_612f8db8-9ba9-41cf-a809-d133fe9b83a8:optionsListDataView", + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247" + }, + { + "name": "controlGroup_9807212f-5078-4c42-879c-6f28b3033fc9:optionsListDataView", + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247" + }, + { + "name": "controlGroup_6bf7a1b4-282e-43ac-aa46-81b97fa3acae:rangeSliderDataView", + "type": "index-pattern", + "id": "90943e30-9a47-11e8-b64d-95841ca0b247" + } + ], + "type": "dashboard", + "updated_at": "2022-10-26T13:15:53.832Z", + "version": "WzM1NywxXQ==" +} diff --git a/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx index 7c39e40eaa65..cefa0c82a64a 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/toggle/configure.test.tsx @@ -13,7 +13,9 @@ import { FormTestComponent } from '../../../common/test_utils'; import * as i18n from '../translations'; import { Configure } from './configure'; -describe('Configure ', () => { +// Failing: See https://github.com/elastic/kibana/issues/176600 +// Failing: See https://github.com/elastic/kibana/issues/193918 +describe.skip('Configure ', () => { const onSubmit = jest.fn(); beforeEach(() => { diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts index 5ac233f5be0f..14b55541a1ba 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/bulk_action/bulk_action.ts @@ -58,9 +58,6 @@ export const defineBulkActionCspBenchmarkRulesRoute = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } const cspContext = await context.csp; try { diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts index 3e4373ad8fed..738a8774266d 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts @@ -39,10 +39,6 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } - const requestBody: FindCspBenchmarkRuleRequestV1 = request.query; const cspContext = await context.csp; @@ -72,10 +68,6 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } - const requestBody: FindCspBenchmarkRuleRequestV2 = request.query; const cspContext = await context.csp; @@ -106,10 +98,6 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } - const requestBody: FindCspBenchmarkRuleRequest = request.query; const cspContext = await context.csp; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts index 6099921efdc6..31ef05abc7cc 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/get_states/get_states.ts @@ -26,9 +26,6 @@ export const defineGetCspBenchmarkRulesStatesRoute = (router: CspRouter) => validate: {}, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } const cspContext = await context.csp; try { diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts index fedc7c85eeb0..56f239d1d6ca 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.test.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { httpServerMock, httpServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { httpServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; import { benchmarksQueryParamsSchema, DEFAULT_BENCHMARKS_PER_PAGE, @@ -15,7 +15,6 @@ import { getRulesCountForPolicy } from './utilities'; import { SavedObjectsClientContract, SavedObjectsFindResponse } from '@kbn/core/server'; import { createMockAgentPolicyService } from '@kbn/fleet-plugin/server/mocks'; import { createPackagePolicyMock } from '@kbn/fleet-plugin/common/mocks'; -import { createCspRequestHandlerContextMock } from '../../mocks'; describe('benchmarks API', () => { beforeEach(() => { @@ -32,45 +31,6 @@ describe('benchmarks API', () => { expect(config.path).toEqual('/internal/cloud_security_posture/benchmarks'); }); - it('should accept to a user with fleet.all privilege', async () => { - const router = httpServiceMock.createRouter(); - - defineGetBenchmarksRoute(router); - - const versionedRouter = router.versioned.get.mock.results[0].value; - - const handler = versionedRouter.addVersion.mock.calls[0][1]; - - const mockContext = createCspRequestHandlerContextMock(); - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - - await handler(context, req, res); - - expect(res.forbidden).toHaveBeenCalledTimes(0); - }); - - it('should reject to a user without fleet.all privilege', async () => { - const router = httpServiceMock.createRouter(); - - defineGetBenchmarksRoute(router); - - const versionedRouter = router.versioned.get.mock.results[0].value; - const handler = versionedRouter.addVersion.mock.calls[0][1]; - - const mockContext = createCspRequestHandlerContextMock(); - mockContext.fleet.authz.fleet.all = false; - - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - - await handler(context, req, res); - - expect(res.forbidden).toHaveBeenCalledTimes(1); - }); - describe('test input schema', () => { it('expect to find default values', async () => { const validatedQuery = benchmarksQueryParamsSchema.validate({}); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.ts index e7ae84b0ceb8..c3854b1dafb4 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmarks/benchmarks.ts @@ -34,9 +34,6 @@ export const defineGetBenchmarksRoute = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } const cspContext = await context.csp; try { const cspBenchmarks = await getBenchmarksV1( @@ -72,9 +69,6 @@ export const defineGetBenchmarksRoute = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } const cspContext = await context.csp; const esClient = cspContext.esClient.asCurrentUser; try { diff --git a/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/compliance_dashboard.test.ts b/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/compliance_dashboard.test.ts deleted file mode 100644 index f2ccc62b129c..000000000000 --- a/x-pack/plugins/cloud_security_posture/server/routes/compliance_dashboard/compliance_dashboard.test.ts +++ /dev/null @@ -1,53 +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 { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; -import { defineGetComplianceDashboardRoute } from './compliance_dashboard'; -import { createCspRequestHandlerContextMock } from '../../mocks'; - -describe('compliance dashboard permissions API', () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it('should accept to a user with fleet.all privilege', async () => { - const router = httpServiceMock.createRouter(); - - defineGetComplianceDashboardRoute(router); - - const versionedRouter = router.versioned.get.mock.results[0].value; - - const handler = versionedRouter.addVersion.mock.calls[0][1]; - - const mockContext = createCspRequestHandlerContextMock(); - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - - await handler(context, req, res); - - expect(res.forbidden).toHaveBeenCalledTimes(0); - }); - - it('should reject to a user without fleet.all privilege', async () => { - const router = httpServiceMock.createRouter(); - - defineGetComplianceDashboardRoute(router); - - const versionedRouter = router.versioned.get.mock.results[0].value; - - const handler = versionedRouter.addVersion.mock.calls[0][1]; - - const mockContext = createCspRequestHandlerContextMock(); - const mockResponse = httpServerMock.createResponseFactory(); - const mockRequest = httpServerMock.createKibanaRequest(); - const [context, req, res] = [mockContext, mockRequest, mockResponse]; - - await handler(context, req, res); - - expect(res.forbidden).toHaveBeenCalledTimes(0); - }); -}); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts b/x-pack/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts index 52ff94ad7086..6455b34707f7 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/detection_engine/get_detection_engine_alerts_count_by_rule_tags.ts @@ -69,10 +69,6 @@ export const defineGetDetectionEngineAlertsStatus = (router: CspRouter) => }, }, async (context, request, response) => { - if (!(await context.fleet).authz.fleet.all) { - return response.forbidden(); - } - const requestBody = request.query; const cspContext = await context.csp; diff --git a/x-pack/plugins/fleet/dev_docs/space_awareness.md b/x-pack/plugins/fleet/dev_docs/space_awareness.md new file mode 100644 index 000000000000..fc4ce3a0acd0 --- /dev/null +++ b/x-pack/plugins/fleet/dev_docs/space_awareness.md @@ -0,0 +1,80 @@ +# Space Awareness + +Fleet is in the process to become space aware. This means that different Fleet objects will belong to different spaces and can only be viewed in the spaces that they belong to. Today, all Fleet objects are global and can be viewed from any space. + +## How to enable the feature + +The feature is behind a feature flag `useSpaceAwareness`. If you are testing space awareness you could also be interested in testing `subfeaturePrivileges` at the same time which enables granular privileges to different parts of Fleet. + +In your `kibana.yml` config + +```yaml +xpack.fleet.enableExperimental: ['useSpaceAwareness', 'subfeaturePrivileges'] +``` + +After the feature flag is enabled you will have to do another step to opt-in for the feature, that call will migrate the current space agnostic saved objects to new space aware saved objects. + +```shell +curl -u elastic:changeme -XPOST "http://localhost:5601/internal/fleet/enable_space_awareness" -H "kbn-xsrf: reporting" -H 'elastic-api-version: 1' +``` + +## Space aware entities in Fleet + +Some Fleet entities are space-aware while some are global accross all spaces. + +`.fleet-*` indices are space aware, for this we added a `namespaces` property, and we added the filtering in our different queries. + +Space aware saved object: + +- Package policies, `fleet-package-policies` +- Agent policies, `fleet-agent-policies` +- Space settings `fleet-space-settings` (That is used to restrict allowed namespace prefix for policies) + +As the feature is opt-in we will have to make sure that both non space-aware and space-aware saved object work, and dynamically use the right object type based on opt-in. Agent policy example: + +```typescript +export async function getAgentPolicySavedObjectType() { + return (await isSpaceAwarenessEnabled()) + ? AGENT_POLICY_SAVED_OBJECT_TYPE + : LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE; +} +``` + +Special one: + +- Uninstall tokens are space aware, but we still use a space agnostic saved object and we do the filtering using query and application logic, to avoid those documents to be accidentally deleted during a space deletion. + +Other saved object like output, settings, fleet server hosts are space agnostic. + +## Querying space aware saved object + +Depending of your use case, you may want to retrieve policies from a specific space, or policies accross all spaces. +For example during side effects of updating global settings you will have to update all policies accross all spaces, but in a request handler listing policies you probably will return only policies from that space. + +#### To retrieve policies in a specific space + +You could use the saved object client from a request that is scopped to the request space + +``` +coreContext.savedObjects.client +``` + +Or you could use an internal user SO client scopped to the space you need + +```typescript +appContextService.getInternalUserSOClientForSpaceId(spaceId).find({ ... }) +``` + +#### To retrieve policies in all spaces + +You will have to use an internal user SO client without the space extensions and search accross all namespaces (`*`) + +```typescript +appContextService.getInternalUserSOClientWithoutSpaceExtension().find({ + namespaces: ['*'], +}); +``` + +## Testing + +As we need the feature flag enabled there is a special test config for space awareness in `x-pack/test/fleet_api_integration/apis/space_awareness` it's important to have test coverage that entities that should only be accessible in a space are not accessible in a other one. diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/type_parameter.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/type_parameter.tsx index 001670796739..ec467f113c46 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/type_parameter.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/field_parameters/type_parameter.tsx @@ -6,7 +6,7 @@ */ import React, { useMemo } from 'react'; -import { EuiFormRow, EuiComboBox, EuiText, EuiLink } from '@elastic/eui'; +import { EuiFormRow, EuiComboBox, EuiText, EuiLink, EuiSpacer } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { documentationService } from '../../../../../services/documentation'; @@ -79,7 +79,9 @@ export const TypeParameter = ({ )} - ) : null + ) : ( + + ) } > } = { nested: NestedType, join: JoinType, histogram: HistogramType, + passthrough: PassthroughType, constant_keyword: ConstantKeywordType, rank_feature: RankFeatureType, wildcard: WildcardType, diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/passthrough_type.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/passthrough_type.tsx new file mode 100644 index 000000000000..0e8515d3c6f6 --- /dev/null +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/components/document_fields/fields/field_types/passthrough_type.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { UseField, Field, CheckBoxField } from '../../../../shared_imports'; +import { getFieldConfig } from '../../../../lib'; +import { BasicParametersSection } from '../edit_field'; + +export const PassthroughType = () => { + return ( + + + + + ); +}; diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/data_types_definition.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/data_types_definition.tsx index 1c39bac607f4..130433a86426 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/data_types_definition.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/data_types_definition.tsx @@ -567,6 +567,12 @@ export const TYPE_DEFINITION: { [key in DataType]: DataTypeDefinition } = {

), }, + passthrough: { + label: i18n.translate('xpack.idxMgmt.mappingsEditor.dataType.passthroughDescription', { + defaultMessage: 'Passthrough', + }), + value: 'passthrough', + }, dense_vector: { label: i18n.translate('xpack.idxMgmt.mappingsEditor.dataType.denseVectorDescription', { defaultMessage: 'Dense vector', @@ -998,7 +1004,6 @@ export const TYPE_DEFINITION: { [key in DataType]: DataTypeDefinition } = { ), }, }; - export const MAIN_TYPES: MainType[] = [ 'alias', 'binary', @@ -1011,28 +1016,28 @@ export const MAIN_TYPES: MainType[] = [ 'flattened', 'geo_point', 'geo_shape', + 'histogram', 'ip', 'join', 'keyword', + 'match_only_text', 'nested', 'numeric', - 'match_only_text', 'object', + 'other', 'percolator', + 'point', 'range', 'rank_feature', 'rank_features', 'search_as_you_type', - 'shape', 'semantic_text', + 'shape', 'sparse_vector', 'text', 'token_count', - 'histogram', - 'wildcard', - 'point', 'version', - 'other', + 'wildcard', ]; export const MAIN_DATA_TYPE_DEFINITION: { diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx b/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx index 0be09876b63f..7e10c5d5deaa 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/constants/parameters_definition.tsx @@ -1067,6 +1067,39 @@ export const PARAMETERS_DEFINITION: { [key in ParameterName]: ParameterDefinitio }, schema: t.string, }, + priority: { + fieldConfig: { + defaultValue: '', + type: FIELD_TYPES.NUMBER, + label: i18n.translate('xpack.idxMgmt.mappingsEditor.priorityFieldLabel', { + defaultMessage: 'Priority', + }), + formatters: [toInt], + validations: [ + { + validator: emptyField( + i18n.translate( + 'xpack.idxMgmt.mappingsEditor.parameters.validations.priorityIsRequiredErrorMessage', + { + defaultMessage: 'Specify a priority.', + } + ) + ), + }, + ], + }, + schema: t.string, + }, + dynamic_passthrough: { + fieldConfig: { + defaultValue: false, + type: FIELD_TYPES.CHECKBOX, + label: i18n.translate('xpack.idxMgmt.mappingsEditor.dynamicFieldLabel', { + defaultMessage: 'Dynamic', + }), + }, + schema: t.boolean, + }, reference_field: { fieldConfig: { defaultValue: '', diff --git a/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts b/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts index 658a666b8113..74b003cefdc3 100644 --- a/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts +++ b/x-pack/plugins/index_management/public/application/components/mappings_editor/types/document_fields.ts @@ -58,6 +58,7 @@ export type MainType = | 'percolator' | 'rank_feature' | 'rank_features' + | 'passthrough' | 'shape' | 'search_as_you_type' | 'sparse_vector' @@ -158,6 +159,8 @@ export type ParameterName = | 'points_only' | 'path' | 'dims' + | 'priority' + | 'dynamic_passthrough' | 'inference_id' | 'reference_field' | 'depth_limit' diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts index bef5b35624df..99f95a3eee03 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts @@ -51,7 +51,11 @@ export const reducer = (state: State, action: Action): State => { case 'SET_IS_GENERATING': return { ...state, isGenerating: action.payload }; case 'SET_GENERATED_RESULT': - return { ...state, result: action.payload }; + return { + ...state, + // keep original result as the samplesFormat is not always included in the payload + result: state.result ? { ...state.result, ...action.payload } : action.payload, + }; default: return state; } diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/data_stream_step.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/data_stream_step.tsx index 6e20d739532c..4e93d17adedd 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/data_stream_step.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/data_stream_step.tsx @@ -20,7 +20,7 @@ import type { InputType } from '../../../../../../common'; import { useActions, type State } from '../../state'; import type { IntegrationSettings } from '../../types'; import { StepContentWrapper } from '../step_content_wrapper'; -import type { OnComplete } from './generation_modal'; +import type { OnComplete } from './use_generation'; import { GenerationModal } from './generation_modal'; import { SampleLogsInput } from './sample_logs_input'; import * as i18n from './translations'; diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx index aefde66ed83d..21f82532dc21 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx @@ -21,33 +21,13 @@ import { EuiText, useEuiTheme, } from '@elastic/eui'; -import { isEmpty } from 'lodash/fp'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import React, { useMemo } from 'react'; import { css } from '@emotion/react'; -import { getLangSmithOptions } from '../../../../../common/lib/lang_smith'; -import type { ESProcessorItem } from '../../../../../../common'; -import { - type AnalyzeLogsRequestBody, - type CategorizationRequestBody, - type EcsMappingRequestBody, - type RelatedRequestBody, -} from '../../../../../../common'; -import { - runCategorizationGraph, - runEcsGraph, - runRelatedGraph, - runAnalyzeLogsGraph, -} from '../../../../../common/lib/api'; -import { useKibana } from '../../../../../common/hooks/use_kibana'; import type { State } from '../../state'; import * as i18n from './translations'; -import { useTelemetry } from '../../../telemetry'; -import type { ErrorCode } from '../../../../../../common/constants'; -export type OnComplete = (result: State['result']) => void; - -const ProgressOrder = ['ecs', 'categorization', 'related']; -type ProgressItem = (typeof ProgressOrder)[number]; +import type { OnComplete, ProgressItem } from './use_generation'; +import { ProgressOrder, useGeneration } from './use_generation'; const progressText: Record = { analyzeLogs: i18n.PROGRESS_ANALYZE_LOGS, @@ -56,165 +36,6 @@ const progressText: Record = { related: i18n.PROGRESS_RELATED_GRAPH, }; -interface UseGenerationProps { - integrationSettings: State['integrationSettings']; - connector: State['connector']; - onComplete: OnComplete; -} -export const useGeneration = ({ - integrationSettings, - connector, - onComplete, -}: UseGenerationProps) => { - const { reportGenerationComplete } = useTelemetry(); - const { http, notifications } = useKibana().services; - const [progress, setProgress] = useState(); - const [error, setError] = useState(null); - const [isRequesting, setIsRequesting] = useState(true); - - useEffect(() => { - if ( - !isRequesting || - http == null || - connector == null || - integrationSettings == null || - notifications?.toasts == null - ) { - return; - } - const generationStartedAt = Date.now(); - const abortController = new AbortController(); - const deps = { http, abortSignal: abortController.signal }; - - (async () => { - try { - let additionalProcessors: ESProcessorItem[] | undefined; - - // logSamples may be modified to JSON format if they are in different formats - // Keeping originalLogSamples for running pipeline and generating docs - const originalLogSamples = integrationSettings.logSamples; - let logSamples = integrationSettings.logSamples; - let samplesFormat = integrationSettings.samplesFormat; - - if (integrationSettings.samplesFormat === undefined) { - const analyzeLogsRequest: AnalyzeLogsRequestBody = { - packageName: integrationSettings.name ?? '', - dataStreamName: integrationSettings.dataStreamName ?? '', - logSamples: integrationSettings.logSamples ?? [], - connectorId: connector.id, - langSmithOptions: getLangSmithOptions(), - }; - - setProgress('analyzeLogs'); - const analyzeLogsResult = await runAnalyzeLogsGraph(analyzeLogsRequest, deps); - if (abortController.signal.aborted) return; - if (isEmpty(analyzeLogsResult?.results)) { - setError('No results from Analyze Logs Graph'); - return; - } - logSamples = analyzeLogsResult.results.parsedSamples; - samplesFormat = analyzeLogsResult.results.samplesFormat; - additionalProcessors = analyzeLogsResult.additionalProcessors; - } - - const ecsRequest: EcsMappingRequestBody = { - packageName: integrationSettings.name ?? '', - dataStreamName: integrationSettings.dataStreamName ?? '', - rawSamples: logSamples ?? [], - samplesFormat: samplesFormat ?? { name: 'json' }, - additionalProcessors: additionalProcessors ?? [], - connectorId: connector.id, - langSmithOptions: getLangSmithOptions(), - }; - - setProgress('ecs'); - const ecsGraphResult = await runEcsGraph(ecsRequest, deps); - if (abortController.signal.aborted) return; - if (isEmpty(ecsGraphResult?.results)) { - setError('No results from ECS graph'); - return; - } - const categorizationRequest: CategorizationRequestBody = { - ...ecsRequest, - rawSamples: originalLogSamples ?? [], - samplesFormat: samplesFormat ?? { name: 'json' }, - currentPipeline: ecsGraphResult.results.pipeline, - }; - - setProgress('categorization'); - const categorizationResult = await runCategorizationGraph(categorizationRequest, deps); - if (abortController.signal.aborted) return; - const relatedRequest: RelatedRequestBody = { - ...categorizationRequest, - currentPipeline: categorizationResult.results.pipeline, - }; - - setProgress('related'); - const relatedGraphResult = await runRelatedGraph(relatedRequest, deps); - if (abortController.signal.aborted) return; - - if (isEmpty(relatedGraphResult?.results)) { - throw new Error('Results not found in response'); - } - - reportGenerationComplete({ - connector, - integrationSettings, - durationMs: Date.now() - generationStartedAt, - }); - - const result = { - pipeline: relatedGraphResult.results.pipeline, - docs: relatedGraphResult.results.docs, - samplesFormat, - }; - - onComplete(result); - } catch (e) { - if (abortController.signal.aborted) return; - const originalErrorMessage = `${e.message}${ - e.body ? ` (${e.body.statusCode}): ${e.body.message}` : '' - }`; - - reportGenerationComplete({ - connector, - integrationSettings, - durationMs: Date.now() - generationStartedAt, - error: originalErrorMessage, - }); - - let errorMessage = originalErrorMessage; - const errorCode = e.body?.attributes?.errorCode as ErrorCode | undefined; - if (errorCode != null) { - errorMessage = i18n.ERROR_TRANSLATION[errorCode]; - } - setError(errorMessage); - } finally { - setIsRequesting(false); - } - })(); - return () => { - abortController.abort(); - }; - }, [ - isRequesting, - onComplete, - setProgress, - connector, - http, - integrationSettings, - reportGenerationComplete, - notifications?.toasts, - ]); - - const retry = useCallback(() => { - setError(null); - setIsRequesting(true); - }, []); - - return { progress, error, retry }; -}; - const useModalCss = () => { const { euiTheme } = useEuiTheme(); return { diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_generation.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_generation.tsx new file mode 100644 index 000000000000..d062a0ff8b83 --- /dev/null +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/use_generation.tsx @@ -0,0 +1,203 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 { isEmpty } from 'lodash/fp'; +import { useCallback, useEffect, useState } from 'react'; +import type { HttpSetup } from '@kbn/core-http-browser'; +import { getLangSmithOptions } from '../../../../../common/lib/lang_smith'; +import type { Docs, ESProcessorItem, Pipeline, SamplesFormat } from '../../../../../../common'; +import { + type AnalyzeLogsRequestBody, + type CategorizationRequestBody, + type EcsMappingRequestBody, + type RelatedRequestBody, +} from '../../../../../../common'; +import { + runCategorizationGraph, + runEcsGraph, + runRelatedGraph, + runAnalyzeLogsGraph, +} from '../../../../../common/lib/api'; +import { useKibana } from '../../../../../common/hooks/use_kibana'; +import type { State } from '../../state'; +import * as i18n from './translations'; +import { useTelemetry } from '../../../telemetry'; +import type { ErrorCode } from '../../../../../../common/constants'; +import type { AIConnector, IntegrationSettings } from '../../types'; + +export type OnComplete = (result: State['result']) => void; +export const ProgressOrder = ['analyzeLogs', 'ecs', 'categorization', 'related'] as const; +export type ProgressItem = (typeof ProgressOrder)[number]; + +interface UseGenerationProps { + integrationSettings: State['integrationSettings']; + connector: State['connector']; + onComplete: OnComplete; +} + +interface RunGenerationProps { + integrationSettings: IntegrationSettings; + connector: AIConnector; + deps: { http: HttpSetup; abortSignal: AbortSignal }; + setProgress: (progress: ProgressItem) => void; +} + +interface GenerationResults { + pipeline: Pipeline; + docs: Docs; + samplesFormat?: SamplesFormat; +} + +export const useGeneration = ({ + integrationSettings, + connector, + onComplete, +}: UseGenerationProps) => { + const { reportGenerationComplete } = useTelemetry(); + const { http, notifications } = useKibana().services; + const [progress, setProgress] = useState(); + const [error, setError] = useState(null); + const [isRequesting, setIsRequesting] = useState(true); + + useEffect(() => { + if ( + !isRequesting || + http == null || + connector == null || + integrationSettings == null || + notifications?.toasts == null + ) { + return; + } + const generationStartedAt = Date.now(); + const abortController = new AbortController(); + const deps = { http, abortSignal: abortController.signal }; + + (async () => { + try { + const result = await runGeneration({ integrationSettings, connector, deps, setProgress }); + const durationMs = Date.now() - generationStartedAt; + reportGenerationComplete({ connector, integrationSettings, durationMs }); + onComplete(result); + } catch (e) { + if (abortController.signal.aborted) return; + const originalErrorMessage = `${e.message}${ + e.body ? ` (${e.body.statusCode}): ${e.body.message}` : '' + }`; + + reportGenerationComplete({ + connector, + integrationSettings, + durationMs: Date.now() - generationStartedAt, + error: originalErrorMessage, + }); + + let errorMessage = originalErrorMessage; + const errorCode = e.body?.attributes?.errorCode as ErrorCode | undefined; + if (errorCode != null) { + errorMessage = i18n.ERROR_TRANSLATION[errorCode]; + } + setError(errorMessage); + } finally { + setIsRequesting(false); + } + })(); + return () => { + abortController.abort(); + }; + }, [ + isRequesting, + onComplete, + setProgress, + connector, + http, + integrationSettings, + reportGenerationComplete, + notifications?.toasts, + ]); + + const retry = useCallback(() => { + setError(null); + setIsRequesting(true); + }, []); + + return { progress, error, retry }; +}; + +async function runGeneration({ + integrationSettings, + connector, + deps, + setProgress, +}: RunGenerationProps): Promise { + let additionalProcessors: ESProcessorItem[] | undefined; + // logSamples may be modified to JSON format if they are in different formats + // Keeping originalLogSamples for running pipeline and generating docs + const originalLogSamples = integrationSettings.logSamples; + let logSamples = integrationSettings.logSamples; + let samplesFormat: SamplesFormat | undefined = integrationSettings.samplesFormat; + + if (integrationSettings.samplesFormat === undefined) { + const analyzeLogsRequest: AnalyzeLogsRequestBody = { + packageName: integrationSettings.name ?? '', + dataStreamName: integrationSettings.dataStreamName ?? '', + logSamples: integrationSettings.logSamples ?? [], + connectorId: connector.id, + langSmithOptions: getLangSmithOptions(), + }; + + setProgress('analyzeLogs'); + const analyzeLogsResult = await runAnalyzeLogsGraph(analyzeLogsRequest, deps); + if (isEmpty(analyzeLogsResult?.results)) { + throw new Error('No results from Analyze Logs Graph'); + } + logSamples = analyzeLogsResult.results.parsedSamples; + samplesFormat = analyzeLogsResult.results.samplesFormat; + additionalProcessors = analyzeLogsResult.additionalProcessors; + } + + const ecsRequest: EcsMappingRequestBody = { + packageName: integrationSettings.name ?? '', + dataStreamName: integrationSettings.dataStreamName ?? '', + rawSamples: logSamples ?? [], + samplesFormat: samplesFormat ?? { name: 'json' }, + additionalProcessors: additionalProcessors ?? [], + connectorId: connector.id, + langSmithOptions: getLangSmithOptions(), + }; + + setProgress('ecs'); + const ecsGraphResult = await runEcsGraph(ecsRequest, deps); + if (isEmpty(ecsGraphResult?.results)) { + throw new Error('No results from ECS graph'); + } + const categorizationRequest: CategorizationRequestBody = { + ...ecsRequest, + rawSamples: originalLogSamples ?? [], + samplesFormat: samplesFormat ?? { name: 'json' }, + currentPipeline: ecsGraphResult.results.pipeline, + }; + + setProgress('categorization'); + const categorizationResult = await runCategorizationGraph(categorizationRequest, deps); + const relatedRequest: RelatedRequestBody = { + ...categorizationRequest, + currentPipeline: categorizationResult.results.pipeline, + }; + + setProgress('related'); + const relatedGraphResult = await runRelatedGraph(relatedRequest, deps); + if (isEmpty(relatedGraphResult?.results)) { + throw new Error('Results not found in response'); + } + + return { + pipeline: relatedGraphResult.results.pipeline, + docs: relatedGraphResult.results.docs, + samplesFormat, + }; +} diff --git a/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts b/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts index 1ca473d77661..7b0dead93a62 100644 --- a/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/calendars_schema.ts @@ -20,6 +20,9 @@ export const calendarSchema = schema.object({ description: schema.maybe(schema.string()), start_time: schema.oneOf([schema.string(), schema.number()]), end_time: schema.oneOf([schema.string(), schema.number()]), + skip_result: schema.maybe(schema.boolean()), + skip_model_update: schema.maybe(schema.boolean()), + force_time_shift: schema.maybe(schema.number()), }) ), }); diff --git a/x-pack/plugins/observability_solution/apm/public/hooks/use_dashboards_fetcher.ts b/x-pack/plugins/observability_solution/apm/public/hooks/use_dashboards_fetcher.ts index c463d07276a3..8b1ccf301ae3 100644 --- a/x-pack/plugins/observability_solution/apm/public/hooks/use_dashboards_fetcher.ts +++ b/x-pack/plugins/observability_solution/apm/public/hooks/use_dashboards_fetcher.ts @@ -7,7 +7,7 @@ import { useState, useEffect } from 'react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { SearchDashboardsResponse } from '@kbn/dashboard-plugin/public/services/dashboard_content_management/lib/find_dashboards'; +import { SearchDashboardsResponse } from '@kbn/dashboard-plugin/public'; import { ApmPluginStartDeps } from '../plugin'; import { FETCH_STATUS } from './use_fetcher'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/kibana.jsonc b/x-pack/plugins/observability_solution/dataset_quality/kibana.jsonc index cb16a7ce0455..62b82fcb3a87 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/kibana.jsonc +++ b/x-pack/plugins/observability_solution/dataset_quality/kibana.jsonc @@ -24,7 +24,8 @@ "dataViews", "lens", "fieldsMetadata", - "taskManager" + "taskManager", + "usageCollection" ], "optionalPlugins": ["telemetry"], "requiredBundles": ["unifiedHistogram", "discover"], diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/plugin.ts b/x-pack/plugins/observability_solution/dataset_quality/server/plugin.ts index 7c51e40c870a..86f89d3c0d14 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/plugin.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/plugin.ts @@ -57,7 +57,7 @@ export class DatasetQualityServerPlugin implements Plugin { }); // Setup Data Telemetry Service - this.dataTelemetryService.setup(core.analytics, plugins.taskManager); + this.dataTelemetryService.setup(plugins.taskManager, plugins.usageCollection); return {}; } diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts index 7f03b4d67ce5..85fc201333f2 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/constants.ts @@ -10,7 +10,7 @@ import { DATA_DATASETS_INDEX_PATTERNS_UNIQUE } from '@kbn/telemetry-plugin/serve import { DatasetIndexPattern } from './types'; export const LOGS_DATA_TELEMETRY_TASK_TYPE = 'logs-data-telemetry'; -export const LOGS_DATA_TELEMETRY_TASK_ID = 'logs-data-telemetry:collect-and-report-task-2'; +export const LOGS_DATA_TELEMETRY_TASK_ID = 'logs-data-telemetry:collect-and-report-task'; export const TELEMETRY_TASK_INTERVAL = 24 * 60; // 24 hours (in minutes) export const TELEMETRY_TASK_TIMEOUT = 10; // 10 minutes @@ -23,8 +23,6 @@ export const MAX_STREAMS_TO_REPORT = 1000; export const NON_LOG_SIGNALS = ['metrics', 'traces', 'internal', 'synthetics']; export const EXCLUDE_ELASTIC_LOGS = ['logs-synth', 'logs-elastic', 'logs-endpoint']; -export const TELEMETRY_CHANNEL = 'logs-data-telemetry'; - type ObsPatternName = (typeof DATA_DATASETS_INDEX_PATTERNS_UNIQUE)[number]['patternName']; const LOGS_INDEX_PATTERN_NAMES: ObsPatternName[] = [ 'filebeat', diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.test.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.test.ts index cbbdf8bbfa51..8ade977309da 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.test.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.test.ts @@ -5,13 +5,16 @@ * 2.0. */ -import { ElasticsearchClient, type Logger } from '@kbn/core/server'; -import type { AnalyticsServiceSetup } from '@kbn/core/public'; -import { TelemetryPluginStart } from '@kbn/telemetry-plugin/server'; +import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { ConcreteTaskInstance } from '@kbn/task-manager-plugin/server'; +import type { FetchResult } from '@kbn/task-manager-plugin/server/task_store'; +import type { TelemetryPluginStart } from '@kbn/telemetry-plugin/server'; import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; +import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { createUsageCollectionSetupMock } from '@kbn/usage-collection-plugin/server/mocks'; -import { DataTelemetryEvent } from './types'; -import { BREATHE_DELAY_MEDIUM, MAX_STREAMS_TO_REPORT } from './constants'; +import { DataTelemetryEvent, DataTelemetryObject } from './types'; +import { MAX_STREAMS_TO_REPORT } from './constants'; import { DataTelemetryService } from './data_telemetry_service'; // Mock the constants module to speed up and simplify the tests @@ -43,26 +46,41 @@ const SYNTH_DOCS = 6000000; describe('DataTelemetryService', () => { let service: DataTelemetryService; let mockEsClient: jest.Mocked; - let mockAnalyticsSetup: jest.Mocked; + let mockUsageCollectionSetup: jest.Mocked; let mockTelemetryStart: jest.Mocked; let mockLogger: jest.Mocked; let mockTaskManagerSetup: ReturnType; let mockTaskManagerStart: ReturnType; let runTask: ReturnType['runTask']; - describe('Data Telemetry Task', () => { + let exampleEvent: Partial; + let exampleTaskData: DataTelemetryObject; + let exampleTaskFetchResult: FetchResult; + + describe('Task and Collector Setup', () => { beforeEach(async () => { const mocks = setupMocks(); mockEsClient = mocks.mockEsClient; mockLogger = mocks.mockLogger; - mockAnalyticsSetup = mocks.mockAnalyticsSetup; + mockUsageCollectionSetup = mocks.mockUsageCollectionSetup; mockTelemetryStart = mocks.mockTelemetryStart; mockTaskManagerSetup = mocks.taskManagerSetup; mockTaskManagerStart = mocks.taskManagerStart; runTask = mocks.runTask; + exampleEvent = { + doc_count: 555, + }; + exampleTaskData = { data: [exampleEvent as DataTelemetryEvent] }; + exampleTaskFetchResult = { + docs: [{ state: { ran: true, data: [exampleEvent] } } as unknown as ConcreteTaskInstance], + versionMap: new Map(), + } as FetchResult; + + mockTaskManagerStart.fetch.mockResolvedValue(exampleTaskFetchResult); + service = new DataTelemetryService(mockLogger); - service.setup(mockAnalyticsSetup, mockTaskManagerSetup); + service.setup(mockTaskManagerSetup, mockUsageCollectionSetup); await service.start( mockTelemetryStart, { @@ -77,14 +95,49 @@ describe('DataTelemetryService', () => { jest.clearAllMocks(); }); + it('should register usage collection', () => { + expect(mockUsageCollectionSetup.makeUsageCollector).toHaveBeenCalledTimes(1); + expect(mockUsageCollectionSetup.registerCollector).toHaveBeenCalledTimes(1); + }); + it('should trigger task runner run method', async () => { jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); - const collectAndSendSpy = jest.spyOn(service as any, 'collectAndSend'); + const collectTelemetryDataSpy = jest.spyOn(service as any, 'collectTelemetryData'); + + await runTask(); + + // Assert collectTelemetryData is called + expect(collectTelemetryDataSpy).toHaveBeenCalledTimes(1); + }); + it('isReady and fetch of usage collector reflect the correct state', async () => { await runTask(); - // Assert collectAndSend is called - expect(collectAndSendSpy).toHaveBeenCalledTimes(1); + const collector = mockUsageCollectionSetup.makeUsageCollector.mock.results[0].value; + expect(await collector.isReady()).toBe(true); + expect(await collector.fetch()).toEqual(exampleTaskData); + }); + + it('isReady of usage collector should be false while the task is in progress', async () => { + jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); + const taskRunPromise = runTask(); + + const collector = mockUsageCollectionSetup.makeUsageCollector.mock.results[0].value; + expect(await collector.isReady()).toBe(false); + + await taskRunPromise; + }); + + it('isReady of usage collector should be false if collection is stopped', async () => { + jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); + service.stop(); + await runTask(); + + const collector = mockUsageCollectionSetup.makeUsageCollector.mock.results[0].value; + expect(await collector.isReady()).toBe(false); + + service.resume(); + expect(await collector.isReady()).toBe(true); }); }); @@ -93,14 +146,14 @@ describe('DataTelemetryService', () => { const mocks = setupMocks(); mockEsClient = mocks.mockEsClient; mockLogger = mocks.mockLogger; - mockAnalyticsSetup = mocks.mockAnalyticsSetup; + mockUsageCollectionSetup = mocks.mockUsageCollectionSetup; mockTelemetryStart = mocks.mockTelemetryStart; mockTaskManagerSetup = mocks.taskManagerSetup; mockTaskManagerStart = mocks.taskManagerStart; runTask = mocks.runTask; service = new DataTelemetryService(mockLogger); - service.setup(mockAnalyticsSetup, mockTaskManagerSetup); + service.setup(mockTaskManagerSetup, mockUsageCollectionSetup); await service.start( mockTelemetryStart, { @@ -118,38 +171,36 @@ describe('DataTelemetryService', () => { }); it( - 'should collect and send telemetry after startup and every interval', + 'should collect telemetry after startup and every interval', async () => { - const collectAndSendSpy = jest.spyOn(service as any, 'collectAndSend'); + const collectTelemetryDataSpy = jest.spyOn(service as any, 'collectTelemetryData'); await runTask(); - expect(collectAndSendSpy).toHaveBeenCalledTimes(1); + expect(collectTelemetryDataSpy).toHaveBeenCalledTimes(1); - await sleepForBreathDelay(); expect(mockEsClient.indices.getMapping).toHaveBeenCalledTimes(1); await runTask(); - expect(collectAndSendSpy).toHaveBeenCalledTimes(2); + expect(collectTelemetryDataSpy).toHaveBeenCalledTimes(2); - await sleepForBreathDelay(); expect(mockEsClient.indices.getMapping).toHaveBeenCalledTimes(2); }, TEST_TIMEOUT ); it( - 'should stop collecting and sending telemetry if stopped', + 'should stop collection if telemetry is stopped', async () => { - const collectAndSendSpy = jest.spyOn(service as any, 'collectAndSend'); + const collectTelemetryDataSpy = jest.spyOn(service as any, 'collectTelemetryData'); await runTask(); - expect(collectAndSendSpy).toHaveBeenCalledTimes(1); + expect(collectTelemetryDataSpy).toHaveBeenCalledTimes(1); service.stop(); - await runTask(); - await sleepForBreathDelay(); - expect(collectAndSendSpy).toHaveBeenCalledTimes(1); + const taskResult = await runTask(); + expect(taskResult?.state.data).toBeNull(); + expect(collectTelemetryDataSpy).toHaveBeenCalledTimes(1); }, TEST_TIMEOUT ); @@ -159,14 +210,14 @@ describe('DataTelemetryService', () => { async () => { jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(false); - const collectAndSendSpy = jest.spyOn(service as any, 'collectAndSend'); + const collectTelemetryDataSpy = jest.spyOn(service as any, 'collectTelemetryData'); await runTask(); - expect(collectAndSendSpy).not.toHaveBeenCalled(); + expect(collectTelemetryDataSpy).not.toHaveBeenCalled(); - await runTask(); - await sleepForBreathDelay(); - expect(collectAndSendSpy).not.toHaveBeenCalled(); + const taskResult = await runTask(); + expect(taskResult?.state.data).toBeNull(); + expect(collectTelemetryDataSpy).not.toHaveBeenCalled(); // Assert that logger.debug is called with appropriate message expect(mockLogger.debug).toHaveBeenCalledWith( @@ -194,45 +245,50 @@ describe('DataTelemetryService', () => { })), }); - await runTask(); - await sleepForBreathDelay(); + const taskResult = await runTask(); + expect(taskResult?.state.data).toBeNull(); expect(mockEsClient.indices.getMapping).not.toHaveBeenCalled(); }, TEST_TIMEOUT ); it( - 'creates and sends the telemetry events', + 'creates telemetry events', async () => { jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); - const reportEventsSpy = jest.spyOn(service as any, 'reportEvents'); - - await runTask(); - await sleepForBreathDelay(); + const taskResult = await runTask(); + expect(taskResult?.state.data).toBeTruthy(); + + const expectedEvent1 = { + doc_count: 4000 + 500 + 200, + failure_store_doc_count: 300, + index_count: 2 + 1 + 1, + failure_store_index_count: 1, + namespace_count: 1 + 1, + size_in_bytes: 10089898 + 800000 + 500000, + pattern_name: 'test', + managed_by: ['fleet'], + package_name: ['activemq'], + beat: [], + }; + const expectedEvent2 = { + beat: [], + doc_count: 1700, + index_count: 3, + namespace_count: 2, + package_name: [], + pattern_name: 'test-2', + shipper: 'custom-2', + size_in_bytes: 2300000, + }; - expect(reportEventsSpy).toHaveBeenCalledTimes(1); expect( - ( - reportEventsSpy.mock?.lastCall as [ - [Partial], - [Partial] - ] - )?.[0]?.[0] - ).toEqual( - expect.objectContaining({ - doc_count: 4000 + 500 + 200, - failure_store_doc_count: 300, - index_count: 2 + 1 + 1, - failure_store_index_count: 1, - namespace_count: 1 + 1, - size_in_bytes: 10089898 + 800000 + 500000, - pattern_name: 'test', - managed_by: ['fleet'], - package_name: ['activemq'], - beat: [], - }) - ); + taskResult?.state.data as [Partial, Partial] + ).toEqual([ + expect.objectContaining(expectedEvent1), + expect.objectContaining(expectedEvent2), + ]); }, TEST_TIMEOUT ); @@ -241,17 +297,14 @@ describe('DataTelemetryService', () => { 'should not include stats of excluded indices', async () => { jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); - const reportEventsSpy = jest.spyOn(service as any, 'reportEvents'); - await runTask(); - await sleepForBreathDelay(); + const taskResult = await runTask(); - expect(reportEventsSpy).toHaveBeenCalledTimes(1); - const events = reportEventsSpy.mock?.lastCall as [ - [Partial], - [Partial] + const events = taskResult?.state.data as [ + Partial, + Partial ]; // doc_count should be less than SYNTH_DOCS for any event - (events[0] ?? []).forEach((event) => { + (events ?? []).forEach((event) => { expect(event.doc_count).toBeLessThan(SYNTH_DOCS); }); }, @@ -280,14 +333,14 @@ describe('DataTelemetryService', () => { const mocks = setupMocks(); mockEsClient = mocks.mockEsClient; mockLogger = mocks.mockLogger; - mockAnalyticsSetup = mocks.mockAnalyticsSetup; + mockUsageCollectionSetup = mocks.mockUsageCollectionSetup; mockTelemetryStart = mocks.mockTelemetryStart; mockTaskManagerSetup = mocks.taskManagerSetup; mockTaskManagerStart = mocks.taskManagerStart; runTask = mocks.runTask; service = new DataTelemetryService(mockLogger); - service.setup(mockAnalyticsSetup, mockTaskManagerSetup); + service.setup(mockTaskManagerSetup, mockUsageCollectionSetup); await service.start( mockTelemetryStart, { @@ -309,15 +362,10 @@ describe('DataTelemetryService', () => { async () => { jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); - const reportEventsSpy = jest.spyOn(service as any, 'reportEvents'); - - await runTask(); - await sleepForBreathDelay(); - - expect(reportEventsSpy).toHaveBeenCalledTimes(1); - const lastCall = reportEventsSpy.mock?.lastCall?.[0] as [Partial]; - expect(lastCall?.[0]?.field_count).toBe(8); - expect(lastCall?.[0]?.field_existence).toEqual({ + const taskResult = await runTask(); + const firstEvent = (taskResult?.state.data as [Partial])?.[0]; + expect(firstEvent?.field_count).toBe(8); + expect(firstEvent?.field_existence).toEqual({ 'container.id': 3000 + 500, 'host.name': 3000 + 500, message: 3000, @@ -333,17 +381,12 @@ describe('DataTelemetryService', () => { it('should correctly calculate structure levels', async () => { jest.spyOn(service as any, 'shouldCollectTelemetry').mockResolvedValue(true); - const reportEventsSpy = jest.spyOn(service as any, 'reportEvents'); + const taskResult = await runTask(); + const secondEvent = ( + taskResult?.state.data as [Partial, Partial] + )?.[1]; - await runTask(); - await sleepForBreathDelay(); - - expect(reportEventsSpy).toHaveBeenCalledTimes(1); - const lastCall = reportEventsSpy.mock?.lastCall?.[0] as [ - Partial, - Partial - ]; - expect(lastCall?.[1]?.structure_level).toEqual({ + expect(secondEvent?.structure_level).toEqual({ '1': 1000, '4': 500, '6': 200, @@ -352,10 +395,6 @@ describe('DataTelemetryService', () => { }); }); -function sleepForBreathDelay() { - return new Promise((resolve) => setTimeout(resolve, BREATHE_DELAY_MEDIUM * 10)); -} - function setupMocks() { const mockEsClient = { indices: { @@ -419,9 +458,7 @@ function setupMocks() { error: jest.fn(), } as unknown as jest.Mocked; - const mockAnalyticsSetup = { - getTelemetryUrl: jest.fn().mockResolvedValue(new URL('https://telemetry.elastic.co')), - } as unknown as jest.Mocked; + const mockUsageCollectionSetup = createUsageCollectionSetupMock(); const mockTelemetryStart = { getIsOptedIn: jest.fn().mockResolvedValue(true), @@ -441,7 +478,7 @@ function setupMocks() { return { mockEsClient, mockLogger, - mockAnalyticsSetup, + mockUsageCollectionSetup, mockTelemetryStart, taskManagerSetup, taskManagerStart, diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.ts index 6f0ea294cfc0..a4f0b81c1f52 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/data_telemetry_service.ts @@ -9,25 +9,26 @@ import { from, defer, delay, - filter, tap, - take, - takeWhile, exhaustMap, switchMap, map, of, - EMPTY, + firstValueFrom, + throwError, } from 'rxjs'; -import type { CoreStart, ElasticsearchClient, Logger } from '@kbn/core/server'; -import type { AnalyticsServiceSetup } from '@kbn/core/public'; +import { CoreStart, ElasticsearchClient, Logger } from '@kbn/core/server'; import { + ConcreteTaskInstance, TaskInstance, TaskManagerSetupContract, TaskManagerStartContract, } from '@kbn/task-manager-plugin/server'; import type { TelemetryPluginStart } from '@kbn/telemetry-plugin/server'; +import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { TelemetryTaskState } from './types'; +import { registerLogsDataUsageCollector } from './register_collector'; import { BREATHE_DELAY_MEDIUM, BREATHE_DELAY_SHORT, @@ -50,25 +51,31 @@ import { getIndexFieldStats, } from './helpers'; -import { DataTelemetryEvent } from './types'; +const SKIP_COLLECTION = 'Skip Collection'; export class DataTelemetryService { private readonly logger: Logger; - private isStopped = false; + private taskManagerStart?: TaskManagerStartContract; private telemetryStart?: TelemetryPluginStart; - // @ts-ignore: Unused variable - private analytics?: AnalyticsServiceSetup; - - // @ts-ignore: Unused variable - private isInProgress = false; + private usageCollection?: UsageCollectionSetup; private isOptedIn?: boolean = true; // Assume true until the first check private esClient?: ElasticsearchClient; + private isStopped = false; + private isInProgress = false; + private run$ = defer(() => from(this.shouldCollectTelemetry())).pipe( - takeWhile(() => !this.isStopped), + switchMap((isOptedIn) => { + // If stopped, do not proceed + if (this.isStopped) { + return this.throwSkipCollection(); + } + + return of(isOptedIn); + }), tap((isOptedIn) => { if (!isOptedIn) { this.logTelemetryNotOptedIn(); @@ -77,8 +84,17 @@ export class DataTelemetryService { this.isInProgress = true; } }), - filter((isOptedIn) => isOptedIn), - exhaustMap(() => this.collectAndSend()), + switchMap((isOptedIn) => { + // If not opted in, do not proceed + if (!isOptedIn) { + return this.throwSkipCollection(); + } + + return of(isOptedIn); + }), + exhaustMap(() => { + return this.collectTelemetryData(); + }), tap(() => (this.isInProgress = false)) ); @@ -86,24 +102,36 @@ export class DataTelemetryService { this.logger = logger; } - public setup(analytics: AnalyticsServiceSetup, taskManager: TaskManagerSetupContract) { - this.analytics = analytics; - this.registerTask(taskManager); + public setup(taskManagerSetup: TaskManagerSetupContract, usageCollection?: UsageCollectionSetup) { + this.usageCollection = usageCollection; + + if (usageCollection) { + // Register Kibana task + this.registerTask(taskManagerSetup); + } else { + this.logger.warn( + `[Logs Data Telemetry] Usage collection service is not available: cannot collect telemetry data` + ); + } } public async start( telemetryStart: TelemetryPluginStart, core: CoreStart, - taskManager: TaskManagerStartContract + taskManagerStart: TaskManagerStartContract ) { + this.taskManagerStart = taskManagerStart; this.telemetryStart = telemetryStart; this.esClient = core?.elasticsearch.client.asInternalUser; - if (taskManager) { - const taskInstance = await this.scheduleTask(taskManager); + if (taskManagerStart && this.usageCollection) { + const taskInstance = await this.scheduleTask(taskManagerStart); if (taskInstance) { this.logger.debug(`Task ${taskInstance.id} scheduled.`); } + + // Create and register usage collector for logs data telemetry + registerLogsDataUsageCollector(this.usageCollection, this.getCollectorOptions()); } } @@ -111,34 +139,43 @@ export class DataTelemetryService { this.isStopped = true; } + public resume() { + this.isStopped = false; + } + private registerTask(taskManager: TaskManagerSetupContract) { const service = this; taskManager.registerTaskDefinitions({ [LOGS_DATA_TELEMETRY_TASK_TYPE]: { title: 'Logs Data Telemetry', description: - 'This task collects data telemetry for logs data and sends it to the telemetry service.', + 'This task collects data telemetry for logs data and sends it to the telemetry service via usage collector plugin.', timeout: `${TELEMETRY_TASK_TIMEOUT}m`, maxAttempts: 1, // Do not retry - createTaskRunner: () => { + createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => { return { // Perform the work of the task. The return value should fit the TaskResult interface. async run() { - service.logger.debug(`[Logs Data Telemetry] Running task`); + const { state } = taskInstance; + let data = state?.data ?? null; try { - service.run$.pipe(take(1)).subscribe({ - complete: () => { - service.logger.debug(`[Logs Data Telemetry] Task completed`); - }, - }); + data = await firstValueFrom(service.run$); } catch (e) { - service.logger.error(e); + if (e.message === SKIP_COLLECTION) { + data = null; // Collection is skipped, skip reporting + } else { + service.logger.error(e); + } } + + return { + state: { ran: true, data }, + }; }, async cancel() { - service.logger.debug(`[Logs Data Telemetry] Task cancelled`); + service.logger.warn(`[Logs Data Telemetry] Task cancelled`); }, }; }, @@ -182,7 +219,7 @@ export class DataTelemetryService { return this.isOptedIn === true; } - private collectAndSend() { + private collectTelemetryData() { // Gather data streams and indices related to each stream of log if (this.esClient) { return getAllIndices({ @@ -196,8 +233,10 @@ export class DataTelemetryService { this.logger.debug( `[Logs Data Telemetry] Number of data streams exceeds ${MAX_STREAMS_TO_REPORT}. Skipping telemetry collection.` ); - return EMPTY; + + return this.throwSkipCollection(); } + return of(dataStreamsAndIndicesInfo); }), delay(BREATHE_DELAY_MEDIUM), @@ -234,10 +273,6 @@ export class DataTelemetryService { }), map((statsByPattern) => { return indexStatsToTelemetryEvents(statsByPattern); - }), - delay(BREATHE_DELAY_SHORT), - switchMap((dataTelemetryEvents) => { - return from(this.reportEvents(dataTelemetryEvents)); }) ); } else { @@ -246,16 +281,59 @@ export class DataTelemetryService { for stream of logs` ); - return EMPTY; + return this.throwSkipCollection(); } } - private async reportEvents(events: DataTelemetryEvent[]) { - // TODO: Implement reporting events via analytics service - return Promise.resolve(events); + private getCollectorOptions() { + return { + fetch: async () => { + // Retrieve the latest telemetry data from task manager + const taskState = await this.getLatestTaskState(); + + return { data: taskState.data ?? [] }; + }, + isReady: async () => { + const taskState = await this.getLatestTaskState(); + + return !this.isStopped && !this.isInProgress && taskState.ran && taskState.data !== null; + }, + }; + } + + private async getLatestTaskState() { + const defaultState: TelemetryTaskState = { + data: null, + ran: false, + }; + + if (this.taskManagerStart) { + try { + const fetchResult = await this.taskManagerStart.fetch({ + query: { bool: { filter: { term: { _id: `task:${LOGS_DATA_TELEMETRY_TASK_ID}` } } } }, + }); + + return (fetchResult.docs[0]?.state ?? defaultState) as TelemetryTaskState; + } catch (err) { + const errMessage = err && err.message ? err.message : err.toString(); + if (!errMessage.includes('NotInitialized')) { + throw err; + } + } + } else { + this.logger.error( + `[Logs Data Telemetry] Task manager is not available: cannot retrieve latest task state` + ); + } + + return defaultState; } private logTelemetryNotOptedIn() { this.logger.debug(`[Logs Data Telemetry] Telemetry is not opted-in.`); } + + private throwSkipCollection() { + return throwError(() => new Error(SKIP_COLLECTION)); + } } diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/register_collector.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/register_collector.ts new file mode 100644 index 000000000000..2278bf48605d --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/register_collector.ts @@ -0,0 +1,153 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MakeSchemaFrom, UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; +import { DataTelemetryObject } from './types'; + +const structureLevelSchema: MakeSchemaFrom< + DataTelemetryObject, + true +>['data']['items']['structure_level'] = { + '0': { + type: 'long', + _meta: { + description: 'Total docs at structure level 0', + }, + }, + '1': { + type: 'long', + _meta: { + description: 'Total docs at structure level 1', + }, + }, + '2': { + type: 'long', + _meta: { + description: 'Total docs at structure level 2', + }, + }, + '3': { + type: 'long', + _meta: { + description: 'Total docs at structure level 3', + }, + }, + '4': { + type: 'long', + _meta: { + description: 'Total docs at structure level 4', + }, + }, + '5': { + type: 'long', + _meta: { + description: 'Total docs at structure level 5', + }, + }, + '6': { + type: 'long', + _meta: { + description: 'Total docs at structure level 6', + }, + }, +}; + +export function registerLogsDataUsageCollector( + usageCollection: UsageCollectionSetup, + collectorOptions: { + isReady: () => Promise; + fetch: () => Promise; + } +) { + const logsUsageCollector = usageCollection.makeUsageCollector({ + type: 'logs_data', + isReady: collectorOptions.isReady, + fetch: collectorOptions.fetch, + schema: { + data: { + type: 'array', + items: { + pattern_name: { + type: 'keyword', + _meta: { description: 'Logs pattern name representing the stream of logs' }, + }, + shipper: { + type: 'keyword', + _meta: { description: 'Shipper if present, sending the logs' }, + }, + doc_count: { + type: 'long', + _meta: { description: 'Total number of documents in the steam of logs' }, + }, + structure_level: structureLevelSchema, + failure_store_doc_count: { + type: 'long', + _meta: { + description: 'Total number of documents in the failure store in the stream of logs', + }, + }, + index_count: { + type: 'long', + _meta: { + description: 'Total number of indices in the stream of logs', + }, + }, + namespace_count: { + type: 'long', + _meta: { + description: 'Total number of namespaces in the stream of logs', + }, + }, + field_count: { + type: 'long', + _meta: { + description: 'Total number of fields in mappings of indices of the stream of logs', + }, + }, + field_existence: { + DYNAMIC_KEY: { + type: 'long', + _meta: { + description: 'Count of documents having the field represented by the key', + }, + }, + }, + size_in_bytes: { + type: 'long', + _meta: { + description: 'Total size in bytes of the stream of logs', + }, + }, + managed_by: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: 'Value captured in _meta.managed_by', + }, + }, + }, + package_name: { + type: 'array', + items: { + type: 'keyword', + _meta: { + description: 'Value captured in _meta.package.name', + }, + }, + }, + beat: { + type: 'array', + items: { type: 'keyword', _meta: { description: 'Value captured in _meta.beat.name' } }, + }, + }, + }, + }, + }); + + usageCollection.registerCollector(logsUsageCollector); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/types.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/types.ts index 0ccae5e83f1b..4df825bf5896 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_telemetry/types.ts @@ -85,3 +85,12 @@ export interface DataTelemetryEvent { package_name: string[]; beat: string[]; } + +export interface DataTelemetryObject { + data: DataTelemetryEvent[]; +} + +export interface TelemetryTaskState { + data: DataTelemetryEvent[] | null; + ran: boolean; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/types.ts b/x-pack/plugins/observability_solution/dataset_quality/server/types.ts index 0ba17c5bb22c..e0bfb9704b7a 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/types.ts @@ -6,26 +6,26 @@ */ import { CustomRequestHandlerContext } from '@kbn/core/server'; -import type { AnalyticsServiceSetup, AnalyticsServiceStart } from '@kbn/core-analytics-server'; import type { FleetSetupContract, FleetStartContract } from '@kbn/fleet-plugin/server'; import { TaskManagerSetupContract, TaskManagerStartContract, } from '@kbn/task-manager-plugin/server'; import type { TelemetryPluginSetup, TelemetryPluginStart } from '@kbn/telemetry-plugin/server'; +import { UsageCollectionSetup, UsageCollectionStart } from '@kbn/usage-collection-plugin/server'; export interface DatasetQualityPluginSetupDependencies { fleet: FleetSetupContract; - analytics: AnalyticsServiceSetup; telemetry: TelemetryPluginSetup; taskManager: TaskManagerSetupContract; + usageCollection?: UsageCollectionSetup; } export interface DatasetQualityPluginStartDependencies { fleet: FleetStartContract; telemetry: TelemetryPluginStart; - analytics: AnalyticsServiceStart; taskManager: TaskManagerStartContract; + usageCollection?: UsageCollectionStart; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json index aab3038a9436..934c0e434d9a 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json +++ b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json @@ -53,11 +53,11 @@ "@kbn/ebt-tools", "@kbn/fields-metadata-plugin", "@kbn/server-route-repository-utils", - "@kbn/core-analytics-server", "@kbn/core-analytics-browser", "@kbn/core-lifecycle-browser", "@kbn/core-notifications-browser", "@kbn/telemetry-plugin", + "@kbn/usage-collection-plugin", "@kbn/rison", "@kbn/task-manager-plugin" ], diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_dashboards_fetcher.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_dashboards_fetcher.ts index 0035fbc0a588..c6be0f59efd0 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_dashboards_fetcher.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_dashboards_fetcher.ts @@ -6,7 +6,7 @@ */ import { useState, useEffect } from 'react'; -import type { SearchDashboardsResponse } from '@kbn/dashboard-plugin/public/services/dashboard_content_management/lib/find_dashboards'; +import type { SearchDashboardsResponse } from '@kbn/dashboard-plugin/public'; import { i18n } from '@kbn/i18n'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { FETCH_STATUS } from '../../../hooks/use_fetcher'; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/plugin.tsx b/x-pack/plugins/observability_solution/investigate_app/public/plugin.tsx index de3aa5f5ed00..a98d89fb314b 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/plugin.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/plugin.tsx @@ -4,9 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { css } from '@emotion/css'; import { - APP_WRAPPER_CLASS, AppMountParameters, AppStatus, CoreSetup, @@ -106,17 +104,8 @@ export class InvestigateAppPlugin appMountParameters.element ); - const appWrapperClassName = css` - overflow: auto; - `; - - const appWrapperElement = document.getElementsByClassName(APP_WRAPPER_CLASS)[1]; - - appWrapperElement.classList.add(appWrapperClassName); - return () => { ReactDOM.unmountComponentAtNode(appMountParameters.element); - appWrapperElement.classList.remove(appWrapperClassName); }; }, }); diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/loading_item_view.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/loading_item_view.tsx index 72490b593694..68b21ad8d029 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/loading_item_view.tsx +++ b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/loading_item_view.tsx @@ -63,13 +63,20 @@ export class LogTextStreamLoadingItemView extends React.PureComponent< onStreamStart, } = this.props; - const shouldShowCta = !hasMore && !isStreaming; + const shouldShowCta = !hasMore && !isStreaming && !isLoading; const extra = ( - - {isLoading || isStreaming ? ( + + {(isLoading || isStreaming) && ( - ) : shouldShowCta ? ( + )} + + {shouldShowCta && ( - ) : null} + )} ); @@ -181,9 +188,15 @@ const ProgressCta: React.FC = ({ if (rangeEdge === 'now' && position === 'end') { return ( - - - +
+ + + +
); } @@ -197,19 +210,20 @@ const ProgressCta: React.FC = ({ } return ( - { - if (typeof onExtendRange === 'function') { - onExtendRange(extendedRange.value); - } - }} - iconType={iconType} - size="s" - role="cell" - > - - +
+ { + if (typeof onExtendRange === 'function') { + onExtendRange(extendedRange.value); + } + }} + iconType={iconType} + size="s" + > + + +
); }; diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_text_separator.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_text_separator.tsx index 2c06cca214ec..abdce85ad379 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_text_separator.tsx +++ b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/log_text_separator.tsx @@ -13,9 +13,11 @@ import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule } from '@elastic/eui'; */ export const LogTextSeparator: FC> = ({ children }) => { return ( - - {children} - + + + {children} + + diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/vertical_scroll_panel.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/vertical_scroll_panel.tsx index ec8d666ef9b8..c3db8b6e6b02 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/vertical_scroll_panel.tsx +++ b/x-pack/plugins/observability_solution/logs_shared/public/components/logging/log_text_stream/vertical_scroll_panel.tsx @@ -250,6 +250,7 @@ export class VerticalScrollPanel extends React.PureComponent< ref={this.scrollRef} tabIndex={0} className="eui-scrollBar" + role="rowgroup" > {typeof children === 'function' ? children(this.registerChild) : null} diff --git a/x-pack/plugins/observability_solution/logs_shared/server/services/log_views/log_views_client.test.ts b/x-pack/plugins/observability_solution/logs_shared/server/services/log_views/log_views_client.test.ts index f6df48b22ba7..004b3e90d4b5 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/services/log_views/log_views_client.test.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/services/log_views/log_views_client.test.ts @@ -255,7 +255,7 @@ describe('LogViewsClient class', () => { "deleteFieldFormat": [Function], "deleteScriptedFieldInternal": [Function], "etag": undefined, - "fieldAttrs": Object {}, + "fieldAttrs": Map {}, "fieldFormatMap": Object {}, "fieldFormats": Object { "deserialize": [MockFunction], diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx index dac2fe6af63e..1808f5a4ea83 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx @@ -201,6 +201,36 @@ export function HeaderActions({ return ( <> + + {Boolean(investigatePlugin) && + alert?.fields[ALERT_RULE_TYPE_ID] === OBSERVABILITY_THRESHOLD_RULE_TYPE_ID ? ( + + ) : ( + + + {i18n.translate('xpack.observability.alertDetails.editSnoozeRule', { + defaultMessage: 'Snooze the rule', + })} + + + )} + {Boolean(investigatePlugin) && alert?.fields[ALERT_RULE_TYPE_ID] === OBSERVABILITY_THRESHOLD_RULE_TYPE_ID && ( @@ -222,21 +252,6 @@ export function HeaderActions({ )} - - - - {i18n.translate('xpack.observability.alertDetails.editSnoozeRule', { - defaultMessage: 'Snooze the rule', - })} - - - diff --git a/x-pack/plugins/observability_solution/slo/public/rules/register_burn_rate_rule_type.ts b/x-pack/plugins/observability_solution/slo/public/rules/register_burn_rate_rule_type.ts index f14063b77463..f84380954362 100644 --- a/x-pack/plugins/observability_solution/slo/public/rules/register_burn_rate_rule_type.ts +++ b/x-pack/plugins/observability_solution/slo/public/rules/register_burn_rate_rule_type.ts @@ -46,7 +46,7 @@ const sloBurnRateDefaultRecoveryMessage = i18n.translate( } ); -export const registerBurnRateRuleType = async ( +export const registerBurnRateRuleType = ( observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry ) => { observabilityRuleTypeRegistry.register({ diff --git a/x-pack/plugins/osquery/cypress/tasks/live_query.ts b/x-pack/plugins/osquery/cypress/tasks/live_query.ts index bde4bc4b46d0..c8ef18801013 100644 --- a/x-pack/plugins/osquery/cypress/tasks/live_query.ts +++ b/x-pack/plugins/osquery/cypress/tasks/live_query.ts @@ -140,7 +140,7 @@ export const addLiveQueryToCase = (actionId: string, caseId: string) => { addToCase(caseId); }; -const casesOsqueryResultRegex = /attached Osquery results[\s]?[\d]+[\s]?seconds ago/; +const casesOsqueryResultRegex = /attached Osquery results[\s]?[\d]+[\s]?second(?:s)? ago/; export const viewRecentCaseAndCheckResults = () => { cy.contains('View case').click(); cy.contains(casesOsqueryResultRegex); diff --git a/x-pack/plugins/search_indices/public/components/indices/details_page.tsx b/x-pack/plugins/search_indices/public/components/indices/details_page.tsx index 46e595a3d220..ce44bffb045c 100644 --- a/x-pack/plugins/search_indices/public/components/indices/details_page.tsx +++ b/x-pack/plugins/search_indices/public/components/indices/details_page.tsx @@ -43,11 +43,18 @@ export const SearchIndexDetailsPage = () => { const tabId = decodeURIComponent(useParams<{ tabId: string }>().tabId); const { console: consolePlugin, docLinks, application, history } = useKibana().services; - const { data: index, refetch, isError: isIndexError, isInitialLoading } = useIndex(indexName); + const { + data: index, + refetch, + isError: isIndexError, + isInitialLoading, + error: indexLoadingError, + } = useIndex(indexName); const { data: mappings, isError: isMappingsError, isInitialLoading: isMappingsInitialLoading, + error: mappingsError, } = useIndexMapping(indexName); const detailsPageTabs: EuiTabbedContentTab[] = useMemo(() => { @@ -103,6 +110,19 @@ export const SearchIndexDetailsPage = () => { const refetchIndex = useCallback(() => { refetch(); }, [refetch]); + const indexError = useMemo( + () => + isIndexError + ? { + title: indexLoadingError ? indexLoadingError.body?.error : '', + message: indexLoadingError ? indexLoadingError.body?.message : '', + } + : { + title: mappingsError ? mappingsError.body?.error : '', + message: mappingsError ? mappingsError.body?.message : '', + }, + [isIndexError, indexLoadingError, mappingsError] + ); const [showMoreOptions, setShowMoreOptions] = useState(false); const [isShowingDeleteModal, setShowDeleteIndexModal] = useState(false); const moreOptionsPopover = ( @@ -165,7 +185,7 @@ export const SearchIndexDetailsPage = () => { > {isIndexError || isMappingsError || !index || !mappings ? ( diff --git a/x-pack/plugins/search_indices/public/components/indices/details_page_loading_error.tsx b/x-pack/plugins/search_indices/public/components/indices/details_page_loading_error.tsx index 2b02f6c9e171..a20bbe4d2e2e 100644 --- a/x-pack/plugins/search_indices/public/components/indices/details_page_loading_error.tsx +++ b/x-pack/plugins/search_indices/public/components/indices/details_page_loading_error.tsx @@ -15,12 +15,15 @@ import { import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; interface IndexloadingErrorProps { - indexName: string; + error: { + title: string; + message: string; + }; navigateToIndexListPage: () => void; reloadFunction: () => void; } export const IndexloadingError = ({ - indexName, + error: { title, message }, navigateToIndexListPage, reloadFunction, }: IndexloadingErrorProps) => ( @@ -31,8 +34,11 @@ export const IndexloadingError = ({ title={

} @@ -40,9 +46,9 @@ export const IndexloadingError = ({ diff --git a/x-pack/plugins/search_indices/public/hooks/api/use_index.ts b/x-pack/plugins/search_indices/public/hooks/api/use_index.ts index 8b72308e44df..e91e4c9d06f5 100644 --- a/x-pack/plugins/search_indices/public/hooks/api/use_index.ts +++ b/x-pack/plugins/search_indices/public/hooks/api/use_index.ts @@ -14,12 +14,14 @@ const POLLING_INTERVAL = 15 * 1000; export const useIndex = (indexName: string) => { const { http } = useKibana().services; const queryKey = [QueryKeys.FetchIndex, indexName]; - const result = useQuery({ + const result = useQuery({ queryKey, refetchInterval: POLLING_INTERVAL, refetchIntervalInBackground: true, refetchOnWindowFocus: 'always', - retry: 3, + retry: (failureCount, error) => { + return !(error?.body?.statusCode === 404 || failureCount === 3); + }, queryFn: () => http.fetch(`/internal/index_management/indices/${encodeURIComponent(indexName)}`), }); diff --git a/x-pack/plugins/search_indices/public/hooks/api/use_index_mappings.ts b/x-pack/plugins/search_indices/public/hooks/api/use_index_mappings.ts index a91198f70b4e..0e57e1746592 100644 --- a/x-pack/plugins/search_indices/public/hooks/api/use_index_mappings.ts +++ b/x-pack/plugins/search_indices/public/hooks/api/use_index_mappings.ts @@ -12,7 +12,7 @@ import { Mappings } from '../../types'; export const useIndexMapping = (indexName: string) => { const { http } = useKibana().services; const queryKey = ['fetchMapping', indexName]; - const result = useQuery({ + const result = useQuery({ queryKey, refetchOnWindowFocus: 'always', queryFn: () => diff --git a/x-pack/plugins/search_playground/public/components/chat.tsx b/x-pack/plugins/search_playground/public/components/chat.tsx index b27955c326d2..fd89eb0ca4f6 100644 --- a/x-pack/plugins/search_playground/public/components/chat.tsx +++ b/x-pack/plugins/search_playground/public/components/chat.tsx @@ -198,6 +198,7 @@ export const Chat = () => { button={ isSubmitting || isRegenerating ? ( ; + _index: ECSField; '@timestamp': ECSField; agent: Partial<{ id: ECSField; @@ -815,6 +817,8 @@ export type SafeEndpointEvent = Partial<{ }>; export interface SafeLegacyEndpointEvent { + _id: ECSField; + _index: ECSField; '@timestamp'?: ECSField; /** * 'legacy' events must have an `endgame` key. diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 0122eccb2e7c..88ca097e09b1 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -182,6 +182,12 @@ export const allowedExperimentalValues = Object.freeze({ */ crowdstrikeDataInAnalyzerEnabled: true, + /** + * Enables Response actions telemetry collection + * Should be enabled in 8.17.0 + */ + responseActionsTelemetryEnabled: false, + /** * Enables experimental JAMF integration data to be available in Analyzer */ diff --git a/x-pack/plugins/security_solution/public/attack_discovery/attack_discovery_panel/tabs/attack_discovery_tab/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/attack_discovery_panel/tabs/attack_discovery_tab/index.tsx index 5958e4a3c444..0b1c28d43eed 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/attack_discovery_panel/tabs/attack_discovery_tab/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/attack_discovery_panel/tabs/attack_discovery_tab/index.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { replaceAnonymizedValuesWithOriginalValues } from '@kbn/elastic-assistant-common'; import type { AttackDiscovery, Replacements } from '@kbn/elastic-assistant-common'; import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiSpacer, EuiTitle, useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/react'; @@ -34,21 +35,19 @@ const AttackDiscoveryTabComponent: React.FC = ({ const summaryMarkdownWithReplacements = useMemo( () => - Object.entries(replacements ?? {}).reduce((acc, [key, value]) => { - const regex = new RegExp(key, 'g'); - - return acc.replace(regex, value); - }, summaryMarkdown), + replaceAnonymizedValuesWithOriginalValues({ + messageContent: summaryMarkdown, + replacements: replacements ?? {}, + }), [replacements, summaryMarkdown] ); const detailsMarkdownWithReplacements = useMemo( () => - Object.entries(replacements ?? {}).reduce((acc, [key, value]) => { - const regex = new RegExp(key, 'g'); - - return acc.replace(regex, value); - }, detailsMarkdown), + replaceAnonymizedValuesWithOriginalValues({ + messageContent: detailsMarkdown, + replacements: replacements ?? {}, + }), [detailsMarkdown, replacements] ); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx index cc4be9df6020..379ee6cafbd6 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/analyzer_panels/index.tsx @@ -5,11 +5,14 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback } from 'react'; import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; import { FlyoutBody } from '@kbn/security-solution-common'; +import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; import type { DocumentDetailsAnalyzerPanelKey } from '../shared/constants/panel_keys'; import { DetailsPanel } from '../../../resolver/view/details_panel'; +import { DocumentDetailsPreviewPanelKey } from '../shared/constants/panel_keys'; +import { ALERT_PREVIEW_BANNER } from '../preview/constants'; interface AnalyzerPanelProps extends Record { /** @@ -27,10 +30,32 @@ export interface AnalyzerPanelExpandableFlyoutProps extends FlyoutPanelProps { * Displays node details panel for analyzer */ export const AnalyzerPanel: React.FC = ({ resolverComponentInstanceID }) => { + const { openPreviewPanel } = useExpandableFlyoutApi(); + + const openPreview = useCallback( + ({ documentId, indexName, scopeId }) => + () => { + openPreviewPanel({ + id: DocumentDetailsPreviewPanelKey, + params: { + id: documentId, + indexName, + scopeId, + isPreviewMode: true, + banner: ALERT_PREVIEW_BANNER, + }, + }); + }, + [openPreviewPanel] + ); + return (
- +
); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx index 7e19a0386001..ba93729c68d2 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/execute_action.tsx @@ -32,12 +32,13 @@ export const ExecuteActionResult = memo< >(({ command, setStore, store, status, setStatus, ResultComponent }) => { const actionCreator = useSendExecuteEndpoint(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; + const { endpointId, agentType } = command.commandDefinition?.meta ?? {}; if (!endpointId) { return; } return { + agent_type: agentType, endpoint_ids: [endpointId], parameters: { command: command.args.args.command[0], @@ -46,7 +47,7 @@ export const ExecuteActionResult = memo< comment: command.args.args?.comment?.[0], }; }, [ - command.commandDefinition?.meta?.endpointId, + command.commandDefinition?.meta, command.args.args.command, command.args.args.timeout, command.args.args?.comment, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/get_file_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/get_file_action.tsx index 90e44c4a56ee..8b45e1dee9da 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/get_file_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/get_file_action.tsx @@ -23,9 +23,8 @@ export const GetFileActionResult = memo< const actionCreator = useSendGetFileRequest(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; + const { agentType, endpointId } = command.commandDefinition?.meta ?? {}; const { path, comment } = command.args.args; - const agentType = command.commandDefinition?.meta?.agentType; return endpointId ? { @@ -37,11 +36,7 @@ export const GetFileActionResult = memo< }, } : undefined; - }, [ - command.args.args, - command.commandDefinition?.meta?.agentType, - command.commandDefinition?.meta?.endpointId, - ]); + }, [command.args.args, command.commandDefinition?.meta]); const { result, actionDetails } = useConsoleActionSubmitter({ ResultComponent, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx index 52aaf0675e2d..7e2a5bf62223 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/execute_action.test.tsx @@ -153,7 +153,7 @@ describe('When using execute action from response actions console', () => { await waitFor(() => { expect(apiMocks.responseProvider.execute).toHaveBeenCalledWith({ - body: '{"endpoint_ids":["a.b.c"],"parameters":{"command":"ls -al"}}', + body: '{"agent_type":"endpoint","endpoint_ids":["a.b.c"],"parameters":{"command":"ls -al"}}', path: EXECUTE_ROUTE, version: '2023-10-31', }); diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/isolate_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/isolate_action.tsx index d4755a204482..325a84bc70bf 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/isolate_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/isolate_action.tsx @@ -19,9 +19,8 @@ export const IsolateActionResult = memo( const isolateHostApi = useSendIsolateEndpointRequest(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; + const { agentType, endpointId } = command.commandDefinition?.meta ?? {}; const comment = command.args.args?.comment?.[0]; - const agentType = command.commandDefinition?.meta?.agentType; return endpointId ? { @@ -30,12 +29,7 @@ export const IsolateActionResult = memo( comment, } : undefined; - }, [ - command.args.args?.comment, - command.commandDefinition?.meta?.agentType, - command.commandDefinition?.meta?.endpointId, - isSentinelOneV1Enabled, - ]); + }, [command.args.args?.comment, command.commandDefinition?.meta, isSentinelOneV1Enabled]); return useConsoleActionSubmitter({ ResultComponent, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/kill_process_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/kill_process_action.tsx index e96f1f0028b7..3f781d54240f 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/kill_process_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/kill_process_action.tsx @@ -18,8 +18,7 @@ export const KillProcessActionResult = memo< const actionCreator = useSendKillProcessRequest(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; - const agentType = command.commandDefinition?.meta?.agentType; + const { endpointId, agentType } = command.commandDefinition?.meta ?? {}; const parameters = parsedKillOrSuspendParameter(command.args.args); return endpointId @@ -30,11 +29,7 @@ export const KillProcessActionResult = memo< parameters, } : undefined; - }, [ - command.args.args, - command.commandDefinition?.meta?.agentType, - command.commandDefinition?.meta?.endpointId, - ]); + }, [command.args.args, command.commandDefinition?.meta]); return useConsoleActionSubmitter({ ResultComponent, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/release_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/release_action.tsx index 5f250ea65641..52caba57af86 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/release_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/release_action.tsx @@ -19,9 +19,8 @@ export const ReleaseActionResult = memo( const releaseHostApi = useSendReleaseEndpointRequest(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; + const { endpointId, agentType } = command.commandDefinition?.meta ?? {}; const comment = command.args.args?.comment?.[0]; - const agentType = command.commandDefinition?.meta?.agentType; return endpointId ? { @@ -30,12 +29,7 @@ export const ReleaseActionResult = memo( comment, } : undefined; - }, [ - command.args.args?.comment, - command.commandDefinition?.meta?.agentType, - command.commandDefinition?.meta?.endpointId, - isSentinelOneV1Enabled, - ]); + }, [command.args.args?.comment, command.commandDefinition?.meta, isSentinelOneV1Enabled]); return useConsoleActionSubmitter({ ResultComponent, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/suspend_process_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/suspend_process_action.tsx index b2a73b426aa2..d685e306e7b0 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/suspend_process_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/suspend_process_action.tsx @@ -23,19 +23,20 @@ export const SuspendProcessActionResult = memo< const actionCreator = useSendSuspendProcessRequest(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; + const { agentType, endpointId } = command.commandDefinition?.meta ?? {}; const parameters = parsedKillOrSuspendParameter(command.args.args) as | ResponseActionParametersWithPid | ResponseActionParametersWithEntityId; return endpointId ? { + agent_type: agentType, endpoint_ids: [endpointId], comment: command.args.args?.comment?.[0], parameters, } : undefined; - }, [command.args.args, command.commandDefinition?.meta?.endpointId]); + }, [command.args.args, command.commandDefinition?.meta]); return useConsoleActionSubmitter({ ResultComponent, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/upload_action.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/upload_action.tsx index 5f27cb285ed1..b656f7aade6e 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/upload_action.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/upload_action.tsx @@ -29,7 +29,7 @@ export const UploadActionResult = memo< const actionCreator = useSendUploadEndpointRequest(); const actionRequestBody = useMemo(() => { - const endpointId = command.commandDefinition?.meta?.endpointId; + const { agentType, endpointId } = command.commandDefinition?.meta ?? {}; const { comment, overwrite, file } = command.args.args; if (!endpointId) { @@ -37,6 +37,7 @@ export const UploadActionResult = memo< } const reqBody: UploadActionUIRequestBody = { + agent_type: agentType, endpoint_ids: [endpointId], ...(comment?.[0] ? { comment: comment?.[0] } : {}), parameters: @@ -49,7 +50,7 @@ export const UploadActionResult = memo< }; return reqBody; - }, [command.args.args, command.commandDefinition?.meta?.endpointId]); + }, [command.args.args, command.commandDefinition?.meta]); const { result, actionDetails } = useConsoleActionSubmitter< UploadActionUIRequestBody, diff --git a/x-pack/plugins/security_solution/public/resolver/view/details_panel.tsx b/x-pack/plugins/security_solution/public/resolver/view/details_panel.tsx index b4158c85c177..8b1cc15f3d3e 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/details_panel.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/details_panel.tsx @@ -13,65 +13,77 @@ import * as selectors from '../store/selectors'; import { PanelRouter } from './panels'; import { ResolverNoProcessEvents } from './resolver_no_process_events'; import type { State } from '../../common/store/types'; +import type { NodeEventOnClick } from './panels/node_events_of_type'; interface DetailsPanelProps { /** * Id that identify the scope of analyzer */ resolverComponentInstanceID: string; + /** + * Optional callback when a node event is clicked + */ + nodeEventOnClick?: NodeEventOnClick; } /** * Details panel component */ -const DetailsPanelComponent = React.memo(({ resolverComponentInstanceID }: DetailsPanelProps) => { - const isLoading = useSelector((state: State) => - selectors.isTreeLoading(state.analyzer[resolverComponentInstanceID]) - ); - const hasError = useSelector((state: State) => - selectors.hadErrorLoadingTree(state.analyzer[resolverComponentInstanceID]) - ); - const resolverTreeHasNodes = useSelector((state: State) => - selectors.resolverTreeHasNodes(state.analyzer[resolverComponentInstanceID]) - ); +const DetailsPanelComponent = React.memo( + ({ resolverComponentInstanceID, nodeEventOnClick }: DetailsPanelProps) => { + const isLoading = useSelector((state: State) => + selectors.isTreeLoading(state.analyzer[resolverComponentInstanceID]) + ); + const hasError = useSelector((state: State) => + selectors.hadErrorLoadingTree(state.analyzer[resolverComponentInstanceID]) + ); + const resolverTreeHasNodes = useSelector((state: State) => + selectors.resolverTreeHasNodes(state.analyzer[resolverComponentInstanceID]) + ); - return isLoading ? ( -
- -
- ) : hasError ? ( -
-
- {' '} - + return isLoading ? ( +
+
-
- ) : resolverTreeHasNodes ? ( - - ) : ( - - ); -}); + ) : hasError ? ( +
+
+ {' '} + +
+
+ ) : resolverTreeHasNodes ? ( + + ) : ( + + ); + } +); DetailsPanelComponent.displayName = 'DetailsPanelComponent'; /** * Stand alone details panel to be used when in split panel mode */ -export const DetailsPanel = React.memo(({ resolverComponentInstanceID }: DetailsPanelProps) => { - const isAnalyzerInitialized = useSelector((state: State) => - Boolean(state.analyzer[resolverComponentInstanceID]) - ); +export const DetailsPanel = React.memo( + ({ resolverComponentInstanceID, nodeEventOnClick }: DetailsPanelProps) => { + const isAnalyzerInitialized = useSelector((state: State) => + Boolean(state.analyzer[resolverComponentInstanceID]) + ); - return isAnalyzerInitialized ? ( - - ) : ( -
- -
- ); -}); + return isAnalyzerInitialized ? ( + + ) : ( +
+ +
+ ); + } +); DetailsPanel.displayName = 'DetailsPanel'; diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx index 3367de214ab0..c5d91024195f 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx @@ -8,19 +8,26 @@ import React, { memo } from 'react'; import { useSelector } from 'react-redux'; import * as selectors from '../../store/selectors'; -import { NodeEventsInCategory } from './node_events_of_type'; +import { NodeEventsInCategory, type NodeEventOnClick } from './node_events_of_type'; import { NodeEvents } from './node_events'; import { NodeDetail } from './node_detail'; import { NodeList } from './node_list'; import { EventDetail } from './event_detail'; import type { PanelViewAndParameters } from '../../types'; import type { State } from '../../../common/store/types'; + /** * Show the panel that matches the `panelViewAndParameters` (derived from the browser's location.search) */ // eslint-disable-next-line react/display-name -export const PanelRouter = memo(function ({ id }: { id: string }) { +export const PanelRouter = memo(function ({ + id, + nodeEventOnClick, +}: { + id: string; + nodeEventOnClick?: NodeEventOnClick; +}) { const params: PanelViewAndParameters = useSelector((state: State) => selectors.panelViewAndParameters(state.analyzer[id]) ); @@ -34,6 +41,7 @@ export const PanelRouter = memo(function ({ id }: { id: string }) { id={id} nodeID={params.panelParameters.nodeID} eventCategory={params.panelParameters.eventCategory} + nodeEventOnClick={nodeEventOnClick} /> ); } else if (params.panelView === 'eventDetail') { diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.test.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.test.tsx index 953153b4f365..65ca0e1e9531 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.test.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.test.tsx @@ -5,15 +5,21 @@ * 2.0. */ -import { act } from '@testing-library/react'; +import React from 'react'; +import { act, render } from '@testing-library/react'; import type { History as HistoryPackageHistoryInterface } from 'history'; import { createMemoryHistory } from 'history'; - +import { TestProviders } from '../../../common/mock'; +import { NodeEventsListItem } from './node_events_of_type'; import { oneNodeWithPaginatedEvents } from '../../data_access_layer/mocks/one_node_with_paginated_related_events'; import { Simulator } from '../../test_utilities/simulator'; // Extend jest with a custom matcher import '../../test_utilities/extend_jest'; import { urlSearch } from '../../test_utilities/url_search'; +import { useLinkProps } from '../use_link_props'; + +jest.mock('../use_link_props'); +const mockUseLinkProps = useLinkProps as jest.Mock; // the resolver component instance ID, used by the react code to distinguish piece of global state from those used by other resolver instances const resolverComponentInstanceID = 'resolverComponentInstanceID'; @@ -106,3 +112,35 @@ describe(`Resolver: when analyzing a tree with only the origin and paginated rel }); }); }); + +describe('', () => { + it('should call custom node onclick when it is available', () => { + const nodeEventOnClick = jest.fn(); + mockUseLinkProps.mockReturnValue({ href: '#', onClick: jest.fn() }); + const { getByTestId } = render( + + + + ); + expect(getByTestId('resolver:panel:node-events-in-category:event-link')).toBeInTheDocument(); + getByTestId('resolver:panel:node-events-in-category:event-link').click(); + expect(nodeEventOnClick).toBeCalledWith({ + documentId: 'test _id', + indexName: '_index', + scopeId: 'test', + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx index 5409eaede0a7..07a1ee9464cc 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx @@ -31,6 +31,16 @@ import { expandDottedObject } from '../../../../common/utils/expand_dotted'; import type { State } from '../../../common/store/types'; import { userRequestedAdditionalRelatedEvents } from '../../store/data/action'; +export type NodeEventOnClick = ({ + documentId, + indexName, + scopeId, +}: { + documentId: string | undefined; + indexName: string | undefined; + scopeId: string; +}) => () => void; + /** * Render a list of events that are related to `nodeID` and that have a category of `eventType`. */ @@ -39,10 +49,12 @@ export const NodeEventsInCategory = memo(function ({ id, nodeID, eventCategory, + nodeEventOnClick, }: { id: string; nodeID: string; eventCategory: string; + nodeEventOnClick?: NodeEventOnClick; }) { const node = useSelector((state: State) => selectors.graphNodeForID(state.analyzer[id])(nodeID)); const isLoading = useSelector((state: State) => @@ -84,7 +96,12 @@ export const NodeEventsInCategory = memo(function ({ nodeID={nodeID} /> - +
)} @@ -95,20 +112,24 @@ export const NodeEventsInCategory = memo(function ({ * Rendered for each event in the list. */ // eslint-disable-next-line react/display-name -const NodeEventsListItem = memo(function ({ +export const NodeEventsListItem = memo(function ({ id, event, nodeID, eventCategory, + nodeEventOnClick, }: { id: string; event: SafeResolverEvent; nodeID: string; eventCategory: string; + nodeEventOnClick?: NodeEventOnClick; }) { const expandedEvent = expandDottedObject(event); const timestamp = eventModel.eventTimestamp(expandedEvent); const eventID = eventModel.eventID(expandedEvent); + const documentId = eventModel.documentID(expandedEvent); + const indexName = eventModel.indexName(expandedEvent); const winlogRecordID = eventModel.winlogRecordID(expandedEvent); const date = useFormattedDate(timestamp) || @@ -125,6 +146,7 @@ const NodeEventsListItem = memo(function ({ winlogRecordID: String(winlogRecordID), }, }); + return ( <> @@ -147,12 +169,21 @@ const NodeEventsListItem = memo(function ({ - - - + {nodeEventOnClick ? ( + + + + ) : ( + + + + )} ); }); @@ -164,10 +195,12 @@ const NodeEventList = memo(function NodeEventList({ id, eventCategory, nodeID, + nodeEventOnClick, }: { id: string; eventCategory: string; nodeID: string; + nodeEventOnClick?: NodeEventOnClick; }) { const events = useSelector((state: State) => selectors.nodeEventsInCategory(state.analyzer[id])); const dispatch = useDispatch(); @@ -184,7 +217,13 @@ const NodeEventList = memo(function NodeEventList({ <> {events.map((event, index) => ( - + {index === events.length - 1 ? null : } ))} diff --git a/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx b/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx index 3846e1d7b19d..4779ea4eb4ae 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx @@ -131,6 +131,7 @@ const UnstyledProcessEventDot = React.memo( nodeID, projectionMatrix, timeAtRender, + onClick, }: { /** * Id that identify the scope of analyzer @@ -161,6 +162,11 @@ const UnstyledProcessEventDot = React.memo( * The time (unix epoch) at render. */ timeAtRender: number; + + /** + * Optional onClick to be called when clicking on a node + */ + onClick?: () => void | undefined; }) => { const resolverComponentInstanceID = id; // This should be unique to each instance of Resolver @@ -334,8 +340,12 @@ const UnstyledProcessEventDot = React.memo( ); processDetailNavProps.onClick(clickEvent); } + + if (onClick) { + onClick(); + } }, - [animationTarget, dispatch, nodeID, processDetailNavProps, nodeState, timestamp, id] + [animationTarget, dispatch, nodeID, processDetailNavProps, nodeState, timestamp, id, onClick] ); const grandTotal: number | null = useSelector((state: State) => @@ -533,6 +543,7 @@ const UnstyledProcessEventDot = React.memo( buttonFill={colorMap.resolverBackground} nodeStats={nodeStats} nodeID={nodeID} + onClick={onClick} /> )}
diff --git a/x-pack/plugins/security_solution/public/resolver/view/resolver_without_providers.tsx b/x-pack/plugins/security_solution/public/resolver/view/resolver_without_providers.tsx index e9090dd7fa9d..eda8c4993199 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/resolver_without_providers.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/resolver_without_providers.tsx @@ -160,6 +160,7 @@ export const ResolverWithoutProviders = React.memo( projectionMatrix={projectionMatrix} node={treeNode} timeAtRender={timeAtRender} + onClick={isSplitPanel ? showPanelOnClick : undefined} /> ); })} diff --git a/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx b/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx index 24a32f759ae7..76204d3a25a7 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx @@ -25,6 +25,7 @@ export const NodeSubMenuComponents = React.memo( className, nodeID, nodeStats, + onClick, }: { id: string; className?: string; @@ -35,6 +36,7 @@ export const NodeSubMenuComponents = React.memo( */ nodeID: string; nodeStats: EventStats | undefined; + onClick?: () => void; }) => { const relatedEventOptions = useMemo(() => { if (nodeStats === undefined) { @@ -61,7 +63,15 @@ export const NodeSubMenuComponents = React.memo( return opta.category.localeCompare(optb.category); }) .map((pill) => { - return ; + return ( + + ); })} ); @@ -72,10 +82,12 @@ const NodeSubmenuPill = ({ id, pill, nodeID, + onClick, }: { id: string; pill: { prefix: JSX.Element; category: string }; nodeID: string; + onClick?: () => void; }) => { const linkProps = useLinkProps(id, { panelView: 'nodeEventsInCategory', @@ -102,8 +114,13 @@ const NodeSubmenuPill = ({ time: timestamp(), }) ); + // onClick call back to open the details panel + // only used when in split mode + if (onClick) { + onClick(); + } }, - [timestamp, linkProps, dispatch, nodeID, id] + [timestamp, linkProps, dispatch, nodeID, id, onClick] ); return (
  • fleetActionsClientMock), + getTelemetryService: jest.fn(), getInternalResponseActionsClient: jest.fn(() => { return responseActionsClientMock.create(); }), @@ -143,6 +145,7 @@ export const createMockEndpointAppContextServiceSetupContract = securitySolutionRequestContextFactory: requestContextFactoryMock.create(), cloud: cloudMock.createSetup(), loggerFactory: loggingSystemMock.create(), + telemetry: analyticsServiceMock.createAnalyticsServiceSetup(), }; }; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts index 16c3ea8ffd42..b6eb2376bd1c 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts @@ -55,7 +55,10 @@ import type { ResponseActionsExecuteParameters, ResponseActionScanParameters, } from '../../../../common/endpoint/types'; -import type { ResponseActionsApiCommandNames } from '../../../../common/endpoint/service/response_actions/constants'; +import type { + ResponseActionAgentType, + ResponseActionsApiCommandNames, +} from '../../../../common/endpoint/service/response_actions/constants'; import type { SecuritySolutionPluginRouter, SecuritySolutionRequestHandlerContext, @@ -321,15 +324,12 @@ function responseActionRequestHandler { logger.debug(() => `response action [${command}]:\n${stringify(req.body)}`); + const experimentalFeatures = endpointContext.experimentalFeatures; + // Note: because our API schemas are defined as module static variables (as opposed to a // `getter` function), we need to include this additional validation here, since // `agent_type` is included in the schema independent of the feature flag - if ( - (req.body.agent_type === 'sentinel_one' && - !endpointContext.experimentalFeatures.responseActionsSentinelOneV1Enabled) || - (req.body.agent_type === 'crowdstrike' && - !endpointContext.experimentalFeatures.responseActionsCrowdstrikeManualHostIsolationEnabled) - ) { + if (isThirdPartyFeatureDisabled(req.body.agent_type, experimentalFeatures)) { return errorHandler( logger, res, @@ -354,59 +354,12 @@ function responseActionRequestHandler { + switch (command) { + case 'isolate': + return responseActionsClient.isolate(body); + case 'unisolate': + return responseActionsClient.release(body); + case 'running-processes': + return responseActionsClient.runningProcesses(body); + case 'execute': + return responseActionsClient.execute(body as ExecuteActionRequestBody); + case 'suspend-process': + return responseActionsClient.suspendProcess(body as SuspendProcessRequestBody); + case 'kill-process': + return responseActionsClient.killProcess(body as KillProcessRequestBody); + case 'get-file': + return responseActionsClient.getFile(body as ResponseActionGetFileRequestBody); + case 'upload': + return responseActionsClient.upload(body as UploadActionApiRequestBody); + case 'scan': + return responseActionsClient.scan(body as ScanActionRequestBody); + default: + throw new CustomHttpRequestError( + `No handler found for response action command: [${command}]`, + 501 + ); + } +} + function redirectHandler( location: string ): RequestHandler< diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts index bf0d04a19e75..f1da8d775aee 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/resolver/queries/events.ts @@ -128,18 +128,29 @@ export class EventsQuery extends BaseResolverQuery { const response = await client.asCurrentUser.search( this.buildSearch(parsedFilters) ); - // @ts-expect-error @elastic/elasticsearch _source is optional - return response.hits.hits.map((hit) => hit._source); + return response.hits.hits.map((hit) => ({ + ...hit._source, + _id: hit._id, + _index: hit._index, + })); } else { const { eventID, entityType, agentId } = body; if (entityType === 'alertDetail') { const response = await alertsClient.find(this.alertDetailQuery(eventID)); // @ts-expect-error @elastic/elasticsearch _source is optional - return response.hits.hits.map((hit) => hit._source); + return response.hits.hits.map((hit) => ({ + ...hit._source, + _id: hit._id, + _index: hit._index, + })); } else { const response = await alertsClient.find(this.alertsForProcessQuery(eventID, agentId)); // @ts-expect-error @elastic/elasticsearch _source is optional - return response.hits.hits.map((hit) => hit._source); + return response.hits.hits.map((hit) => ({ + ...hit._source, + _id: hit._id, + _index: hit._index, + })); } } } diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts index 67633e3badcc..20389d41f395 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.test.ts @@ -43,6 +43,10 @@ import { getResponseActionFeatureKey } from '../../../feature_usage/feature_keys import { isActionSupportedByAgentType as _isActionSupportedByAgentType } from '../../../../../../common/endpoint/service/response_actions/is_response_action_supported'; import { EndpointActionGenerator } from '../../../../../../common/endpoint/data_generators/endpoint_action_generator'; import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; +import { + ENDPOINT_RESPONSE_ACTION_SENT_ERROR_EVENT, + ENDPOINT_RESPONSE_ACTION_SENT_EVENT, +} from '../../../../../lib/telemetry/event_based/events'; jest.mock('../../action_details_by_id', () => { const original = jest.requireActual('../../action_details_by_id'); @@ -535,6 +539,100 @@ describe('ResponseActionsClientImpl base class', () => { }); }); }); + + describe('Telemetry', () => { + beforeEach(() => { + // @ts-expect-error + endpointAppContextService.experimentalFeatures.responseActionsTelemetryEnabled = true; + }); + + it('should send action creation success telemetry for manual actions', async () => { + await baseClassMock.writeActionRequestToEndpointIndex(indexDocOptions); + + expect(endpointAppContextService.getTelemetryService().reportEvent).toHaveBeenCalledWith( + ENDPOINT_RESPONSE_ACTION_SENT_EVENT.eventType, + { + responseActions: { + actionId: expect.any(String), + agentType: indexDocOptions.agent_type, + command: indexDocOptions.command, + isAutomated: false, + }, + } + ); + }); + + it('should send action creation success telemetry for automated actions', async () => { + constructorOptions.isAutomated = true; + baseClassMock = new MockClassWithExposedProtectedMembers(constructorOptions); + + await baseClassMock.writeActionRequestToEndpointIndex(indexDocOptions); + + expect(endpointAppContextService.getTelemetryService().reportEvent).toHaveBeenCalledWith( + ENDPOINT_RESPONSE_ACTION_SENT_EVENT.eventType, + { + responseActions: { + actionId: expect.any(String), + agentType: indexDocOptions.agent_type, + command: indexDocOptions.command, + isAutomated: true, + }, + } + ); + }); + + it('should send error telemetry if action creation fails', async () => { + esClient.index.mockImplementation(async () => { + throw new Error('test error'); + }); + const responsePromise = baseClassMock.writeActionRequestToEndpointIndex(indexDocOptions); + await expect(responsePromise).rejects.toBeInstanceOf(ResponseActionsClientError); + + expect(endpointAppContextService.getTelemetryService().reportEvent).toHaveBeenCalledWith( + ENDPOINT_RESPONSE_ACTION_SENT_ERROR_EVENT.eventType, + { + responseActions: { + agentType: indexDocOptions.agent_type, + command: indexDocOptions.command, + error: 'test error', + }, + } + ); + }); + }); + + describe('Telemetry (with feature disabled)', () => { + // although this is redundant, it is here to make sure that it works as expected wit the feature disabled + beforeEach(() => { + // @ts-expect-error + endpointAppContextService.experimentalFeatures.responseActionsTelemetryEnabled = false; + }); + + it('should not send action creation success telemetry for manual actions', async () => { + await baseClassMock.writeActionRequestToEndpointIndex(indexDocOptions); + + expect(endpointAppContextService.getTelemetryService().reportEvent).not.toHaveBeenCalled(); + }); + + it('should not send action creation success telemetry for automated actions', async () => { + constructorOptions.isAutomated = true; + baseClassMock = new MockClassWithExposedProtectedMembers(constructorOptions); + + await baseClassMock.writeActionRequestToEndpointIndex(indexDocOptions); + + expect(endpointAppContextService.getTelemetryService().reportEvent).not.toHaveBeenCalled(); + }); + + it('should not send error telemetry if action creation fails', async () => { + esClient.index.mockImplementation(async () => { + throw new Error('test error'); + }); + const responsePromise = baseClassMock.writeActionRequestToEndpointIndex(indexDocOptions); + await expect(responsePromise).rejects.toBeInstanceOf(ResponseActionsClientError); + + expect(endpointAppContextService.getTelemetryService().reportEvent).not.toHaveBeenCalled(); + }); + }); }); describe('#writeActionResponseToEndpointIndex()', () => { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts index 07ab63b77a31..0411e4a9c8f6 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/lib/base_response_actions_client.ts @@ -13,6 +13,11 @@ import { AttachmentType, ExternalReferenceStorageType } from '@kbn/cases-plugin/ import type { CaseAttachments } from '@kbn/cases-plugin/public/types'; import { i18n } from '@kbn/i18n'; import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; +import { + ENDPOINT_RESPONSE_ACTION_SENT_EVENT, + ENDPOINT_RESPONSE_ACTION_SENT_ERROR_EVENT, + ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT, +} from '../../../../../lib/telemetry/event_based/events'; import { NotFoundError } from '../../../../errors'; import { fetchActionRequestById } from '../../utils/fetch_action_request_by_id'; import { SimpleMemCache } from './simple_mem_cache'; @@ -513,8 +518,12 @@ export abstract class ResponseActionsClientImpl implements ResponseActionsClient ); } + this.sendActionCreationTelemetry(doc); + return doc; } catch (err) { + this.sendActionCreationErrorTelemetry(actionRequest.command, err); + if (!(err instanceof ResponseActionsClientError)) { throw new ResponseActionsClientError( `Failed to create action request document: ${err.message}`, @@ -709,6 +718,58 @@ export abstract class ResponseActionsClientImpl implements ResponseActionsClient }); } + protected sendActionCreationTelemetry(actionRequest: LogsEndpointAction): void { + if (!this.options.endpointService.experimentalFeatures.responseActionsTelemetryEnabled) { + return; + } + this.options.endpointService + .getTelemetryService() + .reportEvent(ENDPOINT_RESPONSE_ACTION_SENT_EVENT.eventType, { + responseActions: { + actionId: actionRequest.EndpointActions.action_id, + agentType: this.agentType, + command: actionRequest.EndpointActions.data.command, + isAutomated: this.options.isAutomated ?? false, + }, + }); + } + + protected sendActionCreationErrorTelemetry( + command: ResponseActionsApiCommandNames, + error: Error + ): void { + if (!this.options.endpointService.experimentalFeatures.responseActionsTelemetryEnabled) { + return; + } + this.options.endpointService + .getTelemetryService() + .reportEvent(ENDPOINT_RESPONSE_ACTION_SENT_ERROR_EVENT.eventType, { + responseActions: { + agentType: this.agentType, + command, + error: error.message, + }, + }); + } + + protected sendActionResponseTelemetry(responseList: LogsEndpointActionResponse[]): void { + if (!this.options.endpointService.experimentalFeatures.responseActionsTelemetryEnabled) { + return; + } + for (const response of responseList) { + this.options.endpointService + .getTelemetryService() + .reportEvent(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: response.EndpointActions.action_id, + agentType: this.agentType, + actionStatus: response.error ? 'failed' : 'successful', + command: response.EndpointActions.data.command, + }, + }); + } + } + public async isolate( actionRequest: IsolationRouteRequestBody, options?: CommonResponseActionMethodOptions diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts index c3adf944bc02..b31e70b37e56 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.test.ts @@ -51,6 +51,7 @@ import type { SentinelOneGetRemoteScriptStatusApiResponse, SentinelOneRemoteScriptExecutionStatus, } from '@kbn/stack-connectors-plugin/common/sentinelone/types'; +import { ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT } from '../../../../../lib/telemetry/event_based/events'; jest.mock('../../action_details_by_id', () => { const originalMod = jest.requireActual('../../action_details_by_id'); @@ -803,7 +804,7 @@ describe('SentinelOneActionsClient class', () => { }); }); - it('should create response at error if request has no parentTaskId', async () => { + it('should create response as error if request has no parentTaskId', async () => { // @ts-expect-error actionRequestsSearchResponse.hits.hits[0]!._source!.meta!.parentTaskId = ''; await s1ActionsClient.processPendingActions(processPendingActionsOptions); @@ -904,6 +905,278 @@ describe('SentinelOneActionsClient class', () => { expect(processPendingActionsOptions.addToQueue).not.toHaveBeenCalled(); }); }); + + describe('Telemetry', () => { + beforeEach(() => { + // @ts-expect-error + classConstructorOptions.endpointService.experimentalFeatures.responseActionsTelemetryEnabled = + true; + }); + describe('for Isolate and Release', () => { + let s1ActivityHits: Array>; + + beforeEach(() => { + const s1DataGenerator = new SentinelOneDataGenerator('seed'); + const actionRequestsSearchResponse = s1DataGenerator.toEsSearchResponse([ + s1DataGenerator.generateActionEsHit({ + agent: { id: 'agent-uuid-1' }, + EndpointActions: { data: { command: 'isolate' } }, + meta: { + agentId: 's1-agent-a', + agentUUID: 'agent-uuid-1', + hostName: 's1-host-name', + }, + }), + ]); + const actionResponsesSearchResponse = s1DataGenerator.toEsSearchResponse< + LogsEndpointActionResponse | EndpointActionResponse + >([]); + const s1ActivitySearchResponse = s1DataGenerator.generateActivityEsSearchResponse([ + s1DataGenerator.generateActivityEsSearchHit({ + sentinel_one: { + activity: { + agent: { + id: 's1-agent-a', + }, + type: 1001, + }, + }, + }), + ]); + + s1ActivityHits = s1ActivitySearchResponse.hits.hits; + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: ENDPOINT_ACTIONS_INDEX, + response: actionRequestsSearchResponse, + pitUsage: true, + }); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: ENDPOINT_ACTION_RESPONSES_INDEX_PATTERN, + response: actionResponsesSearchResponse, + }); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: SENTINEL_ONE_ACTIVITY_INDEX_PATTERN, + response: s1ActivitySearchResponse, + }); + }); + + it('should send action response telemetry for completed/failed action', async () => { + s1ActivityHits[0]._source!.sentinel_one.activity.type = 2010; + s1ActivityHits[0]._source!.sentinel_one.activity.description.primary = + 'Agent SOME_HOST_NAME was unable to disconnect from network.'; + await s1ActionsClient.processPendingActions(processPendingActionsOptions); + + expect( + classConstructorOptions.endpointService.getTelemetryService().reportEvent + ).toHaveBeenCalledWith(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: expect.any(String), + actionStatus: 'failed', + agentType: 'sentinel_one', + command: 'isolate', + }, + }); + }); + + it('should send action response telemetry for completed/successful action', async () => { + await s1ActionsClient.processPendingActions(processPendingActionsOptions); + + expect( + classConstructorOptions.endpointService.getTelemetryService().reportEvent + ).toHaveBeenCalledWith(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: expect.any(String), + actionStatus: 'successful', + agentType: 'sentinel_one', + command: 'isolate', + }, + }); + }); + }); + + describe('for get-file response action', () => { + let actionRequestsSearchResponse: SearchResponse< + LogsEndpointAction + >; + + beforeEach(() => { + const s1DataGenerator = new SentinelOneDataGenerator('seed'); + actionRequestsSearchResponse = s1DataGenerator.toEsSearchResponse([ + s1DataGenerator.generateActionEsHit< + ResponseActionGetFileParameters, + ResponseActionGetFileOutputContent, + SentinelOneGetFileRequestMeta + >({ + agent: { id: 'agent-uuid-1' }, + EndpointActions: { data: { command: 'get-file' } }, + meta: { + agentId: 's1-agent-a', + agentUUID: 'agent-uuid-1', + hostName: 's1-host-name', + commandBatchUuid: 'batch-111', + activityId: 'activity-222', + }, + }), + ]); + const actionResponsesSearchResponse = s1DataGenerator.toEsSearchResponse< + LogsEndpointActionResponse | EndpointActionResponse + >([]); + const s1ActivitySearchResponse = s1DataGenerator.generateActivityEsSearchResponse([ + s1DataGenerator.generateActivityEsSearchHit({ + sentinel_one: { + activity: { + id: 'activity-222', + data: s1DataGenerator.generateActivityFetchFileResponseData({ + flattened: { + commandBatchUuid: 'batch-111', + }, + }), + agent: { + id: 's1-agent-a', + }, + type: 80, + }, + }, + }), + ]); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: ENDPOINT_ACTIONS_INDEX, + response: actionRequestsSearchResponse, + pitUsage: true, + }); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: ENDPOINT_ACTION_RESPONSES_INDEX_PATTERN, + response: actionResponsesSearchResponse, + }); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: SENTINEL_ONE_ACTIVITY_INDEX_PATTERN, + response: s1ActivitySearchResponse, + }); + }); + + it('should send action response telemetry for completed/failed action', async () => { + actionRequestsSearchResponse.hits.hits[0]!._source!.meta = { + agentId: 's1-agent-a', + agentUUID: 'agent-uuid-1', + hostName: 's1-host-name', + }; + await s1ActionsClient.processPendingActions(processPendingActionsOptions); + + expect( + classConstructorOptions.endpointService.getTelemetryService().reportEvent + ).toHaveBeenCalledWith(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: expect.any(String), + actionStatus: 'failed', + agentType: 'sentinel_one', + command: 'get-file', + }, + }); + }); + + it('should send action response telemetry for completed/successful action', async () => { + await s1ActionsClient.processPendingActions(processPendingActionsOptions); + + expect( + classConstructorOptions.endpointService.getTelemetryService().reportEvent + ).toHaveBeenCalledWith(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: expect.any(String), + actionStatus: 'successful', + agentType: 'sentinel_one', + command: 'get-file', + }, + }); + }); + }); + + describe.each` + actionName | requestData + ${'kill-process'} | ${{ command: 'kill-process', parameters: { process_name: 'foo' } }} + ${'running-processes'} | ${{ command: 'running-processes', parameters: undefined }} + `('for $actionName response action', ({ actionName, requestData }) => { + let actionRequestsSearchResponse: SearchResponse; + + beforeEach(() => { + const s1DataGenerator = new SentinelOneDataGenerator('seed'); + + actionRequestsSearchResponse = s1DataGenerator.toEsSearchResponse([ + s1DataGenerator.generateActionEsHit({ + agent: { id: 'agent-uuid-1' }, + EndpointActions: { + data: requestData, + }, + meta: { + agentId: 's1-agent-a', + agentUUID: 'agent-uuid-1', + hostName: 's1-host-name', + parentTaskId: 's1-parent-task-123', + }, + }), + ]); + const actionResponsesSearchResponse = s1DataGenerator.toEsSearchResponse< + LogsEndpointActionResponse | EndpointActionResponse + >([]); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: ENDPOINT_ACTIONS_INDEX, + response: actionRequestsSearchResponse, + pitUsage: true, + }); + + applyEsClientSearchMock({ + esClientMock: classConstructorOptions.esClient, + index: ENDPOINT_ACTION_RESPONSES_INDEX_PATTERN, + response: actionResponsesSearchResponse, + }); + }); + + it('should send action response telemetry for completed/failed action', async () => { + // @ts-expect-error + actionRequestsSearchResponse.hits.hits[0]!._source!.meta!.parentTaskId = ''; + await s1ActionsClient.processPendingActions(processPendingActionsOptions); + + expect( + classConstructorOptions.endpointService.getTelemetryService().reportEvent + ).toHaveBeenCalledWith(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: expect.any(String), + actionStatus: 'failed', + agentType: 'sentinel_one', + command: actionName, + }, + }); + }); + + it('should send action response telemetry for completed/successful action', async () => { + await s1ActionsClient.processPendingActions(processPendingActionsOptions); + + expect( + classConstructorOptions.endpointService.getTelemetryService().reportEvent + ).toHaveBeenCalledWith(ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT.eventType, { + responseActions: { + actionId: expect.any(String), + actionStatus: 'successful', + agentType: 'sentinel_one', + command: actionName, + }, + }); + }); + }); + }); }); describe('#getFile()', () => { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts index ba017ea9db1c..b35fa0fa455e 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/actions/clients/sentinelone/sentinel_one_actions_client.ts @@ -824,7 +824,7 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { return actionDetails; } - public async runningProcesses( + async runningProcesses( actionRequest: GetProcessesRequestBody, options?: CommonResponseActionMethodOptions ): Promise> { @@ -908,6 +908,8 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { const addResponsesToQueueIfAny = (responseList: LogsEndpointActionResponse[]): void => { if (responseList.length > 0) { addToQueue(...responseList); + + this.sendActionResponseTelemetry(responseList); } }; @@ -950,8 +952,6 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { ); break; - // FIXME:PT refactor kill-process entry here when that PR is merged - case 'get-file': addResponsesToQueueIfAny( await this.checkPendingGetFileActions( @@ -967,8 +967,8 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { break; case 'kill-process': - { - const responseDocsForKillProcess = await this.checkPendingKillProcessActions( + addResponsesToQueueIfAny( + await this.checkPendingKillProcessActions( typePendingActions as Array< ResponseActionsClientPendingAction< ResponseActionParametersWithProcessName, @@ -976,11 +976,8 @@ export class SentinelOneActionsClient extends ResponseActionsClientImpl { SentinelOneKillProcessRequestMeta > > - ); - if (responseDocsForKillProcess.length) { - addToQueue(...responseDocsForKillProcess); - } - } + ) + ); break; } } diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts b/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts index e367f012ad0b..b8a2df85f10a 100644 --- a/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts +++ b/x-pack/plugins/security_solution/server/lib/telemetry/event_based/events.ts @@ -5,6 +5,11 @@ * 2.0. */ import type { EventTypeOpts } from '@kbn/core/server'; +import type { + ResponseActionAgentType, + ResponseActionStatus, + ResponseActionsApiCommandNames, +} from '../../../../common/endpoint/service/response_actions/constants'; import type { BulkUpsertAssetCriticalityRecordsResponse } from '../../../../common/api/entity_analytics'; export const RISK_SCORE_EXECUTION_SUCCESS_EVENT: EventTypeOpts<{ @@ -250,10 +255,139 @@ const getUploadStatus = (stats?: BulkUpsertAssetCriticalityRecordsResponse['stat return 'fail'; }; +export const ENDPOINT_RESPONSE_ACTION_SENT_ERROR_EVENT: EventTypeOpts<{ + responseActions: { + agentType: ResponseActionAgentType; + command: ResponseActionsApiCommandNames; + error: string; + }; +}> = { + eventType: 'endpoint_response_action_sent_error', + schema: { + responseActions: { + properties: { + agentType: { + type: 'keyword', + _meta: { + description: 'The type of agent that the action was sent to', + optional: false, + }, + }, + command: { + type: 'keyword', + _meta: { + description: 'The command that was sent to the endpoint', + optional: false, + }, + }, + error: { + type: 'text', + _meta: { + description: 'The error message for the response action', + }, + }, + }, + }, + }, +}; + +export const ENDPOINT_RESPONSE_ACTION_SENT_EVENT: EventTypeOpts<{ + responseActions: { + actionId: string; + agentType: ResponseActionAgentType; + command: ResponseActionsApiCommandNames; + isAutomated: boolean; + }; +}> = { + eventType: 'endpoint_response_action_sent', + schema: { + responseActions: { + properties: { + actionId: { + type: 'keyword', + _meta: { + description: 'The ID of the action that was sent to the endpoint', + optional: false, + }, + }, + agentType: { + type: 'keyword', + _meta: { + description: 'The type of agent that the action was sent to', + optional: false, + }, + }, + command: { + type: 'keyword', + _meta: { + description: 'The command that was sent to the endpoint', + optional: false, + }, + }, + isAutomated: { + type: 'boolean', + _meta: { + description: 'Whether the action was auto-initiated by a pre-configured rule', + optional: false, + }, + }, + }, + }, + }, +}; + +export const ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT: EventTypeOpts<{ + responseActions: { + actionId: string; + agentType: ResponseActionAgentType; + actionStatus: ResponseActionStatus; + command: ResponseActionsApiCommandNames; + }; +}> = { + eventType: 'endpoint_response_action_status_change_event', + schema: { + responseActions: { + properties: { + actionId: { + type: 'keyword', + _meta: { + description: 'The ID of the action that was sent to the endpoint', + optional: false, + }, + }, + agentType: { + type: 'keyword', + _meta: { + description: 'The type of agent that the action was sent to', + optional: false, + }, + }, + actionStatus: { + type: 'keyword', + _meta: { + description: 'The status of the action', + optional: false, + }, + }, + command: { + type: 'keyword', + _meta: { + description: 'The command that was sent to the endpoint', + optional: false, + }, + }, + }, + }, + }, +}; + export const events = [ RISK_SCORE_EXECUTION_SUCCESS_EVENT, RISK_SCORE_EXECUTION_ERROR_EVENT, RISK_SCORE_EXECUTION_CANCELLATION_EVENT, ASSET_CRITICALITY_SYSTEM_PROCESSED_ASSIGNMENT_FILE_EVENT, ALERT_SUPPRESSION_EVENT, + ENDPOINT_RESPONSE_ACTION_SENT_EVENT, + ENDPOINT_RESPONSE_ACTION_SENT_ERROR_EVENT, + ENDPOINT_RESPONSE_ACTION_STATUS_CHANGE_EVENT, ]; diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index 0f442564d448..e189f1c71a78 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -238,6 +238,7 @@ export class Plugin implements ISecuritySolutionPlugin { securitySolutionRequestContextFactory: requestContextFactory, cloud: plugins.cloud, loggerFactory: this.pluginContext.logger, + telemetry: core.analytics, }); initUsageCollectors({ diff --git a/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx b/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx index 4c8617ff007b..757e882bf741 100644 --- a/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx +++ b/x-pack/plugins/spaces/public/management/create_space/create_space_page.test.tsx @@ -14,6 +14,7 @@ import { act } from 'react-dom/test-utils'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { notificationServiceMock, scopedHistoryMock } from '@kbn/core/public/mocks'; +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import { KibanaFeature } from '@kbn/features-plugin/public'; import { featuresPluginMock } from '@kbn/features-plugin/public/mocks'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; @@ -48,6 +49,15 @@ featuresStart.getFeatures.mockResolvedValue([ app: [], category: DEFAULT_APP_CATEGORIES.kibana, privileges: null, + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + }), + new KibanaFeature({ + id: 'feature-2', + name: 'feature 2', + app: [], + category: DEFAULT_APP_CATEGORIES.kibana, + privileges: null, + scope: [KibanaFeatureScope.Security], }), ]); @@ -641,6 +651,54 @@ describe('ManageSpacePage', () => { expect(spacesManager.updateSpace).toHaveBeenCalledTimes(1); }); + + it('shows only features with space scope', async () => { + const spacesManager = spacesManagerMock.create(); + spacesManager.getSpace = jest.fn().mockResolvedValue({ + id: 'my-space', + name: 'Existing Space', + description: 'hey an existing space', + color: '#aabbcc', + initials: 'AB', + disabledFeatures: [], + }); + spacesManager.getActiveSpace = jest.fn().mockResolvedValue(space); + + const wrapper = mountWithIntl( + + ); + + await waitFor(() => { + wrapper.update(); + expect(spacesManager.getSpace).toHaveBeenCalledWith('my-space'); + }); + + expect(wrapper.state('features')).toEqual([ + new KibanaFeature({ + id: 'feature-1', + name: 'feature 1', + app: [], + category: DEFAULT_APP_CATEGORIES.kibana, + privileges: null, + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + }), + ]); + }); }); function updateSpace( diff --git a/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx b/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx index e8204a53fe34..ed0e52edd6c4 100644 --- a/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx +++ b/x-pack/plugins/spaces/public/management/create_space/create_space_page.tsx @@ -22,6 +22,7 @@ import React, { Component } from 'react'; import type { Capabilities, NotificationsStart, ScopedHistory } from '@kbn/core/public'; import { SectionLoading } from '@kbn/es-ui-shared-plugin/public'; +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import type { FeaturesPluginStart, KibanaFeature } from '@kbn/features-plugin/public'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -91,6 +92,10 @@ export class CreateSpacePage extends Component { }; } + private filterSpaceFeatures = (features: KibanaFeature[]) => { + return features.filter((feature) => feature.scope?.includes(KibanaFeatureScope.Spaces)); + }; + public async componentDidMount() { if (!this.props.capabilities.spaces.manage) { return; @@ -103,7 +108,8 @@ export class CreateSpacePage extends Component { await this.loadSpace(spaceId, getFeatures()); } else { const features = await getFeatures(); - this.setState({ isLoading: false, features }); + + this.setState({ isLoading: false, features: this.filterSpaceFeatures(features) }); } } catch (e) { notifications.toasts.addError(e, { @@ -410,6 +416,7 @@ export class CreateSpacePage extends Component { spacesManager.getSpace(spaceId), featuresPromise, ]); + if (space) { if (onLoadSpace) { onLoadSpace(space); @@ -426,7 +433,7 @@ export class CreateSpacePage extends Component { !!space.initials && getSpaceInitials({ name: space.name }) !== space.initials, customAvatarColor: !!space.color && getSpaceColor({ name: space.name }) !== space.color, }, - features, + features: this.filterSpaceFeatures(features), originalSpace: space, isLoading: false, }); diff --git a/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.test.ts b/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.test.ts index 7a0d9f0b11ce..4b9af1f77270 100644 --- a/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.test.ts +++ b/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import { savedObjectsRepositoryMock, loggingSystemMock } from '@kbn/core/server/mocks'; -import { KibanaDiscoveryService } from './kibana_discovery_service'; +import { DEFAULT_TIMEOUT, KibanaDiscoveryService } from './kibana_discovery_service'; import { BACKGROUND_TASK_NODE_SO_NAME } from '../saved_objects'; import { SavedObjectsBulkDeleteResponse, SavedObjectsUpdateResponse } from '@kbn/core/server'; @@ -26,6 +26,7 @@ describe('KibanaDiscoveryService', () => { beforeEach(() => { jest.useFakeTimers(); jest.spyOn(global, 'setTimeout'); + jest.spyOn(global, 'clearTimeout'); jest.setSystemTime(new Date(now)); }); @@ -110,6 +111,23 @@ describe('KibanaDiscoveryService', () => { expect(savedObjectsRepository.update).toHaveBeenCalledTimes(2); }); + it('timeout should not be less than two seconds', async () => { + savedObjectsRepository.find.mockResolvedValueOnce(createFindResponse([])); + const kibanaDiscoveryService = new KibanaDiscoveryService({ + savedObjectsRepository, + logger, + currentNode, + config: { + active_nodes_lookback: DEFAULT_ACTIVE_NODES_LOOK_BACK_DURATION, + interval: 500, + }, + }); + await kibanaDiscoveryService.start(); + + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenNthCalledWith(1, expect.any(Function), DEFAULT_TIMEOUT); + }); + it('reschedules when upsert fails on start', async () => { savedObjectsRepository.update.mockRejectedValueOnce(new Error('foo')); @@ -180,6 +198,47 @@ describe('KibanaDiscoveryService', () => { "Kibana Discovery Service couldn't update this node's last_seen timestamp. id: current-node-id, last_seen: 2024-08-10T10:00:10.000Z, error:foo" ); }); + + it('does not schedule when Kibana is shutting down', async () => { + savedObjectsRepository.update.mockResolvedValueOnce( + {} as SavedObjectsUpdateResponse + ); + + const kibanaDiscoveryService = new KibanaDiscoveryService({ + savedObjectsRepository, + logger, + currentNode, + config: { + active_nodes_lookback: DEFAULT_ACTIVE_NODES_LOOK_BACK_DURATION, + interval: DEFAULT_DISCOVERY_INTERVAL_MS, + }, + }); + await kibanaDiscoveryService.start(); + + expect(savedObjectsRepository.update).toHaveBeenCalledTimes(1); + expect(logger.error).not.toHaveBeenCalled(); + expect(logger.info).toHaveBeenCalledWith('Kibana Discovery Service has been started'); + expect(kibanaDiscoveryService.isStarted()).toBe(true); + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenNthCalledWith( + 1, + expect.any(Function), + DEFAULT_DISCOVERY_INTERVAL_MS + ); + + kibanaDiscoveryService.stop(); + + await jest.advanceTimersByTimeAsync(15000); + + expect(savedObjectsRepository.update).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenNthCalledWith( + 1, + expect.any(Function), + DEFAULT_DISCOVERY_INTERVAL_MS + ); + expect(clearTimeout).toHaveBeenCalledTimes(1); + }); }); describe('getActiveKibanaNodes', () => { diff --git a/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.ts b/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.ts index c532cb755f7d..9318a09e3fba 100644 --- a/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.ts +++ b/x-pack/plugins/task_manager/server/kibana_discovery_service/kibana_discovery_service.ts @@ -23,6 +23,8 @@ interface DiscoveryServiceUpsertParams { lastSeen: string; } +export const DEFAULT_TIMEOUT = 2000; + export class KibanaDiscoveryService { private readonly activeNodesLookBack: string; private readonly discoveryInterval: number; @@ -30,6 +32,8 @@ export class KibanaDiscoveryService { private started = false; private savedObjectsRepository: ISavedObjectsRepository; private logger: Logger; + private stopped = false; + private timer: NodeJS.Timeout | undefined; constructor({ config, currentNode, savedObjectsRepository, logger }: DiscoveryServiceParams) { this.activeNodesLookBack = config.active_nodes_lookback; @@ -52,29 +56,32 @@ export class KibanaDiscoveryService { } private async scheduleUpsertCurrentNode() { - const lastSeenDate = new Date(); - const lastSeen = lastSeenDate.toISOString(); - try { - await this.upsertCurrentNode({ id: this.currentNode, lastSeen }); - if (!this.started) { - this.logger.info('Kibana Discovery Service has been started'); - this.started = true; - } - } catch (e) { - if (!this.started) { - this.logger.error( - `Kibana Discovery Service couldn't be started and will be retried in ${this.discoveryInterval}ms, error:${e.message}` - ); - } else { - this.logger.error( - `Kibana Discovery Service couldn't update this node's last_seen timestamp. id: ${this.currentNode}, last_seen: ${lastSeen}, error:${e.message}` + if (!this.stopped) { + const lastSeenDate = new Date(); + const lastSeen = lastSeenDate.toISOString(); + try { + await this.upsertCurrentNode({ id: this.currentNode, lastSeen }); + if (!this.started) { + this.logger.info('Kibana Discovery Service has been started'); + this.started = true; + } + } catch (e) { + if (!this.started) { + this.logger.error( + `Kibana Discovery Service couldn't be started and will be retried in ${this.discoveryInterval}ms, error:${e.message}` + ); + } else { + this.logger.error( + `Kibana Discovery Service couldn't update this node's last_seen timestamp. id: ${this.currentNode}, last_seen: ${lastSeen}, error:${e.message}` + ); + } + } finally { + this.timer = setTimeout( + async () => await this.scheduleUpsertCurrentNode(), + // The timeout should not be less than the default timeout of two seconds + Math.max(this.discoveryInterval - (Date.now() - lastSeenDate.getTime()), DEFAULT_TIMEOUT) ); } - } finally { - setTimeout( - async () => await this.scheduleUpsertCurrentNode(), - this.discoveryInterval - (Date.now() - lastSeenDate.getTime()) - ); } } @@ -106,4 +113,11 @@ export class KibanaDiscoveryService { await this.savedObjectsRepository.delete(BACKGROUND_TASK_NODE_SO_NAME, this.currentNode); this.logger.info('Removed this node from the Kibana Discovery Service'); } + + public stop() { + this.stopped = true; + if (this.timer) { + clearTimeout(this.timer); + } + } } diff --git a/x-pack/plugins/task_manager/server/plugin.ts b/x-pack/plugins/task_manager/server/plugin.ts index 1d2ab4a84580..d7c3cd7e941f 100644 --- a/x-pack/plugins/task_manager/server/plugin.ts +++ b/x-pack/plugins/task_manager/server/plugin.ts @@ -404,6 +404,7 @@ export class TaskManagerPlugin public async stop() { if (this.kibanaDiscoveryService?.isStarted()) { + this.kibanaDiscoveryService.stop(); try { await this.kibanaDiscoveryService.deleteCurrentNode(); } catch (e) { 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 ebc026d88d61..0de2cbd77db7 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -10084,6 +10084,148 @@ } } }, + "logs_data": { + "properties": { + "data": { + "type": "array", + "items": { + "properties": { + "pattern_name": { + "type": "keyword", + "_meta": { + "description": "Logs pattern name representing the stream of logs" + } + }, + "shipper": { + "type": "keyword", + "_meta": { + "description": "Shipper if present, sending the logs" + } + }, + "doc_count": { + "type": "long", + "_meta": { + "description": "Total number of documents in the steam of logs" + } + }, + "structure_level": { + "properties": { + "0": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 0" + } + }, + "1": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 1" + } + }, + "2": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 2" + } + }, + "3": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 3" + } + }, + "4": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 4" + } + }, + "5": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 5" + } + }, + "6": { + "type": "long", + "_meta": { + "description": "Total docs at structure level 6" + } + } + } + }, + "failure_store_doc_count": { + "type": "long", + "_meta": { + "description": "Total number of documents in the failure store in the stream of logs" + } + }, + "index_count": { + "type": "long", + "_meta": { + "description": "Total number of indices in the stream of logs" + } + }, + "namespace_count": { + "type": "long", + "_meta": { + "description": "Total number of namespaces in the stream of logs" + } + }, + "field_count": { + "type": "long", + "_meta": { + "description": "Total number of fields in mappings of indices of the stream of logs" + } + }, + "field_existence": { + "properties": { + "DYNAMIC_KEY": { + "type": "long", + "_meta": { + "description": "Count of documents having the field represented by the key" + } + } + } + }, + "size_in_bytes": { + "type": "long", + "_meta": { + "description": "Total size in bytes of the stream of logs" + } + }, + "managed_by": { + "type": "array", + "items": { + "type": "keyword", + "_meta": { + "description": "Value captured in _meta.managed_by" + } + } + }, + "package_name": { + "type": "array", + "items": { + "type": "keyword", + "_meta": { + "description": "Value captured in _meta.package.name" + } + } + }, + "beat": { + "type": "array", + "items": { + "type": "keyword", + "_meta": { + "description": "Value captured in _meta.beat.name" + } + } + } + } + } + } + } + }, "maps": { "properties": { "mapsTotalCount": { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 3f9ce7027343..eb427185d3fe 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -45554,8 +45554,6 @@ "xpack.triggersActionsUI.bulkActions.selectRowCheckbox.AriaLabel": "Sélectionner la ligne {displayedRowIndex}", "xpack.triggersActionsUI.cases.api.bulkGet": "Erreur lors de la récupération des données sur les cas", "xpack.triggersActionsUI.cases.label": "Cas", - "xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByConfigMessage": "Ce connecteur est désactivé par la configuration de Kibana.", - "xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByLicenseMessage": "Ce connecteur requiert une licence {minimumLicenseRequired}.", "xpack.triggersActionsUI.checkRuleTypeEnabled.ruleTypeDisabledByLicenseMessage": "Ce type de règle requiert une licence {minimumLicenseRequired}.", "xpack.triggersActionsUI.common.constants.comparators.groupByTypes.allDocumentsLabel": "tous les documents", "xpack.triggersActionsUI.common.constants.comparators.groupByTypes.topLabel": "premiers", @@ -45685,10 +45683,6 @@ "xpack.triggersActionsUI.inspect.modal.somethingWentWrongDescription": "Désolé, un problème est survenu.", "xpack.triggersActionsUI.inspectDescription": "Inspecter", "xpack.triggersActionsUI.jsonFieldWrapper.defaultLabel": "Éditeur JSON", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByConfigMessageTitle": "Cette fonctionnalité est désactivée par la configuration de Kibana.", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseLinkTitle": "Afficher les options de licence", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseMessageDescription": "Pour réactiver cette action, veuillez mettre à niveau votre licence.", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseMessageTitle": "Cette fonctionnalité requiert une licence {minimumLicenseRequired}.", "xpack.triggersActionsUI.logs.breadcrumbTitle": "Logs", "xpack.triggersActionsUI.maintenanceWindows.label": "Fenêtres de maintenance", "xpack.triggersActionsUI.managementSection.alerts.displayDescription": "Monitorer toutes vos alertes au même endroit", @@ -45832,8 +45826,6 @@ "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadConnectorTypesMessage": "Impossible de charger les types de connecteurs", "xpack.triggersActionsUI.sections.actionsConnectorsList.warningText": "{connectors, plural, one {Ce connecteur est} other {Certains connecteurs sont}} actuellement en cours d'utilisation.", "xpack.triggersActionsUI.sections.actionTypeForm.accordion.deleteIconAriaLabel": "Supprimer", - "xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryPlaceholder": "Filtrer les alertes à l'aide de la syntaxe KQL", - "xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryToggleLabel": "Si l'alerte correspond à une requête", "xpack.triggersActionsUI.sections.actionTypeForm.actionDisabledTitle": "Cette action est désactivée", "xpack.triggersActionsUI.sections.actionTypeForm.actionErrorToolTip": "L’action contient des erreurs.", "xpack.triggersActionsUI.sections.actionTypeForm.actionIdLabel": "Connecteur {connectorInstance}", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 455de83d0e16..91fb104c16df 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -45296,8 +45296,6 @@ "xpack.triggersActionsUI.bulkActions.selectRowCheckbox.AriaLabel": "行\"{displayedRowIndex}\"を選択", "xpack.triggersActionsUI.cases.api.bulkGet": "ケースデータの取得エラー", "xpack.triggersActionsUI.cases.label": "ケース", - "xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByConfigMessage": "このコネクターは Kibana の構成で無効になっています。", - "xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByLicenseMessage": "このコネクターには {minimumLicenseRequired} ライセンスが必要です。", "xpack.triggersActionsUI.checkRuleTypeEnabled.ruleTypeDisabledByLicenseMessage": "このルールタイプには{minimumLicenseRequired}ライセンスが必要です。", "xpack.triggersActionsUI.common.constants.comparators.groupByTypes.allDocumentsLabel": "すべてのドキュメント", "xpack.triggersActionsUI.common.constants.comparators.groupByTypes.topLabel": "トップ", @@ -45426,10 +45424,6 @@ "xpack.triggersActionsUI.inspect.modal.somethingWentWrongDescription": "申し訳ございませんが、何か問題が発生しました。", "xpack.triggersActionsUI.inspectDescription": "検査", "xpack.triggersActionsUI.jsonFieldWrapper.defaultLabel": "JSONエディター", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByConfigMessageTitle": "この機能は Kibana の構成で無効になっています。", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseLinkTitle": "ライセンスオプションを表示", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseMessageDescription": "このアクションを再び有効にするには、ライセンスをアップグレードしてください。", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseMessageTitle": "この機能には {minimumLicenseRequired} ライセンスが必要です。", "xpack.triggersActionsUI.logs.breadcrumbTitle": "ログ", "xpack.triggersActionsUI.maintenanceWindows.label": "保守時間枠", "xpack.triggersActionsUI.managementSection.alerts.displayDescription": "すべてのアラートを1か所で監視", @@ -45573,8 +45567,6 @@ "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadConnectorTypesMessage": "コネクタータイプを読み込めません", "xpack.triggersActionsUI.sections.actionsConnectorsList.warningText": "{connectors, plural, one {このコネクターは} other {一部のコネクターが}}現在使用中です。", "xpack.triggersActionsUI.sections.actionTypeForm.accordion.deleteIconAriaLabel": "削除", - "xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryPlaceholder": "KQL構文を使用してアラートをフィルター", - "xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryToggleLabel": "アラートがクエリと一致する場合", "xpack.triggersActionsUI.sections.actionTypeForm.actionDisabledTitle": "このアクションは無効です", "xpack.triggersActionsUI.sections.actionTypeForm.actionErrorToolTip": "アクションにはエラーがあります。", "xpack.triggersActionsUI.sections.actionTypeForm.actionIdLabel": "{connectorInstance}コネクター", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 44599632f8bb..7615268da55d 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -45349,8 +45349,6 @@ "xpack.triggersActionsUI.bulkActions.selectRowCheckbox.AriaLabel": "选择行 {displayedRowIndex}", "xpack.triggersActionsUI.cases.api.bulkGet": "提取案例数据时出错", "xpack.triggersActionsUI.cases.label": "案例", - "xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByConfigMessage": "连接器已由 Kibana 配置禁用。", - "xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByLicenseMessage": "此连接器需要{minimumLicenseRequired}许可证。", "xpack.triggersActionsUI.checkRuleTypeEnabled.ruleTypeDisabledByLicenseMessage": "此规则类型需要{minimumLicenseRequired}许可证。", "xpack.triggersActionsUI.common.constants.comparators.groupByTypes.allDocumentsLabel": "所有文档", "xpack.triggersActionsUI.common.constants.comparators.groupByTypes.topLabel": "排名前", @@ -45479,10 +45477,6 @@ "xpack.triggersActionsUI.inspect.modal.somethingWentWrongDescription": "抱歉,出现问题。", "xpack.triggersActionsUI.inspectDescription": "检查", "xpack.triggersActionsUI.jsonFieldWrapper.defaultLabel": "JSON 编辑器", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByConfigMessageTitle": "此功能已由 Kibana 配置禁用。", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseLinkTitle": "查看许可证选项", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseMessageDescription": "要重新启用此操作,请升级您的许可证。", - "xpack.triggersActionsUI.licenseCheck.actionTypeDisabledByLicenseMessageTitle": "此功能需要{minimumLicenseRequired}许可证。", "xpack.triggersActionsUI.logs.breadcrumbTitle": "日志", "xpack.triggersActionsUI.maintenanceWindows.label": "维护窗口", "xpack.triggersActionsUI.managementSection.alerts.displayDescription": "在一个位置监测您的所有告警", @@ -45626,8 +45620,6 @@ "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadConnectorTypesMessage": "无法加载连接器类型", "xpack.triggersActionsUI.sections.actionsConnectorsList.warningText": "{connectors, plural, one {此连接器} other {这些连接器}}当前正在使用中。", "xpack.triggersActionsUI.sections.actionTypeForm.accordion.deleteIconAriaLabel": "删除", - "xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryPlaceholder": "使用 KQL 语法筛选告警", - "xpack.triggersActionsUI.sections.actionTypeForm.ActionAlertsFilterQueryToggleLabel": "如果告警与查询匹配", "xpack.triggersActionsUI.sections.actionTypeForm.actionDisabledTitle": "此操作已禁用", "xpack.triggersActionsUI.sections.actionTypeForm.actionErrorToolTip": "操作包含错误。", "xpack.triggersActionsUI.sections.actionTypeForm.actionIdLabel": "{connectorInstance} 连接器", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.tsx b/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.tsx deleted file mode 100644 index fa85719ed11a..000000000000 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/check_action_type_enabled.tsx +++ /dev/null @@ -1,121 +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 { upperFirst } from 'lodash'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { EuiCard, EuiLink } from '@elastic/eui'; -import { ActionType, ActionConnector } from '../../types'; -import { VIEW_LICENSE_OPTIONS_LINK } from '../../common/constants'; -import './check_action_type_enabled.scss'; - -export interface IsEnabledResult { - isEnabled: true; -} -export interface IsDisabledResult { - isEnabled: false; - message: string; - messageCard: JSX.Element; -} - -const getLicenseCheckResult = (actionType: ActionType) => { - return { - isEnabled: false, - message: i18n.translate( - 'xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByLicenseMessage', - { - defaultMessage: 'This connector requires a {minimumLicenseRequired} license.', - values: { - minimumLicenseRequired: upperFirst(actionType.minimumLicenseRequired), - }, - } - ), - messageCard: ( - - - - } - /> - ), - }; -}; - -const configurationCheckResult = { - isEnabled: false, - message: i18n.translate( - 'xpack.triggersActionsUI.checkActionTypeEnabled.actionTypeDisabledByConfigMessage', - { defaultMessage: 'This connector is disabled by the Kibana configuration.' } - ), - messageCard: ( - - ), -}; - -export function checkActionTypeEnabled( - actionType?: ActionType -): IsEnabledResult | IsDisabledResult { - if (actionType?.enabledInLicense === false) { - return getLicenseCheckResult(actionType); - } - - if (actionType?.enabledInConfig === false) { - return configurationCheckResult; - } - - return { isEnabled: true }; -} - -export function checkActionFormActionTypeEnabled( - actionType: ActionType, - preconfiguredConnectors: ActionConnector[] -): IsEnabledResult | IsDisabledResult { - if (actionType?.enabledInLicense === false) { - return getLicenseCheckResult(actionType); - } - - if ( - actionType?.enabledInConfig === false && - // do not disable action type if it contains preconfigured connectors (is preconfigured) - !preconfiguredConnectors.find( - (preconfiguredConnector) => preconfiguredConnector.actionTypeId === actionType.id - ) - ) { - return configurationCheckResult; - } - - return { isEnabled: true }; -} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 2c3feb19561f..940583ea5bce 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -29,6 +29,7 @@ import { } from '@kbn/alerting-plugin/common'; import { v4 as uuidv4 } from 'uuid'; import { ActionGroupWithMessageVariables } from '@kbn/triggers-actions-ui-types'; +import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; import { loadActionTypes, loadAllActions as loadConnectors } from '../../lib/action_connector_api'; import { @@ -45,7 +46,6 @@ import { SectionLoading } from '../../components/section_loading'; import { ActionTypeForm } from './action_type_form'; import { AddConnectorInline } from './connector_add_inline'; import { actionTypeCompare } from '../../lib/action_type_compare'; -import { checkActionFormActionTypeEnabled } from '../../lib/check_action_type_enabled'; import { DEFAULT_FREQUENCY, VIEW_LICENSE_OPTIONS_LINK } from '../../../common/constants'; import { useKibana } from '../../../common/lib/kibana'; import { ConnectorAddModal } from '.'; @@ -552,7 +552,6 @@ export const ActionForm = ({ hasAlertsMappings={hasAlertsMappings} minimumThrottleInterval={minimumThrottleInterval} notifyWhenSelectOptions={notifyWhenSelectOptions} - defaultNotifyWhenValue={defaultRuleFrequency.notifyWhen} featureId={featureId} producerId={producerId} ruleTypeId={ruleTypeId} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx index de4463721d3d..116b416ac98f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.test.tsx @@ -21,11 +21,7 @@ import { EuiFieldText } from '@elastic/eui'; import { I18nProvider, __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { render, waitFor, screen } from '@testing-library/react'; import { DEFAULT_FREQUENCY } from '../../../common/constants'; -import { - RuleNotifyWhen, - RuleNotifyWhenType, - SanitizedRuleAction, -} from '@kbn/alerting-plugin/common'; +import { RuleNotifyWhen, SanitizedRuleAction } from '@kbn/alerting-plugin/common'; import { AlertConsumers } from '@kbn/rule-data-utils'; import { transformActionVariables } from '@kbn/alerts-ui-shared/src/action_variables/transforms'; @@ -557,7 +553,6 @@ describe('action_type_form', () => { index: 1, actionItem, notifyWhenSelectOptions: CUSTOM_NOTIFY_WHEN_OPTIONS, - defaultNotifyWhenValue: RuleNotifyWhen.ACTIVE, })} ); @@ -611,7 +606,6 @@ describe('action_type_form', () => { index: 1, actionItem, notifyWhenSelectOptions: CUSTOM_NOTIFY_WHEN_OPTIONS, - defaultNotifyWhenValue: RuleNotifyWhen.ACTIVE, })} ); @@ -650,7 +644,6 @@ function getActionTypeForm({ messageVariables = { context: [], state: [], params: [] }, summaryMessageVariables = { context: [], state: [], params: [] }, notifyWhenSelectOptions, - defaultNotifyWhenValue, ruleTypeId, producerId = AlertConsumers.INFRASTRUCTURE, featureId = AlertConsumers.INFRASTRUCTURE, @@ -671,7 +664,6 @@ function getActionTypeForm({ messageVariables?: ActionVariables; summaryMessageVariables?: ActionVariables; notifyWhenSelectOptions?: NotifyWhenSelectOptions[]; - defaultNotifyWhenValue?: RuleNotifyWhenType; ruleTypeId?: string; producerId?: string; featureId?: string; @@ -766,7 +758,6 @@ function getActionTypeForm({ messageVariables={messageVariables} summaryMessageVariables={summaryMessageVariables} notifyWhenSelectOptions={notifyWhenSelectOptions} - defaultNotifyWhenValue={defaultNotifyWhenValue} producerId={producerId} featureId={featureId} ruleTypeId={ruleTypeId} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx index 1a55e2990fbf..9176d9d54ef3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx @@ -35,8 +35,8 @@ import { isEmpty, partition, some } from 'lodash'; import { ActionVariable, RuleActionAlertsFilterProperty, + RuleActionFrequency, RuleActionParam, - RuleNotifyWhenType, } from '@kbn/alerting-plugin/common'; import { getDurationNumberInItsUnit, @@ -46,6 +46,8 @@ import { import type { SavedObjectAttribute } from '@kbn/core-saved-objects-api-server'; import { transformActionVariables } from '@kbn/alerts-ui-shared/src/action_variables/transforms'; import { RuleActionsNotifyWhen } from '@kbn/alerts-ui-shared/src/rule_form/rule_actions/rule_actions_notify_when'; +import { RuleActionsAlertsFilter } from '@kbn/alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter'; +import { checkActionFormActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; import { RuleActionsAlertsFilterTimeframe } from '@kbn/alerts-ui-shared/src/rule_form/rule_actions/rule_actions_alerts_filter_timeframe'; import { ActionGroupWithMessageVariables } from '@kbn/triggers-actions-ui-types'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; @@ -60,13 +62,11 @@ import { ActionConnectorMode, NotifyWhenSelectOptions, } from '../../../types'; -import { checkActionFormActionTypeEnabled } from '../../lib/check_action_type_enabled'; import { hasSaveActionsCapability } from '../../lib/capabilities'; import { ActionAccordionFormProps } from './action_form'; import { useKibana } from '../../../common/lib/kibana'; import { ConnectorsSelection } from './connectors_selection'; import { validateParamsForWarnings } from '../../lib/validate_params_for_warnings'; -import { ActionAlertsFilterQuery } from './action_alerts_filter_query'; import { validateActionFilterQuery } from '../../lib/value_validators'; import { useRuleTypeAadTemplateFields } from '../../hooks/use_rule_aad_template_fields'; @@ -94,7 +94,6 @@ export type ActionTypeFormProps = { hasAlertsMappings?: boolean; minimumThrottleInterval?: [number | undefined, string]; notifyWhenSelectOptions?: NotifyWhenSelectOptions[]; - defaultNotifyWhenValue?: RuleNotifyWhenType; featureId: string; producerId: string; ruleTypeId?: string; @@ -146,7 +145,6 @@ export const ActionTypeForm = ({ hasAlertsMappings, minimumThrottleInterval, notifyWhenSelectOptions, - defaultNotifyWhenValue, producerId, featureId, ruleTypeId, @@ -157,6 +155,9 @@ export const ActionTypeForm = ({ application: { capabilities }, settings, http, + notifications, + unifiedSearch, + dataViews, } = useKibana().services; const { euiTheme } = useEuiTheme(); const [isOpen, setIsOpen] = useState(true); @@ -369,44 +370,32 @@ export const ActionTypeForm = ({ ? isActionGroupDisabledForActionType(actionGroupId, actionTypeId) : false; + const onActionFrequencyChange = (frequency: RuleActionFrequency | undefined) => { + const { notifyWhen, throttle, summary } = frequency || {}; + + setActionFrequencyProperty('notifyWhen', notifyWhen, index); + + if (throttle) { + setActionThrottle(getDurationNumberInItsUnit(throttle)); + setActionThrottleUnit(getDurationUnitValue(throttle)); + } + + setActionFrequencyProperty('throttle', throttle ? throttle : null, index); + + setActionFrequencyProperty('summary', summary, index); + }; + const actionNotifyWhen = ( { - setActionFrequencyProperty('notifyWhen', notifyWhen, index); - }, - [setActionFrequencyProperty, index] - )} - onThrottleChange={useCallback( - (throttle: number | null, throttleUnit: string) => { - if (throttle) { - setActionThrottle(throttle); - setActionThrottleUnit(throttleUnit); - } - setActionFrequencyProperty( - 'throttle', - throttle ? `${throttle}${throttleUnit}` : null, - index - ); - }, - [setActionFrequencyProperty, index] - )} - onSummaryChange={useCallback( - (summary: boolean) => { - // use the default message when a user toggles between action frequencies - setUseDefaultMessage(true); - setActionFrequencyProperty('summary', summary, index); - }, - [setActionFrequencyProperty, index] - )} + onChange={onActionFrequencyChange} showMinimumThrottleWarning={showMinimumThrottleWarning} showMinimumThrottleUnitWarning={showMinimumThrottleUnitWarning} notifyWhenSelectOptions={notifyWhenSelectOptions} - defaultNotifyWhenValue={defaultNotifyWhenValue} + onUseDefaultMessage={() => setUseDefaultMessage(true)} /> ); @@ -515,17 +504,23 @@ export const ActionTypeForm = ({ <> {!hideNotifyWhen && } - setActionAlertsFilterProperty('query', query, index)} featureIds={[producerId as ValidFeatureId]} appName={featureId!} ruleTypeId={ruleTypeId} + plugins={{ + http, + unifiedSearch, + dataViews, + notifications, + }} /> setActionAlertsFilterProperty('timeframe', timeframe, index)} /> diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx index cd5a4a81b4b2..c9cab9defaff 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_menu.tsx @@ -10,11 +10,11 @@ import { EuiFlexItem, EuiCard, EuiIcon, EuiFlexGrid, EuiSpacer } from '@elastic/ import { i18n } from '@kbn/i18n'; import { EuiToolTip } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { checkActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; import { TECH_PREVIEW_DESCRIPTION, TECH_PREVIEW_LABEL } from '../translations'; import { ActionType, ActionTypeIndex, ActionTypeRegistryContract } from '../../../types'; import { loadActionTypes } from '../../lib/action_connector_api'; import { actionTypeCompare } from '../../lib/action_type_compare'; -import { checkActionTypeEnabled } from '../../lib/check_action_type_enabled'; import { useKibana } from '../../../common/lib/kibana'; import { SectionLoading } from '../../components/section_loading'; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index cdfde543a3a6..e00b08d9c851 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -26,6 +26,7 @@ import { i18n } from '@kbn/i18n'; import { useHistory, useLocation, useParams } from 'react-router-dom'; import { getConnectorCompatibility } from '@kbn/actions-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; +import { checkActionTypeEnabled } from '@kbn/alerts-ui-shared/src/rule_form/utils/check_action_type_enabled'; import { loadActionTypes, deleteActions } from '../../../lib/action_connector_api'; import { hasDeleteActionsCapability, @@ -33,7 +34,6 @@ import { hasExecuteActionsCapability, } from '../../../lib/capabilities'; import { DeleteModalConfirmation } from '../../../components/delete_modal_confirmation'; -import { checkActionTypeEnabled } from '../../../lib/check_action_type_enabled'; import './actions_connectors_list.scss'; import { ActionConnector, diff --git a/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts b/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts index a2b54a0562f6..2d6548062eed 100644 --- a/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts +++ b/x-pack/plugins/triggers_actions_ui/public/common/constants/index.ts @@ -8,6 +8,7 @@ import { Comparator, COMPARATORS } from '@kbn/alerting-comparators'; import { i18n } from '@kbn/i18n'; +export { VIEW_LICENSE_OPTIONS_LINK } from '@kbn/alerts-ui-shared/src/common/constants'; export { AGGREGATION_TYPES, builtInAggregationTypes } from './aggregation_types'; export { loadAllActions, loadActionTypes } from '../../application/lib/action_connector_api'; export { ConnectorAddModal } from '../../application/sections/action_connector_form'; @@ -16,8 +17,6 @@ export type { ActionConnector } from '../..'; export { builtInGroupByTypes } from './group_by_types'; export * from './action_frequency_types'; -export const VIEW_LICENSE_OPTIONS_LINK = 'https://www.elastic.co/subscriptions'; - export const PLUGIN_ID = 'triggersActions'; export const ALERTS_PAGE_ID = 'triggersActionsAlerts'; export const CONNECTORS_PLUGIN_ID = 'triggersActionsConnectors'; diff --git a/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts b/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts index ffd37240303f..d155bfb614cb 100644 --- a/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts +++ b/x-pack/test/api_integration/apis/telemetry/telemetry_local.ts @@ -117,6 +117,13 @@ export default function ({ getService }: FtrProviderContext) { 'number' ); + // Logs data telemetry + const logsDataTelemetryData = + stats.stack_stats.kibana.plugins.usage_collector_stats.not_ready.names.includes('logs_data') + ? [] + : stats.stack_stats.kibana.plugins.logs_data?.data; + expect(logsDataTelemetryData).to.an('array'); + expect(stats.stack_stats.kibana.os.platforms[0].platform).to.be.a('string'); expect(stats.stack_stats.kibana.os.platforms[0].count).to.be(1); expect(stats.stack_stats.kibana.os.platformReleases[0].platformRelease).to.be.a('string'); diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 74f14c2c5f6a..95644a6d8db2 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -129,6 +129,7 @@ import { StopEntityEngineRequestParamsInput } from '@kbn/security-solution-plugi import { SuggestUserProfilesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/detection_engine/users/suggest_user_profiles_route.gen'; import { TriggerRiskScoreCalculationRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/risk_engine/entity_calculation_route.gen'; import { UpdateRuleRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.gen'; +import { routeWithNamespace } from '../../common/utils/security_solution'; import { FtrProviderContext } from '../ftr_provider_context'; export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) { @@ -145,17 +146,17 @@ the endpoint accomplishes this task by applying a deletion policy to the relevan after 30 days. It also deletes other artifacts specific to the migration implementation. */ - alertsMigrationCleanup(props: AlertsMigrationCleanupProps) { + alertsMigrationCleanup(props: AlertsMigrationCleanupProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/detection_engine/signals/migration') + .delete(routeWithNamespace('/api/detection_engine/signals/migration', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - assetCriticalityGetPrivileges() { + assetCriticalityGetPrivileges(kibanaSpace: string = 'default') { return supertest - .get('/internal/asset_criticality/privileges') + .get(routeWithNamespace('/internal/asset_criticality/privileges', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -163,9 +164,11 @@ after 30 days. It also deletes other artifacts specific to the migration impleme /** * Ensures that the packages needed for prebuilt detection rules to work are installed and up to date */ - bootstrapPrebuiltRules() { + bootstrapPrebuiltRules(kibanaSpace: string = 'default') { return supertest - .post('/internal/detection_engine/prebuilt_rules/_bootstrap') + .post( + routeWithNamespace('/internal/detection_engine/prebuilt_rules/_bootstrap', kibanaSpace) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -173,9 +176,9 @@ after 30 days. It also deletes other artifacts specific to the migration impleme /** * Create new detection rules in bulk. */ - bulkCreateRules(props: BulkCreateRulesProps) { + bulkCreateRules(props: BulkCreateRulesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules/_bulk_create') + .post(routeWithNamespace('/api/detection_engine/rules/_bulk_create', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -184,9 +187,9 @@ after 30 days. It also deletes other artifacts specific to the migration impleme /** * Delete detection rules in bulk. */ - bulkDeleteRules(props: BulkDeleteRulesProps) { + bulkDeleteRules(props: BulkDeleteRulesProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/detection_engine/rules/_bulk_delete') + .delete(routeWithNamespace('/api/detection_engine/rules/_bulk_delete', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -195,9 +198,9 @@ after 30 days. It also deletes other artifacts specific to the migration impleme /** * Deletes multiple rules. */ - bulkDeleteRulesPost(props: BulkDeleteRulesPostProps) { + bulkDeleteRulesPost(props: BulkDeleteRulesPostProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules/_bulk_delete') + .post(routeWithNamespace('/api/detection_engine/rules/_bulk_delete', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -206,9 +209,9 @@ after 30 days. It also deletes other artifacts specific to the migration impleme /** * Update specific fields of existing detection rules using the `rule_id` or `id` field. */ - bulkPatchRules(props: BulkPatchRulesProps) { + bulkPatchRules(props: BulkPatchRulesProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/detection_engine/rules/_bulk_update') + .patch(routeWithNamespace('/api/detection_engine/rules/_bulk_update', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -220,9 +223,9 @@ after 30 days. It also deletes other artifacts specific to the migration impleme > You cannot modify the `id` or `rule_id` values. */ - bulkUpdateRules(props: BulkUpdateRulesProps) { + bulkUpdateRules(props: BulkUpdateRulesProps, kibanaSpace: string = 'default') { return supertest - .put('/api/detection_engine/rules/_bulk_update') + .put(routeWithNamespace('/api/detection_engine/rules/_bulk_update', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -234,9 +237,12 @@ after 30 days. It also deletes other artifacts specific to the migration impleme If asset criticality records already exist for the specified entities, those records are overwritten with the specified values. If asset criticality records don't exist for the specified entities, new records are created. */ - bulkUpsertAssetCriticalityRecords(props: BulkUpsertAssetCriticalityRecordsProps) { + bulkUpsertAssetCriticalityRecords( + props: BulkUpsertAssetCriticalityRecordsProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/asset_criticality/bulk') + .post(routeWithNamespace('/api/asset_criticality/bulk', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -248,9 +254,9 @@ If asset criticality records already exist for the specified entities, those rec > If the user already has a draft Timeline, the existing draft Timeline is cleared and returned. */ - cleanDraftTimelines(props: CleanDraftTimelinesProps) { + cleanDraftTimelines(props: CleanDraftTimelinesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/timeline/_draft') + .post(routeWithNamespace('/api/timeline/_draft', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -259,16 +265,16 @@ If asset criticality records already exist for the specified entities, those rec /** * Cleaning up the the Risk Engine by removing the indices, mapping and transforms */ - cleanUpRiskEngine() { + cleanUpRiskEngine(kibanaSpace: string = 'default') { return supertest - .delete('/api/risk_score/engine/dangerously_delete_data') + .delete(routeWithNamespace('/api/risk_score/engine/dangerously_delete_data', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - createAlertsIndex() { + createAlertsIndex(kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/index') + .post(routeWithNamespace('/api/detection_engine/index', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -278,9 +284,9 @@ If asset criticality records already exist for the specified entities, those rec Migrations are initiated per index. While the process is neither destructive nor interferes with existing data, it may be resource-intensive. As such, it is recommended that you plan your migrations accordingly. */ - createAlertsMigration(props: CreateAlertsMigrationProps) { + createAlertsMigration(props: CreateAlertsMigrationProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/signals/migration') + .post(routeWithNamespace('/api/detection_engine/signals/migration', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -292,9 +298,12 @@ Migrations are initiated per index. While the process is neither destructive nor If a record already exists for the specified entity, that record is overwritten with the specified value. If a record doesn't exist for the specified entity, a new record is created. */ - createAssetCriticalityRecord(props: CreateAssetCriticalityRecordProps) { + createAssetCriticalityRecord( + props: CreateAssetCriticalityRecordProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/asset_criticality') + .post(routeWithNamespace('/api/asset_criticality', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -303,9 +312,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Create a new detection rule. */ - createRule(props: CreateRuleProps) { + createRule(props: CreateRuleProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules') + .post(routeWithNamespace('/api/detection_engine/rules', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -314,27 +323,36 @@ If a record already exists for the specified entity, that record is overwritten /** * Create a new Timeline or Timeline template. */ - createTimelines(props: CreateTimelinesProps) { + createTimelines(props: CreateTimelinesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/timeline') + .post(routeWithNamespace('/api/timeline', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - createUpdateProtectionUpdatesNote(props: CreateUpdateProtectionUpdatesNoteProps) { + createUpdateProtectionUpdatesNote( + props: CreateUpdateProtectionUpdatesNoteProps, + kibanaSpace: string = 'default' + ) { return supertest .post( - replaceParams('/api/endpoint/protection_updates_note/{package_policy_id}', props.params) + routeWithNamespace( + replaceParams( + '/api/endpoint/protection_updates_note/{package_policy_id}', + props.params + ), + kibanaSpace + ) ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - deleteAlertsIndex() { + deleteAlertsIndex(kibanaSpace: string = 'default') { return supertest - .delete('/api/detection_engine/index') + .delete(routeWithNamespace('/api/detection_engine/index', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -342,17 +360,25 @@ If a record already exists for the specified entity, that record is overwritten /** * Delete the asset criticality record for a specific entity. */ - deleteAssetCriticalityRecord(props: DeleteAssetCriticalityRecordProps) { + deleteAssetCriticalityRecord( + props: DeleteAssetCriticalityRecordProps, + kibanaSpace: string = 'default' + ) { return supertest - .delete('/api/asset_criticality') + .delete(routeWithNamespace('/api/asset_criticality', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - deleteEntityEngine(props: DeleteEntityEngineProps) { + deleteEntityEngine(props: DeleteEntityEngineProps, kibanaSpace: string = 'default') { return supertest - .delete(replaceParams('/api/entity_store/engines/{entityType}', props.params)) + .delete( + routeWithNamespace( + replaceParams('/api/entity_store/engines/{entityType}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -361,9 +387,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Delete a note from a Timeline using the note ID. */ - deleteNote(props: DeleteNoteProps) { + deleteNote(props: DeleteNoteProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/note') + .delete(routeWithNamespace('/api/note', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -372,9 +398,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Delete a detection rule using the `rule_id` or `id` field. */ - deleteRule(props: DeleteRuleProps) { + deleteRule(props: DeleteRuleProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/detection_engine/rules') + .delete(routeWithNamespace('/api/detection_engine/rules', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -383,9 +409,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Delete one or more Timelines or Timeline templates. */ - deleteTimelines(props: DeleteTimelinesProps) { + deleteTimelines(props: DeleteTimelinesProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/timeline') + .delete(routeWithNamespace('/api/timeline', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -394,24 +420,27 @@ If a record already exists for the specified entity, that record is overwritten /** * Calculates and persists Risk Scores for an entity, returning the calculated risk score. */ - deprecatedTriggerRiskScoreCalculation(props: DeprecatedTriggerRiskScoreCalculationProps) { + deprecatedTriggerRiskScoreCalculation( + props: DeprecatedTriggerRiskScoreCalculationProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/risk_scores/calculation/entity') + .post(routeWithNamespace('/api/risk_scores/calculation/entity', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - disableRiskEngine() { + disableRiskEngine(kibanaSpace: string = 'default') { return supertest - .post('/internal/risk_score/engine/disable') + .post(routeWithNamespace('/internal/risk_score/engine/disable', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - enableRiskEngine() { + enableRiskEngine(kibanaSpace: string = 'default') { return supertest - .post('/internal/risk_score/engine/enable') + .post(routeWithNamespace('/internal/risk_score/engine/enable', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -419,9 +448,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Run a shell command on an endpoint. */ - endpointExecuteAction(props: EndpointExecuteActionProps) { + endpointExecuteAction(props: EndpointExecuteActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/action/execute') + .post(routeWithNamespace('/api/endpoint/action/execute', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -430,10 +459,13 @@ If a record already exists for the specified entity, that record is overwritten /** * Download a file from an endpoint. */ - endpointFileDownload(props: EndpointFileDownloadProps) { + endpointFileDownload(props: EndpointFileDownloadProps, kibanaSpace: string = 'default') { return supertest .get( - replaceParams('/api/endpoint/action/{action_id}/file/{file_id}/download', props.params) + routeWithNamespace( + replaceParams('/api/endpoint/action/{action_id}/file/{file_id}/download', props.params), + kibanaSpace + ) ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') @@ -442,9 +474,14 @@ If a record already exists for the specified entity, that record is overwritten /** * Get information for the specified file using the file ID. */ - endpointFileInfo(props: EndpointFileInfoProps) { + endpointFileInfo(props: EndpointFileInfoProps, kibanaSpace: string = 'default') { return supertest - .get(replaceParams('/api/endpoint/action/{action_id}/file/{file_id}', props.params)) + .get( + routeWithNamespace( + replaceParams('/api/endpoint/action/{action_id}/file/{file_id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -452,9 +489,17 @@ If a record already exists for the specified entity, that record is overwritten /** * Get the details of a response action using the action ID. */ - endpointGetActionsDetails(props: EndpointGetActionsDetailsProps) { + endpointGetActionsDetails( + props: EndpointGetActionsDetailsProps, + kibanaSpace: string = 'default' + ) { return supertest - .get(replaceParams('/api/endpoint/action/{action_id}', props.params)) + .get( + routeWithNamespace( + replaceParams('/api/endpoint/action/{action_id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -462,9 +507,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Get a list of all response actions. */ - endpointGetActionsList(props: EndpointGetActionsListProps) { + endpointGetActionsList(props: EndpointGetActionsListProps, kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint/action') + .get(routeWithNamespace('/api/endpoint/action', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -473,9 +518,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Get a response actions state, which reports whether encryption is enabled. */ - endpointGetActionsState() { + endpointGetActionsState(kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint/action/state') + .get(routeWithNamespace('/api/endpoint/action/state', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -483,9 +528,12 @@ If a record already exists for the specified entity, that record is overwritten /** * Get the status of response actions for the specified agent IDs. */ - endpointGetActionsStatus(props: EndpointGetActionsStatusProps) { + endpointGetActionsStatus( + props: EndpointGetActionsStatusProps, + kibanaSpace: string = 'default' + ) { return supertest - .get('/api/endpoint/action_status') + .get(routeWithNamespace('/api/endpoint/action_status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -494,9 +542,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Get a file from an endpoint. */ - endpointGetFileAction(props: EndpointGetFileActionProps) { + endpointGetFileAction(props: EndpointGetFileActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/action/get_file') + .post(routeWithNamespace('/api/endpoint/action/get_file', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -505,9 +553,12 @@ If a record already exists for the specified entity, that record is overwritten /** * Get a list of all processes running on an endpoint. */ - endpointGetProcessesAction(props: EndpointGetProcessesActionProps) { + endpointGetProcessesAction( + props: EndpointGetProcessesActionProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/endpoint/action/running_procs') + .post(routeWithNamespace('/api/endpoint/action/running_procs', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -516,9 +567,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Isolate an endpoint from the network. The endpoint remains isolated until it's released. */ - endpointIsolateAction(props: EndpointIsolateActionProps) { + endpointIsolateAction(props: EndpointIsolateActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/action/isolate') + .post(routeWithNamespace('/api/endpoint/action/isolate', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -530,9 +581,9 @@ If a record already exists for the specified entity, that record is overwritten > This URL will return a 308 permanent redirect to `POST :/api/endpoint/action/isolate`. */ - endpointIsolateRedirect(props: EndpointIsolateRedirectProps) { + endpointIsolateRedirect(props: EndpointIsolateRedirectProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/isolate') + .post(routeWithNamespace('/api/endpoint/isolate', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -541,9 +592,12 @@ If a record already exists for the specified entity, that record is overwritten /** * Terminate a running process on an endpoint. */ - endpointKillProcessAction(props: EndpointKillProcessActionProps) { + endpointKillProcessAction( + props: EndpointKillProcessActionProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/endpoint/action/kill_process') + .post(routeWithNamespace('/api/endpoint/action/kill_process', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -552,9 +606,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Scan a specific file or directory on an endpoint for malware. */ - endpointScanAction(props: EndpointScanActionProps) { + endpointScanAction(props: EndpointScanActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/action/scan') + .post(routeWithNamespace('/api/endpoint/action/scan', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -563,9 +617,12 @@ If a record already exists for the specified entity, that record is overwritten /** * Suspend a running process on an endpoint. */ - endpointSuspendProcessAction(props: EndpointSuspendProcessActionProps) { + endpointSuspendProcessAction( + props: EndpointSuspendProcessActionProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/endpoint/action/suspend_process') + .post(routeWithNamespace('/api/endpoint/action/suspend_process', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -574,9 +631,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Release an isolated endpoint, allowing it to rejoin a network. */ - endpointUnisolateAction(props: EndpointUnisolateActionProps) { + endpointUnisolateAction(props: EndpointUnisolateActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/action/unisolate') + .post(routeWithNamespace('/api/endpoint/action/unisolate', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -588,9 +645,12 @@ If a record already exists for the specified entity, that record is overwritten > This URL will return a 308 permanent redirect to `POST :/api/endpoint/action/unisolate`. */ - endpointUnisolateRedirect(props: EndpointUnisolateRedirectProps) { + endpointUnisolateRedirect( + props: EndpointUnisolateRedirectProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/endpoint/unisolate') + .post(routeWithNamespace('/api/endpoint/unisolate', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -599,9 +659,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Upload a file to an endpoint. */ - endpointUploadAction(props: EndpointUploadActionProps) { + endpointUploadAction(props: EndpointUploadActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint/action/upload') + .post(routeWithNamespace('/api/endpoint/action/upload', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -615,9 +675,9 @@ If a record already exists for the specified entity, that record is overwritten > You cannot export prebuilt rules. */ - exportRules(props: ExportRulesProps) { + exportRules(props: ExportRulesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules/_export') + .post(routeWithNamespace('/api/detection_engine/rules/_export', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -627,9 +687,9 @@ If a record already exists for the specified entity, that record is overwritten /** * Export Timelines as an NDJSON file. */ - exportTimelines(props: ExportTimelinesProps) { + exportTimelines(props: ExportTimelinesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/timeline/_export') + .post(routeWithNamespace('/api/timeline/_export', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -642,9 +702,9 @@ The endpoint is idempotent; therefore, it can safely be used to poll a given mig finalize it. */ - finalizeAlertsMigration(props: FinalizeAlertsMigrationProps) { + finalizeAlertsMigration(props: FinalizeAlertsMigrationProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/signals/finalize_migration') + .post(routeWithNamespace('/api/detection_engine/signals/finalize_migration', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -653,9 +713,12 @@ finalize it. /** * List asset criticality records, paging, sorting and filtering as needed. */ - findAssetCriticalityRecords(props: FindAssetCriticalityRecordsProps) { + findAssetCriticalityRecords( + props: FindAssetCriticalityRecordsProps, + kibanaSpace: string = 'default' + ) { return supertest - .get('/api/asset_criticality/list') + .get(routeWithNamespace('/api/asset_criticality/list', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -664,17 +727,17 @@ finalize it. /** * Retrieve a paginated list of detection rules. By default, the first page is returned, with 20 results per page. */ - findRules(props: FindRulesProps) { + findRules(props: FindRulesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/detection_engine/rules/_find') + .get(routeWithNamespace('/api/detection_engine/rules/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getAgentPolicySummary(props: GetAgentPolicySummaryProps) { + getAgentPolicySummary(props: GetAgentPolicySummaryProps, kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint/policy/summaries') + .get(routeWithNamespace('/api/endpoint/policy/summaries', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -683,17 +746,20 @@ finalize it. /** * Get the asset criticality record for a specific entity. */ - getAssetCriticalityRecord(props: GetAssetCriticalityRecordProps) { + getAssetCriticalityRecord( + props: GetAssetCriticalityRecordProps, + kibanaSpace: string = 'default' + ) { return supertest - .get('/api/asset_criticality') + .get(routeWithNamespace('/api/asset_criticality', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getAssetCriticalityStatus() { + getAssetCriticalityStatus(kibanaSpace: string = 'default') { return supertest - .get('/internal/asset_criticality/status') + .get(routeWithNamespace('/internal/asset_criticality/status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -701,40 +767,55 @@ finalize it. /** * Get the details of the draft Timeline or Timeline template for the current user. If the user doesn't have a draft Timeline, an empty Timeline is returned. */ - getDraftTimelines(props: GetDraftTimelinesProps) { + getDraftTimelines(props: GetDraftTimelinesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/timeline/_draft') + .get(routeWithNamespace('/api/timeline/_draft', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getEndpointMetadataList(props: GetEndpointMetadataListProps) { + getEndpointMetadataList(props: GetEndpointMetadataListProps, kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint/metadata') + .get(routeWithNamespace('/api/endpoint/metadata', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getEndpointSuggestions(props: GetEndpointSuggestionsProps) { + getEndpointSuggestions(props: GetEndpointSuggestionsProps, kibanaSpace: string = 'default') { return supertest - .post(replaceParams('/api/endpoint/suggestions/{suggestion_type}', props.params)) + .post( + routeWithNamespace( + replaceParams('/api/endpoint/suggestions/{suggestion_type}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - getEntityEngine(props: GetEntityEngineProps) { + getEntityEngine(props: GetEntityEngineProps, kibanaSpace: string = 'default') { return supertest - .get(replaceParams('/api/entity_store/engines/{entityType}', props.params)) + .get( + routeWithNamespace( + replaceParams('/api/entity_store/engines/{entityType}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getEntityEngineStats(props: GetEntityEngineStatsProps) { + getEntityEngineStats(props: GetEntityEngineStatsProps, kibanaSpace: string = 'default') { return supertest - .post(replaceParams('/api/entity_store/engines/{entityType}/stats', props.params)) + .post( + routeWithNamespace( + replaceParams('/api/entity_store/engines/{entityType}/stats', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -742,26 +823,35 @@ finalize it. /** * Get all notes for a given document. */ - getNotes(props: GetNotesProps) { + getNotes(props: GetNotesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/note') + .get(routeWithNamespace('/api/note', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getPolicyResponse(props: GetPolicyResponseProps) { + getPolicyResponse(props: GetPolicyResponseProps, kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint/policy_response') + .get(routeWithNamespace('/api/endpoint/policy_response', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getProtectionUpdatesNote(props: GetProtectionUpdatesNoteProps) { + getProtectionUpdatesNote( + props: GetProtectionUpdatesNoteProps, + kibanaSpace: string = 'default' + ) { return supertest .get( - replaceParams('/api/endpoint/protection_updates_note/{package_policy_id}', props.params) + routeWithNamespace( + replaceParams( + '/api/endpoint/protection_updates_note/{package_policy_id}', + props.params + ), + kibanaSpace + ) ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') @@ -770,27 +860,39 @@ finalize it. /** * Returns the status of both the legacy transform-based risk engine, as well as the new risk engine */ - getRiskEngineStatus() { + getRiskEngineStatus(kibanaSpace: string = 'default') { return supertest - .get('/internal/risk_score/engine/status') + .get(routeWithNamespace('/internal/risk_score/engine/status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getRuleExecutionEvents(props: GetRuleExecutionEventsProps) { + getRuleExecutionEvents(props: GetRuleExecutionEventsProps, kibanaSpace: string = 'default') { return supertest .put( - replaceParams('/internal/detection_engine/rules/{ruleId}/execution/events', props.params) + routeWithNamespace( + replaceParams( + '/internal/detection_engine/rules/{ruleId}/execution/events', + props.params + ), + kibanaSpace + ) ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - getRuleExecutionResults(props: GetRuleExecutionResultsProps) { + getRuleExecutionResults(props: GetRuleExecutionResultsProps, kibanaSpace: string = 'default') { return supertest .put( - replaceParams('/internal/detection_engine/rules/{ruleId}/execution/results', props.params) + routeWithNamespace( + replaceParams( + '/internal/detection_engine/rules/{ruleId}/execution/results', + props.params + ), + kibanaSpace + ) ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') @@ -800,9 +902,9 @@ finalize it. /** * Get the details of an existing saved Timeline or Timeline template. */ - getTimeline(props: GetTimelineProps) { + getTimeline(props: GetTimelineProps, kibanaSpace: string = 'default') { return supertest - .get('/api/timeline') + .get(routeWithNamespace('/api/timeline', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -811,9 +913,9 @@ finalize it. /** * Get a list of all saved Timelines or Timeline templates. */ - getTimelines(props: GetTimelinesProps) { + getTimelines(props: GetTimelinesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/timelines') + .get(routeWithNamespace('/api/timelines', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -825,9 +927,9 @@ finalize it. - A link to the `.ndjson` file containing the rules. */ - importRules(props: ImportRulesProps) { + importRules(props: ImportRulesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules/_import') + .post(routeWithNamespace('/api/detection_engine/rules/_import', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -836,17 +938,22 @@ finalize it. /** * Import Timelines. */ - importTimelines(props: ImportTimelinesProps) { + importTimelines(props: ImportTimelinesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/timeline/_import') + .post(routeWithNamespace('/api/timeline/_import', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - initEntityEngine(props: InitEntityEngineProps) { + initEntityEngine(props: InitEntityEngineProps, kibanaSpace: string = 'default') { return supertest - .post(replaceParams('/api/entity_store/engines/{entityType}/init', props.params)) + .post( + routeWithNamespace( + replaceParams('/api/entity_store/engines/{entityType}/init', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -855,9 +962,9 @@ finalize it. /** * Initializes the Risk Engine by creating the necessary indices and mappings, removing old transforms, and starting the new risk engine */ - initRiskEngine() { + initRiskEngine(kibanaSpace: string = 'default') { return supertest - .post('/internal/risk_score/engine/init') + .post(routeWithNamespace('/internal/risk_score/engine/init', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -865,9 +972,9 @@ finalize it. /** * Install and update all Elastic prebuilt detection rules and Timelines. */ - installPrebuiltRulesAndTimelines() { + installPrebuiltRulesAndTimelines(kibanaSpace: string = 'default') { return supertest - .put('/api/detection_engine/rules/prepackaged') + .put(routeWithNamespace('/api/detection_engine/rules/prepackaged', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -875,17 +982,20 @@ finalize it. /** * Install or update prepackaged Timelines. */ - installPrepackedTimelines(props: InstallPrepackedTimelinesProps) { + installPrepackedTimelines( + props: InstallPrepackedTimelinesProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/timeline/_prepackaged') + .post(routeWithNamespace('/api/timeline/_prepackaged', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - internalUploadAssetCriticalityRecords() { + internalUploadAssetCriticalityRecords(kibanaSpace: string = 'default') { return supertest - .post('/internal/asset_criticality/upload_csv') + .post(routeWithNamespace('/internal/asset_criticality/upload_csv', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -893,17 +1003,17 @@ finalize it. /** * List entities records, paging, sorting and filtering as needed. */ - listEntities(props: ListEntitiesProps) { + listEntities(props: ListEntitiesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/entity_store/entities/list') + .get(routeWithNamespace('/api/entity_store/entities/list', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - listEntityEngines() { + listEntityEngines(kibanaSpace: string = 'default') { return supertest - .get('/api/entity_store/engines') + .get(routeWithNamespace('/api/entity_store/engines', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -911,9 +1021,9 @@ finalize it. /** * Update specific fields of an existing detection rule using the `rule_id` or `id` field. */ - patchRule(props: PatchRuleProps) { + patchRule(props: PatchRuleProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/detection_engine/rules') + .patch(routeWithNamespace('/api/detection_engine/rules', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -922,9 +1032,9 @@ finalize it. /** * Update an existing Timeline. You can update the title, description, date range, pinned events, pinned queries, and/or pinned saved queries of an existing Timeline. */ - patchTimeline(props: PatchTimelineProps) { + patchTimeline(props: PatchTimelineProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/timeline') + .patch(routeWithNamespace('/api/timeline', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -933,9 +1043,9 @@ finalize it. /** * Apply a bulk action, such as bulk edit, duplicate, or delete, to multiple detection rules. The bulk action is applied to all rules that match the query or to the rules listed by their IDs. */ - performRulesBulkAction(props: PerformRulesBulkActionProps) { + performRulesBulkAction(props: PerformRulesBulkActionProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules/_bulk_action') + .post(routeWithNamespace('/api/detection_engine/rules/_bulk_action', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -945,9 +1055,9 @@ finalize it. /** * Favorite a Timeline or Timeline template for the current user. */ - persistFavoriteRoute(props: PersistFavoriteRouteProps) { + persistFavoriteRoute(props: PersistFavoriteRouteProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/timeline/_favorite') + .patch(routeWithNamespace('/api/timeline/_favorite', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -956,9 +1066,9 @@ finalize it. /** * Add a note to a Timeline or update an existing note. */ - persistNoteRoute(props: PersistNoteRouteProps) { + persistNoteRoute(props: PersistNoteRouteProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/note') + .patch(routeWithNamespace('/api/note', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -967,9 +1077,9 @@ finalize it. /** * Pin an event to an existing Timeline. */ - persistPinnedEventRoute(props: PersistPinnedEventRouteProps) { + persistPinnedEventRoute(props: PersistPinnedEventRouteProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/pinned_event') + .patch(routeWithNamespace('/api/pinned_event', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -978,17 +1088,17 @@ finalize it. /** * Calculates and returns a list of Risk Scores, sorted by identifier_type and risk score. */ - previewRiskScore(props: PreviewRiskScoreProps) { + previewRiskScore(props: PreviewRiskScoreProps, kibanaSpace: string = 'default') { return supertest - .post('/internal/risk_score/preview') + .post(routeWithNamespace('/internal/risk_score/preview', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - readAlertsIndex() { + readAlertsIndex(kibanaSpace: string = 'default') { return supertest - .get('/api/detection_engine/index') + .get(routeWithNamespace('/api/detection_engine/index', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -996,9 +1106,12 @@ finalize it. /** * Retrieve indices that contain detection alerts of a particular age, along with migration information for each of those indices. */ - readAlertsMigrationStatus(props: ReadAlertsMigrationStatusProps) { + readAlertsMigrationStatus( + props: ReadAlertsMigrationStatusProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/detection_engine/signals/migration_status') + .post(routeWithNamespace('/api/detection_engine/signals/migration_status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1007,9 +1120,9 @@ finalize it. /** * Retrieve the status of all Elastic prebuilt detection rules and Timelines. */ - readPrebuiltRulesAndTimelinesStatus() { + readPrebuiltRulesAndTimelinesStatus(kibanaSpace: string = 'default') { return supertest - .get('/api/detection_engine/rules/prepackaged/_status') + .get(routeWithNamespace('/api/detection_engine/rules/prepackaged/_status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -1021,16 +1134,16 @@ index for the Elastic Security alerts generated by detection engine rules. */ - readPrivileges() { + readPrivileges(kibanaSpace: string = 'default') { return supertest - .get('/api/detection_engine/privileges') + .get(routeWithNamespace('/api/detection_engine/privileges', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - readRiskEngineSettings() { + readRiskEngineSettings(kibanaSpace: string = 'default') { return supertest - .get('/internal/risk_score/engine/settings') + .get(routeWithNamespace('/internal/risk_score/engine/settings', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -1038,9 +1151,9 @@ detection engine rules. /** * Retrieve a detection rule using the `rule_id` or `id` field. */ - readRule(props: ReadRuleProps) { + readRule(props: ReadRuleProps, kibanaSpace: string = 'default') { return supertest - .get('/api/detection_engine/rules') + .get(routeWithNamespace('/api/detection_engine/rules', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1049,31 +1162,31 @@ detection engine rules. /** * List all unique tags from all detection rules. */ - readTags() { + readTags(kibanaSpace: string = 'default') { return supertest - .get('/api/detection_engine/tags') + .get(routeWithNamespace('/api/detection_engine/tags', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - resolveTimeline(props: ResolveTimelineProps) { + resolveTimeline(props: ResolveTimelineProps, kibanaSpace: string = 'default') { return supertest - .get('/api/timeline/resolve') + .get(routeWithNamespace('/api/timeline/resolve', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - riskEngineGetPrivileges() { + riskEngineGetPrivileges(kibanaSpace: string = 'default') { return supertest - .get('/internal/risk_engine/privileges') + .get(routeWithNamespace('/internal/risk_engine/privileges', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - rulePreview(props: RulePreviewProps) { + rulePreview(props: RulePreviewProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/rules/preview') + .post(routeWithNamespace('/api/detection_engine/rules/preview', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1083,9 +1196,9 @@ detection engine rules. /** * Schedule the risk scoring engine to run as soon as possible. You can use this to recalculate entity risk scores after updating their asset criticality. */ - scheduleRiskEngineNow() { + scheduleRiskEngineNow(kibanaSpace: string = 'default') { return supertest - .post('/api/risk_score/engine/schedule_now') + .post(routeWithNamespace('/api/risk_score/engine/schedule_now', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -1093,9 +1206,9 @@ detection engine rules. /** * Find and/or aggregate detection alerts that match the given query. */ - searchAlerts(props: SearchAlertsProps) { + searchAlerts(props: SearchAlertsProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/signals/search') + .post(routeWithNamespace('/api/detection_engine/signals/search', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1107,9 +1220,9 @@ detection engine rules. > You cannot add and remove the same assignee in the same request. */ - setAlertAssignees(props: SetAlertAssigneesProps) { + setAlertAssignees(props: SetAlertAssigneesProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/signals/assignees') + .post(routeWithNamespace('/api/detection_engine/signals/assignees', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1118,9 +1231,9 @@ detection engine rules. /** * Set the status of one or more detection alerts. */ - setAlertsStatus(props: SetAlertsStatusProps) { + setAlertsStatus(props: SetAlertsStatusProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/signals/status') + .post(routeWithNamespace('/api/detection_engine/signals/status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1132,24 +1245,34 @@ detection engine rules. > You cannot add and remove the same alert tag in the same request. */ - setAlertTags(props: SetAlertTagsProps) { + setAlertTags(props: SetAlertTagsProps, kibanaSpace: string = 'default') { return supertest - .post('/api/detection_engine/signals/tags') + .post(routeWithNamespace('/api/detection_engine/signals/tags', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - startEntityEngine(props: StartEntityEngineProps) { + startEntityEngine(props: StartEntityEngineProps, kibanaSpace: string = 'default') { return supertest - .post(replaceParams('/api/entity_store/engines/{entityType}/start', props.params)) + .post( + routeWithNamespace( + replaceParams('/api/entity_store/engines/{entityType}/start', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - stopEntityEngine(props: StopEntityEngineProps) { + stopEntityEngine(props: StopEntityEngineProps, kibanaSpace: string = 'default') { return supertest - .post(replaceParams('/api/entity_store/engines/{entityType}/stop', props.params)) + .post( + routeWithNamespace( + replaceParams('/api/entity_store/engines/{entityType}/stop', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -1157,9 +1280,9 @@ detection engine rules. /** * Suggests user profiles. */ - suggestUserProfiles(props: SuggestUserProfilesProps) { + suggestUserProfiles(props: SuggestUserProfilesProps, kibanaSpace: string = 'default') { return supertest - .post('/internal/detection_engine/users/_find') + .post(routeWithNamespace('/internal/detection_engine/users/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1168,9 +1291,12 @@ detection engine rules. /** * Calculates and persists Risk Scores for an entity, returning the calculated risk score. */ - triggerRiskScoreCalculation(props: TriggerRiskScoreCalculationProps) { + triggerRiskScoreCalculation( + props: TriggerRiskScoreCalculationProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/internal/risk_score/calculation/entity') + .post(routeWithNamespace('/internal/risk_score/calculation/entity', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1182,17 +1308,17 @@ detection engine rules. > You cannot modify the `id` or `rule_id` values. */ - updateRule(props: UpdateRuleProps) { + updateRule(props: UpdateRuleProps, kibanaSpace: string = 'default') { return supertest - .put('/api/detection_engine/rules') + .put(routeWithNamespace('/api/detection_engine/rules', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - uploadAssetCriticalityRecords() { + uploadAssetCriticalityRecords(kibanaSpace: string = 'default') { return supertest - .post('/api/asset_criticality/upload_csv') + .post(routeWithNamespace('/api/asset_criticality/upload_csv', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); diff --git a/x-pack/test/api_integration/services/security_solution_endpoint_exceptions_api.gen.ts b/x-pack/test/api_integration/services/security_solution_endpoint_exceptions_api.gen.ts index 505faf82fd68..d8c06801ab5b 100644 --- a/x-pack/test/api_integration/services/security_solution_endpoint_exceptions_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_endpoint_exceptions_api.gen.ts @@ -24,6 +24,7 @@ import { DeleteEndpointListItemRequestQueryInput } from '@kbn/securitysolution-e import { FindEndpointListItemsRequestQueryInput } from '@kbn/securitysolution-endpoint-exceptions-common/api/find_endpoint_list_item/find_endpoint_list_item.gen'; import { ReadEndpointListItemRequestQueryInput } from '@kbn/securitysolution-endpoint-exceptions-common/api/read_endpoint_list_item/read_endpoint_list_item.gen'; import { UpdateEndpointListItemRequestBodyInput } from '@kbn/securitysolution-endpoint-exceptions-common/api/update_endpoint_list_item/update_endpoint_list_item.gen'; +import { routeWithNamespace } from '../../common/utils/security_solution'; import { FtrProviderContext } from '../ftr_provider_context'; export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) { @@ -33,9 +34,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create an endpoint exception list, which groups endpoint exception list items. If an endpoint exception list already exists, an empty response is returned. */ - createEndpointList() { + createEndpointList(kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint_list') + .post(routeWithNamespace('/api/endpoint_list', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -43,9 +44,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create an endpoint exception list item, and associate it with the endpoint exception list. */ - createEndpointListItem(props: CreateEndpointListItemProps) { + createEndpointListItem(props: CreateEndpointListItemProps, kibanaSpace: string = 'default') { return supertest - .post('/api/endpoint_list/items') + .post(routeWithNamespace('/api/endpoint_list/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -54,9 +55,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Delete an endpoint exception list item using the `id` or `item_id` field. */ - deleteEndpointListItem(props: DeleteEndpointListItemProps) { + deleteEndpointListItem(props: DeleteEndpointListItemProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/endpoint_list/items') + .delete(routeWithNamespace('/api/endpoint_list/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -65,9 +66,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a list of all endpoint exception list items. */ - findEndpointListItems(props: FindEndpointListItemsProps) { + findEndpointListItems(props: FindEndpointListItemsProps, kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint_list/items/_find') + .get(routeWithNamespace('/api/endpoint_list/items/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -76,9 +77,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the details of an endpoint exception list item using the `id` or `item_id` field. */ - readEndpointListItem(props: ReadEndpointListItemProps) { + readEndpointListItem(props: ReadEndpointListItemProps, kibanaSpace: string = 'default') { return supertest - .get('/api/endpoint_list/items') + .get(routeWithNamespace('/api/endpoint_list/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -87,9 +88,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Update an endpoint exception list item using the `id` or `item_id` field. */ - updateEndpointListItem(props: UpdateEndpointListItemProps) { + updateEndpointListItem(props: UpdateEndpointListItemProps, kibanaSpace: string = 'default') { return supertest - .put('/api/endpoint_list/items') + .put(routeWithNamespace('/api/endpoint_list/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') diff --git a/x-pack/test/api_integration/services/security_solution_exceptions_api.gen.ts b/x-pack/test/api_integration/services/security_solution_exceptions_api.gen.ts index 726f87789891..e9c26ad55ebf 100644 --- a/x-pack/test/api_integration/services/security_solution_exceptions_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_exceptions_api.gen.ts @@ -39,6 +39,7 @@ import { ReadExceptionListItemRequestQueryInput } from '@kbn/securitysolution-ex import { ReadExceptionListSummaryRequestQueryInput } from '@kbn/securitysolution-exceptions-common/api/read_exception_list_summary/read_exception_list_summary.gen'; import { UpdateExceptionListRequestBodyInput } from '@kbn/securitysolution-exceptions-common/api/update_exception_list/update_exception_list.gen'; import { UpdateExceptionListItemRequestBodyInput } from '@kbn/securitysolution-exceptions-common/api/update_exception_list_item/update_exception_list_item.gen'; +import { routeWithNamespace } from '../../common/utils/security_solution'; import { FtrProviderContext } from '../ftr_provider_context'; export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) { @@ -51,9 +52,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) > All exception items added to the same list are evaluated using `OR` logic. That is, if any of the items in a list evaluate to `true`, the exception prevents the rule from generating an alert. Likewise, `OR` logic is used for evaluating exceptions when more than one exception list is assigned to a rule. To use the `AND` operator, you can define multiple clauses (`entries`) in a single exception item. */ - createExceptionList(props: CreateExceptionListProps) { + createExceptionList(props: CreateExceptionListProps, kibanaSpace: string = 'default') { return supertest - .post('/api/exception_lists') + .post(routeWithNamespace('/api/exception_lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -65,9 +66,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) > Before creating exception items, you must create an exception list. */ - createExceptionListItem(props: CreateExceptionListItemProps) { + createExceptionListItem(props: CreateExceptionListItemProps, kibanaSpace: string = 'default') { return supertest - .post('/api/exception_lists/items') + .post(routeWithNamespace('/api/exception_lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -76,9 +77,17 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create exception items that apply to a single detection rule. */ - createRuleExceptionListItems(props: CreateRuleExceptionListItemsProps) { + createRuleExceptionListItems( + props: CreateRuleExceptionListItemsProps, + kibanaSpace: string = 'default' + ) { return supertest - .post(replaceParams('/api/detection_engine/rules/{id}/exceptions', props.params)) + .post( + routeWithNamespace( + replaceParams('/api/detection_engine/rules/{id}/exceptions', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -90,9 +99,12 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) > All exception items added to the same list are evaluated using `OR` logic. That is, if any of the items in a list evaluate to `true`, the exception prevents the rule from generating an alert. Likewise, `OR` logic is used for evaluating exceptions when more than one exception list is assigned to a rule. To use the `AND` operator, you can define multiple clauses (`entries`) in a single exception item. */ - createSharedExceptionList(props: CreateSharedExceptionListProps) { + createSharedExceptionList( + props: CreateSharedExceptionListProps, + kibanaSpace: string = 'default' + ) { return supertest - .post('/api/exceptions/shared') + .post(routeWithNamespace('/api/exceptions/shared', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -101,9 +113,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Delete an exception list using the `id` or `list_id` field. */ - deleteExceptionList(props: DeleteExceptionListProps) { + deleteExceptionList(props: DeleteExceptionListProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/exception_lists') + .delete(routeWithNamespace('/api/exception_lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -112,9 +124,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Delete an exception list item using the `id` or `item_id` field. */ - deleteExceptionListItem(props: DeleteExceptionListItemProps) { + deleteExceptionListItem(props: DeleteExceptionListItemProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/exception_lists/items') + .delete(routeWithNamespace('/api/exception_lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -123,9 +135,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Duplicate an existing exception list. */ - duplicateExceptionList(props: DuplicateExceptionListProps) { + duplicateExceptionList(props: DuplicateExceptionListProps, kibanaSpace: string = 'default') { return supertest - .post('/api/exception_lists/_duplicate') + .post(routeWithNamespace('/api/exception_lists/_duplicate', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -134,9 +146,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Export an exception list and its associated items to an NDJSON file. */ - exportExceptionList(props: ExportExceptionListProps) { + exportExceptionList(props: ExportExceptionListProps, kibanaSpace: string = 'default') { return supertest - .post('/api/exception_lists/_export') + .post(routeWithNamespace('/api/exception_lists/_export', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -145,9 +157,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a list of all exception list items in the specified list. */ - findExceptionListItems(props: FindExceptionListItemsProps) { + findExceptionListItems(props: FindExceptionListItemsProps, kibanaSpace: string = 'default') { return supertest - .get('/api/exception_lists/items/_find') + .get(routeWithNamespace('/api/exception_lists/items/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -156,9 +168,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a list of all exception lists. */ - findExceptionLists(props: FindExceptionListsProps) { + findExceptionLists(props: FindExceptionListsProps, kibanaSpace: string = 'default') { return supertest - .get('/api/exception_lists/_find') + .get(routeWithNamespace('/api/exception_lists/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -167,9 +179,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Import an exception list and its associated items from an NDJSON file. */ - importExceptionList(props: ImportExceptionListProps) { + importExceptionList(props: ImportExceptionListProps, kibanaSpace: string = 'default') { return supertest - .post('/api/exception_lists/_import') + .post(routeWithNamespace('/api/exception_lists/_import', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -178,9 +190,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the details of an exception list using the `id` or `list_id` field. */ - readExceptionList(props: ReadExceptionListProps) { + readExceptionList(props: ReadExceptionListProps, kibanaSpace: string = 'default') { return supertest - .get('/api/exception_lists') + .get(routeWithNamespace('/api/exception_lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -189,9 +201,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the details of an exception list item using the `id` or `item_id` field. */ - readExceptionListItem(props: ReadExceptionListItemProps) { + readExceptionListItem(props: ReadExceptionListItemProps, kibanaSpace: string = 'default') { return supertest - .get('/api/exception_lists/items') + .get(routeWithNamespace('/api/exception_lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -200,9 +212,12 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a summary of the specified exception list. */ - readExceptionListSummary(props: ReadExceptionListSummaryProps) { + readExceptionListSummary( + props: ReadExceptionListSummaryProps, + kibanaSpace: string = 'default' + ) { return supertest - .get('/api/exception_lists/summary') + .get(routeWithNamespace('/api/exception_lists/summary', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -211,9 +226,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Update an exception list using the `id` or `list_id` field. */ - updateExceptionList(props: UpdateExceptionListProps) { + updateExceptionList(props: UpdateExceptionListProps, kibanaSpace: string = 'default') { return supertest - .put('/api/exception_lists') + .put(routeWithNamespace('/api/exception_lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -222,9 +237,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Update an exception list item using the `id` or `item_id` field. */ - updateExceptionListItem(props: UpdateExceptionListItemProps) { + updateExceptionListItem(props: UpdateExceptionListItemProps, kibanaSpace: string = 'default') { return supertest - .put('/api/exception_lists/items') + .put(routeWithNamespace('/api/exception_lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') diff --git a/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts b/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts index 6ae8c4d1d490..703dbebcf28e 100644 --- a/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_lists_api.gen.ts @@ -33,6 +33,7 @@ import { ReadListRequestQueryInput } from '@kbn/securitysolution-lists-common/ap import { ReadListItemRequestQueryInput } from '@kbn/securitysolution-lists-common/api/read_list_item/read_list_item.gen'; import { UpdateListRequestBodyInput } from '@kbn/securitysolution-lists-common/api/update_list/update_list.gen'; import { UpdateListItemRequestBodyInput } from '@kbn/securitysolution-lists-common/api/update_list_item/update_list_item.gen'; +import { routeWithNamespace } from '../../common/utils/security_solution'; import { FtrProviderContext } from '../ftr_provider_context'; export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) { @@ -42,9 +43,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create a new list. */ - createList(props: CreateListProps) { + createList(props: CreateListProps, kibanaSpace: string = 'default') { return supertest - .post('/api/lists') + .post(routeWithNamespace('/api/lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -53,9 +54,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create `.lists` and `.items` data streams in the relevant space. */ - createListIndex() { + createListIndex(kibanaSpace: string = 'default') { return supertest - .post('/api/lists/index') + .post(routeWithNamespace('/api/lists/index', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -68,9 +69,9 @@ All list items in the same list must be the same type. For example, each list it > Before creating a list item, you must create a list. */ - createListItem(props: CreateListItemProps) { + createListItem(props: CreateListItemProps, kibanaSpace: string = 'default') { return supertest - .post('/api/lists/items') + .post(routeWithNamespace('/api/lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -82,9 +83,9 @@ All list items in the same list must be the same type. For example, each list it > When you delete a list, all of its list items are also deleted. */ - deleteList(props: DeleteListProps) { + deleteList(props: DeleteListProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/lists') + .delete(routeWithNamespace('/api/lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -93,9 +94,9 @@ All list items in the same list must be the same type. For example, each list it /** * Delete the `.lists` and `.items` data streams. */ - deleteListIndex() { + deleteListIndex(kibanaSpace: string = 'default') { return supertest - .delete('/api/lists/index') + .delete(routeWithNamespace('/api/lists/index', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -103,9 +104,9 @@ All list items in the same list must be the same type. For example, each list it /** * Delete a list item using its `id`, or its `list_id` and `value` fields. */ - deleteListItem(props: DeleteListItemProps) { + deleteListItem(props: DeleteListItemProps, kibanaSpace: string = 'default') { return supertest - .delete('/api/lists/items') + .delete(routeWithNamespace('/api/lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -114,9 +115,9 @@ All list items in the same list must be the same type. For example, each list it /** * Export list item values from the specified list. */ - exportListItems(props: ExportListItemsProps) { + exportListItems(props: ExportListItemsProps, kibanaSpace: string = 'default') { return supertest - .post('/api/lists/items/_export') + .post(routeWithNamespace('/api/lists/items/_export', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -125,9 +126,9 @@ All list items in the same list must be the same type. For example, each list it /** * Get all list items in the specified list. */ - findListItems(props: FindListItemsProps) { + findListItems(props: FindListItemsProps, kibanaSpace: string = 'default') { return supertest - .get('/api/lists/items/_find') + .get(routeWithNamespace('/api/lists/items/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -136,9 +137,9 @@ All list items in the same list must be the same type. For example, each list it /** * Get a paginated subset of lists. By default, the first page is returned, with 20 results per page. */ - findLists(props: FindListsProps) { + findLists(props: FindListsProps, kibanaSpace: string = 'default') { return supertest - .get('/api/lists/_find') + .get(routeWithNamespace('/api/lists/_find', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -150,9 +151,9 @@ All list items in the same list must be the same type. For example, each list it You can import items to a new or existing list. */ - importListItems(props: ImportListItemsProps) { + importListItems(props: ImportListItemsProps, kibanaSpace: string = 'default') { return supertest - .post('/api/lists/items/_import') + .post(routeWithNamespace('/api/lists/items/_import', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -161,9 +162,9 @@ You can import items to a new or existing list. /** * Update specific fields of an existing list using the list ID. */ - patchList(props: PatchListProps) { + patchList(props: PatchListProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/lists') + .patch(routeWithNamespace('/api/lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -172,9 +173,9 @@ You can import items to a new or existing list. /** * Update specific fields of an existing list item using the list item ID. */ - patchListItem(props: PatchListItemProps) { + patchListItem(props: PatchListItemProps, kibanaSpace: string = 'default') { return supertest - .patch('/api/lists/items') + .patch(routeWithNamespace('/api/lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -183,9 +184,9 @@ You can import items to a new or existing list. /** * Get the details of a list using the list ID. */ - readList(props: ReadListProps) { + readList(props: ReadListProps, kibanaSpace: string = 'default') { return supertest - .get('/api/lists') + .get(routeWithNamespace('/api/lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -194,9 +195,9 @@ You can import items to a new or existing list. /** * Verify that `.lists` and `.items` data streams exist. */ - readListIndex() { + readListIndex(kibanaSpace: string = 'default') { return supertest - .get('/api/lists/index') + .get(routeWithNamespace('/api/lists/index', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -204,17 +205,17 @@ You can import items to a new or existing list. /** * Get the details of a list item. */ - readListItem(props: ReadListItemProps) { + readListItem(props: ReadListItemProps, kibanaSpace: string = 'default') { return supertest - .get('/api/lists/items') + .get(routeWithNamespace('/api/lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - readListPrivileges() { + readListPrivileges(kibanaSpace: string = 'default') { return supertest - .get('/api/lists/privileges') + .get(routeWithNamespace('/api/lists/privileges', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -225,9 +226,9 @@ You can import items to a new or existing list. > You cannot modify the `id` value. */ - updateList(props: UpdateListProps) { + updateList(props: UpdateListProps, kibanaSpace: string = 'default') { return supertest - .put('/api/lists') + .put(routeWithNamespace('/api/lists', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -239,9 +240,9 @@ You can import items to a new or existing list. > You cannot modify the `id` value. */ - updateListItem(props: UpdateListItemProps) { + updateListItem(props: UpdateListItemProps, kibanaSpace: string = 'default') { return supertest - .put('/api/lists/items') + .put(routeWithNamespace('/api/lists/items', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') diff --git a/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts b/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts index c133ebce15c9..7f553041d53d 100644 --- a/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts @@ -51,43 +51,54 @@ import { } from '@kbn/osquery-plugin/common/api/saved_query/saved_query.gen'; import { ReadAssetsStatusRequestQueryInput } from '@kbn/osquery-plugin/common/api/asset/assets.gen'; import { UpdateAssetsStatusRequestQueryInput } from '@kbn/osquery-plugin/common/api/asset/assets.gen'; +import { routeWithNamespace } from '../../common/utils/security_solution'; import { FtrProviderContext } from '../ftr_provider_context'; export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) { const supertest = getService('supertest'); return { - getAgentDetails(props: GetAgentDetailsProps) { + getAgentDetails(props: GetAgentDetailsProps, kibanaSpace: string = 'default') { return supertest - .get(replaceParams('/internal/osquery/fleet_wrapper/agents/{id}', props.params)) + .get( + routeWithNamespace( + replaceParams('/internal/osquery/fleet_wrapper/agents/{id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getAgentPackagePolicies() { + getAgentPackagePolicies(kibanaSpace: string = 'default') { return supertest - .get('/internal/osquery/fleet_wrapper/package_policies') + .get(routeWithNamespace('/internal/osquery/fleet_wrapper/package_policies', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getAgentPolicies() { + getAgentPolicies(kibanaSpace: string = 'default') { return supertest - .get('/internal/osquery/fleet_wrapper/agent_policies') + .get(routeWithNamespace('/internal/osquery/fleet_wrapper/agent_policies', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getAgentPolicy(props: GetAgentPolicyProps) { + getAgentPolicy(props: GetAgentPolicyProps, kibanaSpace: string = 'default') { return supertest - .get(replaceParams('/internal/osquery/fleet_wrapper/agent_policies/{id}', props.params)) + .get( + routeWithNamespace( + replaceParams('/internal/osquery/fleet_wrapper/agent_policies/{id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - getAgents(props: GetAgentsProps) { + getAgents(props: GetAgentsProps, kibanaSpace: string = 'default') { return supertest - .get('/internal/osquery/fleet_wrapper/agents') + .get(routeWithNamespace('/internal/osquery/fleet_wrapper/agents', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -96,9 +107,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create and run a live query. */ - osqueryCreateLiveQuery(props: OsqueryCreateLiveQueryProps) { + osqueryCreateLiveQuery(props: OsqueryCreateLiveQueryProps, kibanaSpace: string = 'default') { return supertest - .post('/api/osquery/live_queries') + .post(routeWithNamespace('/api/osquery/live_queries', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -107,9 +118,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create a query pack. */ - osqueryCreatePacks(props: OsqueryCreatePacksProps) { + osqueryCreatePacks(props: OsqueryCreatePacksProps, kibanaSpace: string = 'default') { return supertest - .post('/api/osquery/packs') + .post(routeWithNamespace('/api/osquery/packs', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -118,9 +129,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Create and run a saved query. */ - osqueryCreateSavedQuery(props: OsqueryCreateSavedQueryProps) { + osqueryCreateSavedQuery(props: OsqueryCreateSavedQueryProps, kibanaSpace: string = 'default') { return supertest - .post('/api/osquery/saved_queries') + .post(routeWithNamespace('/api/osquery/saved_queries', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -129,9 +140,11 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Delete a query pack using the pack ID. */ - osqueryDeletePacks(props: OsqueryDeletePacksProps) { + osqueryDeletePacks(props: OsqueryDeletePacksProps, kibanaSpace: string = 'default') { return supertest - .delete(replaceParams('/api/osquery/packs/{id}', props.params)) + .delete( + routeWithNamespace(replaceParams('/api/osquery/packs/{id}', props.params), kibanaSpace) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -139,9 +152,14 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Delete a saved query using the query ID. */ - osqueryDeleteSavedQuery(props: OsqueryDeleteSavedQueryProps) { + osqueryDeleteSavedQuery(props: OsqueryDeleteSavedQueryProps, kibanaSpace: string = 'default') { return supertest - .delete(replaceParams('/api/osquery/saved_queries/{id}', props.params)) + .delete( + routeWithNamespace( + replaceParams('/api/osquery/saved_queries/{id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -149,9 +167,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a list of all live queries. */ - osqueryFindLiveQueries(props: OsqueryFindLiveQueriesProps) { + osqueryFindLiveQueries(props: OsqueryFindLiveQueriesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/osquery/live_queries') + .get(routeWithNamespace('/api/osquery/live_queries', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -160,9 +178,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a list of all query packs. */ - osqueryFindPacks(props: OsqueryFindPacksProps) { + osqueryFindPacks(props: OsqueryFindPacksProps, kibanaSpace: string = 'default') { return supertest - .get('/api/osquery/packs') + .get(routeWithNamespace('/api/osquery/packs', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -171,9 +189,9 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get a list of all saved queries. */ - osqueryFindSavedQueries(props: OsqueryFindSavedQueriesProps) { + osqueryFindSavedQueries(props: OsqueryFindSavedQueriesProps, kibanaSpace: string = 'default') { return supertest - .get('/api/osquery/saved_queries') + .get(routeWithNamespace('/api/osquery/saved_queries', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -182,9 +200,17 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the details of a live query using the query ID. */ - osqueryGetLiveQueryDetails(props: OsqueryGetLiveQueryDetailsProps) { + osqueryGetLiveQueryDetails( + props: OsqueryGetLiveQueryDetailsProps, + kibanaSpace: string = 'default' + ) { return supertest - .get(replaceParams('/api/osquery/live_queries/{id}', props.params)) + .get( + routeWithNamespace( + replaceParams('/api/osquery/live_queries/{id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -193,9 +219,17 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the results of a live query using the query action ID. */ - osqueryGetLiveQueryResults(props: OsqueryGetLiveQueryResultsProps) { + osqueryGetLiveQueryResults( + props: OsqueryGetLiveQueryResultsProps, + kibanaSpace: string = 'default' + ) { return supertest - .get(replaceParams('/api/osquery/live_queries/{id}/results/{actionId}', props.params)) + .get( + routeWithNamespace( + replaceParams('/api/osquery/live_queries/{id}/results/{actionId}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -204,9 +238,11 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the details of a query pack using the pack ID. */ - osqueryGetPacksDetails(props: OsqueryGetPacksDetailsProps) { + osqueryGetPacksDetails(props: OsqueryGetPacksDetailsProps, kibanaSpace: string = 'default') { return supertest - .get(replaceParams('/api/osquery/packs/{id}', props.params)) + .get( + routeWithNamespace(replaceParams('/api/osquery/packs/{id}', props.params), kibanaSpace) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -214,9 +250,17 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) /** * Get the details of a saved query using the query ID. */ - osqueryGetSavedQueryDetails(props: OsqueryGetSavedQueryDetailsProps) { + osqueryGetSavedQueryDetails( + props: OsqueryGetSavedQueryDetailsProps, + kibanaSpace: string = 'default' + ) { return supertest - .get(replaceParams('/api/osquery/saved_queries/{id}', props.params)) + .get( + routeWithNamespace( + replaceParams('/api/osquery/saved_queries/{id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); @@ -227,9 +271,11 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) > You cannot update a prebuilt pack. */ - osqueryUpdatePacks(props: OsqueryUpdatePacksProps) { + osqueryUpdatePacks(props: OsqueryUpdatePacksProps, kibanaSpace: string = 'default') { return supertest - .put(replaceParams('/api/osquery/packs/{id}', props.params)) + .put( + routeWithNamespace(replaceParams('/api/osquery/packs/{id}', props.params), kibanaSpace) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -241,39 +287,44 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) > You cannot update a prebuilt saved query. */ - osqueryUpdateSavedQuery(props: OsqueryUpdateSavedQueryProps) { + osqueryUpdateSavedQuery(props: OsqueryUpdateSavedQueryProps, kibanaSpace: string = 'default') { return supertest - .put(replaceParams('/api/osquery/saved_queries/{id}', props.params)) + .put( + routeWithNamespace( + replaceParams('/api/osquery/saved_queries/{id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, - readAssetsStatus(props: ReadAssetsStatusProps) { + readAssetsStatus(props: ReadAssetsStatusProps, kibanaSpace: string = 'default') { return supertest - .get('/internal/osquery/assets') + .get(routeWithNamespace('/internal/osquery/assets', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, - readInstallationStatus() { + readInstallationStatus(kibanaSpace: string = 'default') { return supertest - .get('/internal/osquery/status') + .get(routeWithNamespace('/internal/osquery/status', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - readPrivilegesCheck() { + readPrivilegesCheck(kibanaSpace: string = 'default') { return supertest - .get('/internal/osquery/privileges_check') + .get(routeWithNamespace('/internal/osquery/privileges_check', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, - updateAssetsStatus(props: UpdateAssetsStatusProps) { + updateAssetsStatus(props: UpdateAssetsStatusProps, kibanaSpace: string = 'default') { return supertest - .post('/internal/osquery/assets/update') + .post(routeWithNamespace('/internal/osquery/assets/update', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/index.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/index.ts index 1175734e7887..01bd3e946043 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/index.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/index.ts @@ -13,5 +13,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./perform_bulk_action_dry_run_ess')); loadTestFile(require.resolve('./perform_bulk_action')); loadTestFile(require.resolve('./perform_bulk_action_ess')); + loadTestFile(require.resolve('./perform_bulk_enable_disable.ts')); }); } diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts index c6c85751593a..a0e62fbaaad7 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_action.ts @@ -273,42 +273,6 @@ export default ({ getService }: FtrProviderContext): void => { await fetchRule(ruleId).expect(404); }); - it('should enable rules', async () => { - const ruleId = 'ruleId'; - await createRule(supertest, log, getSimpleRule(ruleId)); - - const { body } = await postBulkAction() - .send({ query: '', action: BulkActionTypeEnum.enable }) - .expect(200); - - expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 }); - - // Check that the updated rule is returned with the response - expect(body.attributes.results.updated[0].enabled).toEqual(true); - - // Check that the updates have been persisted - const { body: ruleBody } = await fetchRule(ruleId).expect(200); - expect(ruleBody.enabled).toEqual(true); - }); - - it('should disable rules', async () => { - const ruleId = 'ruleId'; - await createRule(supertest, log, getSimpleRule(ruleId, true)); - - const { body } = await postBulkAction() - .send({ query: '', action: BulkActionTypeEnum.disable }) - .expect(200); - - expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 }); - - // Check that the updated rule is returned with the response - expect(body.attributes.results.updated[0].enabled).toEqual(false); - - // Check that the updates have been persisted - const { body: ruleBody } = await fetchRule(ruleId).expect(200); - expect(ruleBody.enabled).toEqual(false); - }); - it('should duplicate rules', async () => { const ruleId = 'ruleId'; const ruleToDuplicate = getCustomQueryRuleParams({ diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_enable_disable.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_enable_disable.ts new file mode 100644 index 000000000000..1baa69cd8dfb --- /dev/null +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_bulk_actions/trial_license_complete_tier/perform_bulk_enable_disable.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from 'expect'; +import { BulkActionTypeEnum } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management'; +import { getCustomQueryRuleParams, fetchRule } from '../../../utils'; +import { createRule, deleteAllRules } from '../../../../../../common/utils/security_solution'; +import { FtrProviderContext } from '../../../../../ftr_provider_context'; + +export default ({ getService }: FtrProviderContext): void => { + const supertest = getService('supertest'); + const securitySolutionApi = getService('securitySolutionApi'); + const log = getService('log'); + + describe('@ess @serverless @serverlessQA Bulk enable/disable', () => { + beforeEach(async () => { + await deleteAllRules(supertest, log); + }); + + it('should enable rules', async () => { + const ruleId = 'ruleId'; + await createRule( + supertest, + log, + getCustomQueryRuleParams({ rule_id: ruleId, enabled: false }) + ); + + const { body } = await securitySolutionApi.performRulesBulkAction({ + query: {}, + body: { action: BulkActionTypeEnum.enable }, + }); + + expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 }); + + // Check that the updated rule is returned with the response + expect(body.attributes.results.updated[0].enabled).toEqual(true); + + // Check that the updates have been persisted + const ruleBody = await fetchRule(supertest, { ruleId }); + expect(ruleBody.enabled).toEqual(true); + }); + + it('should disable rules', async () => { + const ruleId = 'ruleId'; + await createRule( + supertest, + log, + getCustomQueryRuleParams({ rule_id: ruleId, enabled: true }) + ); + + const { body } = await securitySolutionApi.performRulesBulkAction({ + query: {}, + body: { action: BulkActionTypeEnum.disable }, + }); + + expect(body.attributes.summary).toEqual({ failed: 0, skipped: 0, succeeded: 1, total: 1 }); + + // Check that the updated rule is returned with the response + expect(body.attributes.results.updated[0].enabled).toEqual(false); + + // Check that the updates have been persisted + const ruleBody = await fetchRule(supertest, { ruleId }); + expect(ruleBody.enabled).toEqual(false); + }); + }); +}; diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_ml_rules_privileges.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_ml_rules_privileges.ts index 6d061b9b7609..3c10ba17dbdc 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_ml_rules_privileges.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_ml_rules_privileges.ts @@ -68,7 +68,7 @@ export default ({ getService }: FtrProviderContext) => { }); }); - it('@serverless should give a 200 when trying to create a single Machine Learning rule since the license is essentials', async () => { + it('@serverless @serverlessQA should give a 200 when trying to create a single Machine Learning rule since the license is essentials', async () => { const { body } = await supertest .post(DETECTION_ENGINE_RULES_URL) .set('kbn-xsrf', 'true') diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules.ts index 5bad760d3f91..9f1f662e40cb 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules.ts @@ -39,7 +39,7 @@ export default ({ getService }: FtrProviderContext) => { const dataPathBuilder = new EsArchivePathBuilder(isServerless); const auditbeatPath = dataPathBuilder.getPath('auditbeat/hosts'); - describe('@ess @serverless create_rules', () => { + describe('@ess @serverless @serverlessQA create_rules', () => { describe('creating rules', () => { before(async () => { await esArchiver.load(auditbeatPath); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules_bulk.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules_bulk.ts index 529c3615e9e8..e212a57c39d8 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules_bulk.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/basic_license_essentials_tier/create_rules_bulk.ts @@ -38,7 +38,7 @@ export default ({ getService }: FtrProviderContext): void => { const auditbeatPath = dataPathBuilder.getPath('auditbeat/hosts'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless create_rules_bulk', () => { + describe('@ess @serverless @skipInServerlessMKI create_rules_bulk', () => { describe('creating rules in bulk', () => { before(async () => { await esArchiver.load(auditbeatPath); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_new_terms.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_new_terms.ts index 9b8c41c9ef84..ef5d32d776ec 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_new_terms.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_new_terms.ts @@ -20,7 +20,7 @@ export default ({ getService }: FtrProviderContext) => { /** * Specific api integration tests for new terms rule type */ - describe('@serverless @ess create_new_terms', () => { + describe('@serverless @ess @serverlessQA create_new_terms', () => { beforeEach(async () => { await deleteAllRules(supertest, log); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_rules.ts index c3bdc9b4661d..10bde240ec36 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/create_rules.ts @@ -50,7 +50,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@serverless @ess create_rules', () => { + describe('@serverless @ess @serverlessQA create_rules', () => { describe('rule creation', () => { before(async () => { await es.indices.delete({ index: 'logs-test', ignore_unavailable: true }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/preview_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/preview_rules.ts index 02474fdb91d2..6b238146e0dc 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/preview_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_creation/trial_license_complete_tier/preview_rules.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext) => { const dataPathBuilder = new EsArchivePathBuilder(isServerless); const path = dataPathBuilder.getPath('auditbeat/hosts'); - describe('@serverless @ess preview_rules', () => { + describe('@serverless @ess @serverlessQA preview_rules', () => { describe('previewing rules', () => { before(async () => { await esArchiver.load(path); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules.ts index 75e3be0d825e..cdce8189f270 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext): void => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless delete_rules', () => { + describe('@ess @serverless @skipInServerlessMKI delete_rules', () => { describe('deleting rules', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules_bulk.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules_bulk.ts index bfde40d8b0db..dd73fa4d848b 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules_bulk.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/basic_license_essentials_tier/delete_rules_bulk.ts @@ -32,7 +32,7 @@ export default ({ getService }: FtrProviderContext): void => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless delete_rules_bulk', () => { + describe('@ess @serverless @skipInServerlessMKI delete_rules_bulk', () => { describe('deleting rules bulk using DELETE', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/trial_license_complete_tier/delete_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/trial_license_complete_tier/delete_rules.ts index 4e2628f196c2..f286f4c08dd0 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/trial_license_complete_tier/delete_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_delete/trial_license_complete_tier/delete_rules.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext): void => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless delete_rules', () => { + describe('@ess @serverless @skipInServerlessMKI delete_rules', () => { describe('deleting rules', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/export_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/export_rules.ts index 783d0bb42fd8..e64cc2e78a6e 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/export_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/export_rules.ts @@ -16,7 +16,7 @@ export default ({ getService }: FtrProviderContext): void => { const log = getService('log'); const securitySolutionApi = getService('securitySolutionApi'); - describe('@ess @serverless export_rules', () => { + describe('@ess @serverless @serverlessQA export_rules', () => { describe('exporting rules', () => { afterEach(async () => { await deleteAllRules(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts index fb02b47067f8..e7c2f8273fb9 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_import_export/basic_license_essentials_tier/import_rules.ts @@ -17,7 +17,7 @@ export default ({ getService }: FtrProviderContext): void => { const securitySolutionApi = getService('securitySolutionApi'); const log = getService('log'); - describe('@ess @serverless import_rules', () => { + describe('@ess @serverless @serverlessQA import_rules', () => { describe('importing rules with an index', () => { afterEach(async () => { await deleteAllRules(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/basic_license_essentials_tier/coverage_overview.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/basic_license_essentials_tier/coverage_overview.ts index f526f18b3f68..186e3b2cce59 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/basic_license_essentials_tier/coverage_overview.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/basic_license_essentials_tier/coverage_overview.ts @@ -66,7 +66,7 @@ export default ({ getService }: FtrProviderContext): void => { }); // Both serverless and ESS - describe('@serverless @ess tests', () => { + describe('@ess @serverless @skipInServerlessMKI tests', () => { describe('base cases', () => { it('returns an empty response if there are no rules', async () => { const body = await getCoverageOverview(supertest); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/trial_license_complete_tier/get_rule_management_filters.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/trial_license_complete_tier/get_rule_management_filters.ts index 673d6d652f6d..0c7b47e9cf5c 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/trial_license_complete_tier/get_rule_management_filters.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_management/trial_license_complete_tier/get_rule_management_filters.ts @@ -23,7 +23,7 @@ export default ({ getService }: FtrProviderContext): void => { const es = getService('es'); const log = getService('log'); - describe('@ess @serverless get_rule_management_filters', () => { + describe('@ess @serverless @serverlessQA get_rule_management_filters', () => { beforeEach(async () => { await deleteAllRules(supertest, log); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts index 9763967b57b3..a567eb78a776 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless patch_rules', () => { + describe('@ess @serverless @serverlessQA patch_rules', () => { describe('patch rules', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules_bulk.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules_bulk.ts index 207456d48f43..086909fc4945 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules_bulk.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules_bulk.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless patch_rules_bulk', () => { + describe('@ess @serverless @skipInServerlessMKI patch_rules_bulk', () => { describe('patch rules bulk', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/find_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/find_rules.ts index d21c78a68f5c..59dd94614850 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/find_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/find_rules.ts @@ -24,7 +24,7 @@ export default ({ getService }: FtrProviderContext): void => { const log = getService('log'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless find_rules', () => { + describe('@ess @serverless @serverlessQA find_rules', () => { beforeEach(async () => { await deleteAllRules(supertest, log); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/read_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/read_rules.ts index 21b31c702a7d..98fd58e4315d 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/read_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/basic_license_essentials_tier/read_rules.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless read_rules', () => { + describe('@ess @serverless @serverlessQA read_rules', () => { describe('reading rules', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/find_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/find_rules.ts index 2ef2890eeffa..23f04fa5303d 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/find_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/find_rules.ts @@ -25,7 +25,7 @@ export default ({ getService }: FtrProviderContext): void => { const log = getService('log'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless find_rules', () => { + describe('@ess @serverless @skipInServerlessMKI find_rules', () => { beforeEach(async () => { await deleteAllRules(supertest, log); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/read_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/read_rules.ts index 2e40bdb4d42a..8cc8d937b906 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/read_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_read/trial_license_complete_tier/read_rules.ts @@ -31,7 +31,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless read_rules', () => { + describe('@ess @serverless @skipInServerlessMKI read_rules', () => { describe('reading rules', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules.ts index 469da3bb7753..60e7bfe3ff88 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules.ts @@ -33,7 +33,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless update_rules', () => { + describe('@ess @serverless @serverlessQA update_rules', () => { describe('update rules', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules_bulk.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules_bulk.ts index 6708fe5a5e39..f9faee0481bf 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules_bulk.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_update/basic_license_essentials_tier/update_rules_bulk.ts @@ -32,7 +32,7 @@ export default ({ getService }: FtrProviderContext) => { const es = getService('es'); const utils = getService('securitySolutionUtils'); - describe('@ess @serverless update_rules_bulk', () => { + describe('@ess @serverless @skipInServerlessMKI update_rules_bulk', () => { describe('update rules bulk', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/notifications.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/notifications.cy.ts index f92e4b0f5a1e..989e68425daf 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/notifications.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/notifications.cy.ts @@ -32,7 +32,7 @@ const RULE_1 = createRuleAssetSavedObject({ describe( 'Detection rules, Prebuilt Rules Installation and Update Notifications', - { tags: ['@ess', '@serverless'] }, + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { beforeEach(() => { login(); @@ -72,7 +72,7 @@ describe( }); // https://github.com/elastic/kibana/issues/179968 - describe('Notifications', { tags: ['@skipInServerlessMKI'] }, () => { + describe('Notifications', () => { beforeEach(() => { installPrebuiltRuleAssets([RULE_1]); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts index 1ccb139133f3..86291d4eb9c7 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/prebuilt_rules_preview.cy.ts @@ -77,7 +77,7 @@ const PREVIEW_TABS = { describe( 'Detection rules, Prebuilt Rules Installation and Update workflow', - { tags: ['@ess', '@serverless'] }, + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { const commonProperties: Partial = { author: ['Elastic', 'Another author'], diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/update_workflow.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/update_workflow.cy.ts index da89d5b91ab4..87d936cb0e3e 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/update_workflow.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/prebuilt_rules/update_workflow.cy.ts @@ -32,7 +32,7 @@ import { visitRulesManagementTable } from '../../../../tasks/rules_management'; describe( 'Detection rules, Prebuilt Rules Installation and Update workflow', - { tags: ['@ess', '@serverless'] }, + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { describe('Upgrade of prebuilt rules', () => { const RULE_1_ID = 'rule_1'; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_duplicate_rules.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_duplicate_rules.cy.ts index dd053ab958aa..2bcabb943dfb 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_duplicate_rules.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_duplicate_rules.cy.ts @@ -50,78 +50,82 @@ const EXPIRED_EXCEPTION_ITEM_NAME = 'Sample exception item'; const NON_EXPIRED_EXCEPTION_ITEM_NAME = 'Sample exception item with future expiration'; -describe('Detection rules, bulk duplicate', { tags: ['@ess', '@serverless'] }, () => { - beforeEach(() => { - login(); - // Make sure persisted rules table state is cleared - resetRulesTableState(); - deleteAlertsAndRules(); - createRule( - getNewRule({ name: RULE_NAME, ...defaultRuleData, rule_id: '1', enabled: false }) - ).then((response) => { - createRuleExceptionItem(response.body.id, [ - { - description: 'Exception item for rule default exception list', - entries: [ - { - field: 'user.name', - operator: 'included', - type: 'match', - value: 'some value', - }, - ], - name: EXPIRED_EXCEPTION_ITEM_NAME, - type: 'simple', - expire_time: expiredDate, - }, - { - description: 'Exception item for rule default exception list', - entries: [ - { - field: 'user.name', - operator: 'included', - type: 'match', - value: 'some value', - }, - ], - name: NON_EXPIRED_EXCEPTION_ITEM_NAME, - type: 'simple', - expire_time: futureDate, - }, - ]); - }); - - visitRulesManagementTable(); - disableAutoRefresh(); - }); +describe( + 'Detection rules, bulk duplicate', + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, + () => { + beforeEach(() => { + login(); + // Make sure persisted rules table state is cleared + resetRulesTableState(); + deleteAlertsAndRules(); + createRule( + getNewRule({ name: RULE_NAME, ...defaultRuleData, rule_id: '1', enabled: false }) + ).then((response) => { + createRuleExceptionItem(response.body.id, [ + { + description: 'Exception item for rule default exception list', + entries: [ + { + field: 'user.name', + operator: 'included', + type: 'match', + value: 'some value', + }, + ], + name: EXPIRED_EXCEPTION_ITEM_NAME, + type: 'simple', + expire_time: expiredDate, + }, + { + description: 'Exception item for rule default exception list', + entries: [ + { + field: 'user.name', + operator: 'included', + type: 'match', + value: 'some value', + }, + ], + name: NON_EXPIRED_EXCEPTION_ITEM_NAME, + type: 'simple', + expire_time: futureDate, + }, + ]); + }); - it('Duplicates rules', () => { - selectAllRules(); - duplicateSelectedRulesWithoutExceptions(); - expectManagementTableRules([`${RULE_NAME} [Duplicate]`]); - }); + visitRulesManagementTable(); + disableAutoRefresh(); + }); - describe('With exceptions', () => { - it('Duplicates rules with expired exceptions', () => { + it('Duplicates rules', () => { selectAllRules(); - duplicateSelectedRulesWithExceptions(); + duplicateSelectedRulesWithoutExceptions(); expectManagementTableRules([`${RULE_NAME} [Duplicate]`]); - goToRuleDetailsOf(`${RULE_NAME} [Duplicate]`); - goToExceptionsTab(); - assertExceptionItemsExists(EXCEPTION_CARD_ITEM_NAME, [NON_EXPIRED_EXCEPTION_ITEM_NAME]); - viewExpiredExceptionItems(); - assertExceptionItemsExists(EXCEPTION_CARD_ITEM_NAME, [EXPIRED_EXCEPTION_ITEM_NAME]); }); - it('Duplicates rules with exceptions, excluding expired exceptions', () => { - selectAllRules(); - duplicateSelectedRulesWithNonExpiredExceptions(); - expectManagementTableRules([`${RULE_NAME} [Duplicate]`]); - goToRuleDetailsOf(`${RULE_NAME} [Duplicate]`); - goToExceptionsTab(); - assertExceptionItemsExists(EXCEPTION_CARD_ITEM_NAME, [NON_EXPIRED_EXCEPTION_ITEM_NAME]); - viewExpiredExceptionItems(); - assertNumberOfExceptionItemsExists(0); + describe('With exceptions', () => { + it('Duplicates rules with expired exceptions', () => { + selectAllRules(); + duplicateSelectedRulesWithExceptions(); + expectManagementTableRules([`${RULE_NAME} [Duplicate]`]); + goToRuleDetailsOf(`${RULE_NAME} [Duplicate]`); + goToExceptionsTab(); + assertExceptionItemsExists(EXCEPTION_CARD_ITEM_NAME, [NON_EXPIRED_EXCEPTION_ITEM_NAME]); + viewExpiredExceptionItems(); + assertExceptionItemsExists(EXCEPTION_CARD_ITEM_NAME, [EXPIRED_EXCEPTION_ITEM_NAME]); + }); + + it('Duplicates rules with exceptions, excluding expired exceptions', () => { + selectAllRules(); + duplicateSelectedRulesWithNonExpiredExceptions(); + expectManagementTableRules([`${RULE_NAME} [Duplicate]`]); + goToRuleDetailsOf(`${RULE_NAME} [Duplicate]`); + goToExceptionsTab(); + assertExceptionItemsExists(EXCEPTION_CARD_ITEM_NAME, [NON_EXPIRED_EXCEPTION_ITEM_NAME]); + viewExpiredExceptionItems(); + assertNumberOfExceptionItemsExists(0); + }); }); - }); -}); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules.cy.ts index db70fc416b8e..5583842ca944 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules.cy.ts @@ -129,646 +129,650 @@ const defaultRuleData = { timeline_id: '495ad7a7-316e-4544-8a0f-9c098daee76e', }; -describe('Detection rules, bulk edit', { tags: ['@ess', '@serverless'] }, () => { - beforeEach(() => { - login(); - preventPrebuiltRulesPackageInstallation(); // Make sure prebuilt rules aren't pulled from Fleet API - // Make sure persisted rules table state is cleared - resetRulesTableState(); - deleteAlertsAndRules(); - createRule(getNewRule({ name: RULE_NAME, ...defaultRuleData, rule_id: '1', enabled: false })); - createRule( - getEqlRule({ ...defaultRuleData, rule_id: '2', name: 'New EQL Rule', enabled: false }) - ); - createRule( - getMachineLearningRule({ - name: 'New ML Rule Test', - tags: ['test-default-tag-1', 'test-default-tag-2'], - investigation_fields: { field_names: prePopulatedInvestigationFields }, - enabled: false, - }) - ); - createRule( - getNewThreatIndicatorRule({ - ...defaultRuleData, - rule_id: '4', - name: 'Threat Indicator Rule Test', - enabled: false, - }) - ); - createRule( - getNewThresholdRule({ - ...defaultRuleData, - rule_id: '5', - name: 'Threshold Rule', - enabled: false, - }) - ); - createRule( - getNewTermsRule({ - ...defaultRuleData, - rule_id: '6', - name: 'New Terms Rule', - enabled: false, - }) - ); - - visitRulesManagementTable(); - disableAutoRefresh(); - }); +describe( + 'Detection rules, bulk edit', + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, + () => { + beforeEach(() => { + login(); + preventPrebuiltRulesPackageInstallation(); // Make sure prebuilt rules aren't pulled from Fleet API + // Make sure persisted rules table state is cleared + resetRulesTableState(); + deleteAlertsAndRules(); + createRule(getNewRule({ name: RULE_NAME, ...defaultRuleData, rule_id: '1', enabled: false })); + createRule( + getEqlRule({ ...defaultRuleData, rule_id: '2', name: 'New EQL Rule', enabled: false }) + ); + createRule( + getMachineLearningRule({ + name: 'New ML Rule Test', + tags: ['test-default-tag-1', 'test-default-tag-2'], + investigation_fields: { field_names: prePopulatedInvestigationFields }, + enabled: false, + }) + ); + createRule( + getNewThreatIndicatorRule({ + ...defaultRuleData, + rule_id: '4', + name: 'Threat Indicator Rule Test', + enabled: false, + }) + ); + createRule( + getNewThresholdRule({ + ...defaultRuleData, + rule_id: '5', + name: 'Threshold Rule', + enabled: false, + }) + ); + createRule( + getNewTermsRule({ + ...defaultRuleData, + rule_id: '6', + name: 'New Terms Rule', + enabled: false, + }) + ); - describe('Prerequisites', () => { - const PREBUILT_RULES = [ - createRuleAssetSavedObject({ - name: 'Prebuilt rule 1', - rule_id: 'rule_1', - }), - createRuleAssetSavedObject({ - name: 'Prebuilt rule 2', - rule_id: 'rule_2', - }), - ]; - - it('No rules selected', () => { - openBulkActionsMenu(); - - // when no rule selected all bulk edit options should be disabled - cy.get(TAGS_RULE_BULK_MENU_ITEM).should('be.disabled'); - cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).should('be.disabled'); - cy.get(APPLY_TIMELINE_RULE_BULK_MENU_ITEM).should('be.disabled'); + visitRulesManagementTable(); + disableAutoRefresh(); }); - // github.com/elastic/kibana/issues/179954 - it('Only prebuilt rules selected', { tags: ['@skipInServerlessMKI'] }, () => { - createAndInstallMockedPrebuiltRules(PREBUILT_RULES); + describe('Prerequisites', () => { + const PREBUILT_RULES = [ + createRuleAssetSavedObject({ + name: 'Prebuilt rule 1', + rule_id: 'rule_1', + }), + createRuleAssetSavedObject({ + name: 'Prebuilt rule 2', + rule_id: 'rule_2', + }), + ]; + + it('No rules selected', () => { + openBulkActionsMenu(); + + // when no rule selected all bulk edit options should be disabled + cy.get(TAGS_RULE_BULK_MENU_ITEM).should('be.disabled'); + cy.get(INDEX_PATTERNS_RULE_BULK_MENU_ITEM).should('be.disabled'); + cy.get(APPLY_TIMELINE_RULE_BULK_MENU_ITEM).should('be.disabled'); + }); - // select Elastic(prebuilt) rules, check if we can't proceed further, as Elastic rules are not editable - filterByElasticRules(); - selectAllRulesOnPage(); - clickApplyTimelineTemplatesMenuItem(); + // github.com/elastic/kibana/issues/179954 + it('Only prebuilt rules selected', { tags: ['@skipInServerlessMKI'] }, () => { + createAndInstallMockedPrebuiltRules(PREBUILT_RULES); - getRulesManagementTableRows().then((rows) => { - // check modal window for Elastic rule that can't be edited - checkPrebuiltRulesCannotBeModified(rows.length); + // select Elastic(prebuilt) rules, check if we can't proceed further, as Elastic rules are not editable + filterByElasticRules(); + selectAllRulesOnPage(); + clickApplyTimelineTemplatesMenuItem(); - // the confirm button closes modal - cy.get(MODAL_CONFIRMATION_BTN).should('have.text', 'Close').click(); - cy.get(MODAL_CONFIRMATION_BODY).should('not.exist'); + getRulesManagementTableRows().then((rows) => { + // check modal window for Elastic rule that can't be edited + checkPrebuiltRulesCannotBeModified(rows.length); + + // the confirm button closes modal + cy.get(MODAL_CONFIRMATION_BTN).should('have.text', 'Close').click(); + cy.get(MODAL_CONFIRMATION_BODY).should('not.exist'); + }); }); - }); - // https://github.com/elastic/kibana/issues/179955 - it( - 'Prebuilt and custom rules selected: user proceeds with custom rules editing', - { tags: ['@skipInServerlessMKI'] }, - () => { - getRulesManagementTableRows().then((existedRulesRows) => { + // https://github.com/elastic/kibana/issues/179955 + it( + 'Prebuilt and custom rules selected: user proceeds with custom rules editing', + { tags: ['@skipInServerlessMKI'] }, + () => { + getRulesManagementTableRows().then((existedRulesRows) => { + createAndInstallMockedPrebuiltRules(PREBUILT_RULES); + + // modal window should show how many rules can be edit, how many not + selectAllRules(); + clickAddTagsMenuItem(); + + waitForMixedRulesBulkEditModal(existedRulesRows.length); + + getAvailablePrebuiltRulesCount().then((availablePrebuiltRulesCount) => { + checkPrebuiltRulesCannotBeModified(availablePrebuiltRulesCount); + }); + + // user can proceed with custom rule editing + cy.get(MODAL_CONFIRMATION_BTN) + .should('have.text', `Edit ${existedRulesRows.length} custom rules`) + .click(); + + // action should finish + typeTags(['test-tag']); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: existedRulesRows.length }); + }); + } + ); + + // https://github.com/elastic/kibana/issues/179956 + it( + 'Prebuilt and custom rules selected: user cancels action', + { tags: ['@skipInServerlessMKI'] }, + () => { createAndInstallMockedPrebuiltRules(PREBUILT_RULES); - // modal window should show how many rules can be edit, how many not - selectAllRules(); - clickAddTagsMenuItem(); + getRulesManagementTableRows().then((rows) => { + // modal window should show how many rules can be edit, how many not + selectAllRules(); + clickAddTagsMenuItem(); + waitForMixedRulesBulkEditModal(rows.length); - waitForMixedRulesBulkEditModal(existedRulesRows.length); + checkPrebuiltRulesCannotBeModified(PREBUILT_RULES.length); - getAvailablePrebuiltRulesCount().then((availablePrebuiltRulesCount) => { - checkPrebuiltRulesCannotBeModified(availablePrebuiltRulesCount); + // user cancels action and modal disappears + cancelConfirmationModal(); }); + } + ); - // user can proceed with custom rule editing - cy.get(MODAL_CONFIRMATION_BTN) - .should('have.text', `Edit ${existedRulesRows.length} custom rules`) - .click(); + it('should not lose rules selection after edit action', () => { + const rulesToUpdate = [RULE_NAME, 'New EQL Rule', 'New Terms Rule'] as const; + // Switch to 5 rules per page, to have few pages in pagination(ideal way to test auto refresh and selection of few items) + setRowsPerPageTo(5); + // and make the rules order isn't changing (set sorting by rule name) over time if rules are run + sortByTableColumn('Rule'); + selectRulesByName(rulesToUpdate); - // action should finish - typeTags(['test-tag']); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: existedRulesRows.length }); - }); - } - ); + // open add tags form and add 2 new tags + openBulkEditAddTagsForm(); + typeTags(['new-tag-1']); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rulesToUpdate.length }); + + testMultipleSelectedRulesLabel(rulesToUpdate.length); + // check if first four(rulesCount) rules still selected and tags are updated + for (const ruleName of rulesToUpdate) { + getRuleRow(ruleName).find(EUI_CHECKBOX).should('be.checked'); + getRuleRow(ruleName) + .find(RULES_TAGS_POPOVER_BTN) + .each(($el) => { + testTagsBadge($el, prePopulatedTags.concat(['new-tag-1'])); + }); + } + }); + }); - // https://github.com/elastic/kibana/issues/179956 - it( - 'Prebuilt and custom rules selected: user cancels action', - { tags: ['@skipInServerlessMKI'] }, - () => { - createAndInstallMockedPrebuiltRules(PREBUILT_RULES); + describe('Tags actions', () => { + it('Display list of tags in tags select', () => { + selectAllRules(); - getRulesManagementTableRows().then((rows) => { - // modal window should show how many rules can be edit, how many not - selectAllRules(); - clickAddTagsMenuItem(); - waitForMixedRulesBulkEditModal(rows.length); + openBulkEditAddTagsForm(); + openTagsSelect(); - checkPrebuiltRulesCannotBeModified(PREBUILT_RULES.length); + cy.get(EUI_FILTER_SELECT_ITEM) + .should('have.length', prePopulatedTags.length) + .each(($el, index) => { + cy.wrap($el).should('have.text', prePopulatedTags[index]); + }); + }); - // user cancels action and modal disappears - cancelConfirmationModal(); - }); - } - ); + it('Add tags to custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const tagsToBeAdded = ['tag-to-add-1', 'tag-to-add-2']; + const resultingTags = [...prePopulatedTags, ...tagsToBeAdded]; - it('should not lose rules selection after edit action', () => { - const rulesToUpdate = [RULE_NAME, 'New EQL Rule', 'New Terms Rule'] as const; - // Switch to 5 rules per page, to have few pages in pagination(ideal way to test auto refresh and selection of few items) - setRowsPerPageTo(5); - // and make the rules order isn't changing (set sorting by rule name) over time if rules are run - sortByTableColumn('Rule'); - selectRulesByName(rulesToUpdate); - - // open add tags form and add 2 new tags - openBulkEditAddTagsForm(); - typeTags(['new-tag-1']); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rulesToUpdate.length }); - - testMultipleSelectedRulesLabel(rulesToUpdate.length); - // check if first four(rulesCount) rules still selected and tags are updated - for (const ruleName of rulesToUpdate) { - getRuleRow(ruleName).find(EUI_CHECKBOX).should('be.checked'); - getRuleRow(ruleName) - .find(RULES_TAGS_POPOVER_BTN) - .each(($el) => { - testTagsBadge($el, prePopulatedTags.concat(['new-tag-1'])); - }); - } - }); - }); + // check if only pre-populated tags exist in the tags filter + checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); - describe('Tags actions', () => { - it('Display list of tags in tags select', () => { - selectAllRules(); + selectAllRules(); - openBulkEditAddTagsForm(); - openTagsSelect(); + // open add tags form and add 2 new tags + openBulkEditAddTagsForm(); + typeTags(tagsToBeAdded); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - cy.get(EUI_FILTER_SELECT_ITEM) - .should('have.length', prePopulatedTags.length) - .each(($el, index) => { - cy.wrap($el).should('have.text', prePopulatedTags[index]); + // check if all rules have been updated with new tags + testAllTagsBadges(resultingTags); + + // check that new tags were added to tags filter + // tags in tags filter sorted alphabetically + const resultingTagsInFilter = [...resultingTags].sort(); + checkTagsInTagsFilter(resultingTagsInFilter, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); }); - }); + }); - it('Add tags to custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const tagsToBeAdded = ['tag-to-add-1', 'tag-to-add-2']; - const resultingTags = [...prePopulatedTags, ...tagsToBeAdded]; + it('Display success toast after adding tags', () => { + getRulesManagementTableRows().then((rows) => { + const tagsToBeAdded = ['tag-to-add-1', 'tag-to-add-2']; - // check if only pre-populated tags exist in the tags filter - checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + // check if only pre-populated tags exist in the tags filter + checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); - selectAllRules(); + selectAllRules(); - // open add tags form and add 2 new tags - openBulkEditAddTagsForm(); - typeTags(tagsToBeAdded); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + // open add tags form and add 2 new tags + openBulkEditAddTagsForm(); + typeTags(tagsToBeAdded); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); + }); + }); - // check if all rules have been updated with new tags - testAllTagsBadges(resultingTags); + it('Overwrite tags in custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const tagsToOverwrite = ['overwrite-tag-1']; - // check that new tags were added to tags filter - // tags in tags filter sorted alphabetically - const resultingTagsInFilter = [...resultingTags].sort(); - checkTagsInTagsFilter(resultingTagsInFilter, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); - }); - }); + // check if only pre-populated tags exist in the tags filter + checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); - it('Display success toast after adding tags', () => { - getRulesManagementTableRows().then((rows) => { - const tagsToBeAdded = ['tag-to-add-1', 'tag-to-add-2']; + selectAllRules(); - // check if only pre-populated tags exist in the tags filter - checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + // open add tags form, check overwrite tags and warning message, type tags + openBulkEditAddTagsForm(); + checkOverwriteTagsCheckbox(); - selectAllRules(); + cy.get(RULES_BULK_EDIT_TAGS_WARNING).should( + 'have.text', + `You’re about to overwrite tags for ${rows.length} selected rules, press Save to apply changes.` + ); - // open add tags form and add 2 new tags - openBulkEditAddTagsForm(); - typeTags(tagsToBeAdded); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); - }); - }); + typeTags(tagsToOverwrite); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - it('Overwrite tags in custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const tagsToOverwrite = ['overwrite-tag-1']; + // check if all rules have been updated with new tags + testAllTagsBadges(tagsToOverwrite); - // check if only pre-populated tags exist in the tags filter - checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + // check that only new tags are in the tag filter + checkTagsInTagsFilter(tagsToOverwrite, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + }); + }); - selectAllRules(); + it('Delete tags from custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const tagsToDelete = prePopulatedTags.slice(0, 1); + const resultingTags = prePopulatedTags.slice(1); - // open add tags form, check overwrite tags and warning message, type tags - openBulkEditAddTagsForm(); - checkOverwriteTagsCheckbox(); + // check if only pre-populated tags exist in the tags filter + checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); - cy.get(RULES_BULK_EDIT_TAGS_WARNING).should( - 'have.text', - `You’re about to overwrite tags for ${rows.length} selected rules, press Save to apply changes.` - ); + selectAllRules(); - typeTags(tagsToOverwrite); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + // open add tags form, check overwrite tags, type tags + openBulkEditDeleteTagsForm(); + typeTags(tagsToDelete); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if all rules have been updated with new tags - testAllTagsBadges(tagsToOverwrite); + // check tags has been removed from all rules + testAllTagsBadges(resultingTags); - // check that only new tags are in the tag filter - checkTagsInTagsFilter(tagsToOverwrite, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + // check that tags were removed from the tag filter + checkTagsInTagsFilter(resultingTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + }); }); }); - it('Delete tags from custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const tagsToDelete = prePopulatedTags.slice(0, 1); - const resultingTags = prePopulatedTags.slice(1); + describe('Index patterns', () => { + it('Index pattern action applied to custom rules, including machine learning: user proceeds with edit of custom non machine learning rule', () => { + getRulesManagementTableRows().then((rows) => { + const indexPattersToBeAdded = ['index-to-add-1-*', 'index-to-add-2-*']; + const resultingIndexPatterns = [...prePopulatedIndexPatterns, ...indexPattersToBeAdded]; - // check if only pre-populated tags exist in the tags filter - checkTagsInTagsFilter(prePopulatedTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + selectAllRules(); + clickAddIndexPatternsMenuItem(); - selectAllRules(); + // confirm editing custom rules, that are not Machine Learning + checkMachineLearningRulesCannotBeModified(expectedNumberOfMachineLearningRulesToBeEdited); + cy.get(MODAL_CONFIRMATION_BTN).click(); - // open add tags form, check overwrite tags, type tags - openBulkEditDeleteTagsForm(); - typeTags(tagsToDelete); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + typeIndexPatterns(indexPattersToBeAdded); + submitBulkEditForm(); - // check tags has been removed from all rules - testAllTagsBadges(resultingTags); + waitForBulkEditActionToFinish({ + updatedCount: rows.length - expectedNumberOfMachineLearningRulesToBeEdited, + }); - // check that tags were removed from the tag filter - checkTagsInTagsFilter(resultingTags, EUI_SELECTABLE_LIST_ITEM_SR_TEXT); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + hasIndexPatterns(resultingIndexPatterns.join('')); + }); }); - }); - }); - - describe('Index patterns', () => { - it('Index pattern action applied to custom rules, including machine learning: user proceeds with edit of custom non machine learning rule', () => { - getRulesManagementTableRows().then((rows) => { - const indexPattersToBeAdded = ['index-to-add-1-*', 'index-to-add-2-*']; - const resultingIndexPatterns = [...prePopulatedIndexPatterns, ...indexPattersToBeAdded]; + it('Index pattern action applied to custom rules, including machine learning: user cancels action', () => { selectAllRules(); clickAddIndexPatternsMenuItem(); // confirm editing custom rules, that are not Machine Learning checkMachineLearningRulesCannotBeModified(expectedNumberOfMachineLearningRulesToBeEdited); - cy.get(MODAL_CONFIRMATION_BTN).click(); - - typeIndexPatterns(indexPattersToBeAdded); - submitBulkEditForm(); - - waitForBulkEditActionToFinish({ - updatedCount: rows.length - expectedNumberOfMachineLearningRulesToBeEdited, - }); - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - hasIndexPatterns(resultingIndexPatterns.join('')); + // user cancels action and modal disappears + cancelConfirmationModal(); }); - }); - it('Index pattern action applied to custom rules, including machine learning: user cancels action', () => { - selectAllRules(); - clickAddIndexPatternsMenuItem(); + it('Add index patterns to custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const indexPattersToBeAdded = ['index-to-add-1-*', 'index-to-add-2-*']; + const resultingIndexPatterns = [...prePopulatedIndexPatterns, ...indexPattersToBeAdded]; + + // select only rules that are not ML + selectRulesByName([ + RULE_NAME, + 'New EQL Rule', + 'Threat Indicator Rule Test', + 'Threshold Rule', + 'New Terms Rule', + ]); + + openBulkEditAddIndexPatternsForm(); + typeIndexPatterns(indexPattersToBeAdded); + submitBulkEditForm(); - // confirm editing custom rules, that are not Machine Learning - checkMachineLearningRulesCannotBeModified(expectedNumberOfMachineLearningRulesToBeEdited); + waitForBulkEditActionToFinish({ + updatedCount: rows.length - expectedNumberOfMachineLearningRulesToBeEdited, + }); - // user cancels action and modal disappears - cancelConfirmationModal(); - }); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + hasIndexPatterns(resultingIndexPatterns.join('')); + }); + }); - it('Add index patterns to custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const indexPattersToBeAdded = ['index-to-add-1-*', 'index-to-add-2-*']; - const resultingIndexPatterns = [...prePopulatedIndexPatterns, ...indexPattersToBeAdded]; + it('Display success toast after editing the index pattern', () => { + getRulesManagementTableRows().then((rows) => { + const indexPattersToBeAdded = ['index-to-add-1-*', 'index-to-add-2-*']; + + // select only rules that are not ML + selectRulesByName([ + RULE_NAME, + 'New EQL Rule', + 'Threat Indicator Rule Test', + 'Threshold Rule', + 'New Terms Rule', + ]); + + openBulkEditAddIndexPatternsForm(); + typeIndexPatterns(indexPattersToBeAdded); + submitBulkEditForm(); - // select only rules that are not ML - selectRulesByName([ + waitForBulkEditActionToFinish({ + updatedCount: rows.length - expectedNumberOfMachineLearningRulesToBeEdited, + }); + }); + }); + + it('Overwrite index patterns in custom rules', () => { + const rulesToSelect = [ RULE_NAME, 'New EQL Rule', 'Threat Indicator Rule Test', 'Threshold Rule', 'New Terms Rule', - ]); + ] as const; + const indexPattersToWrite = ['index-to-write-1-*', 'index-to-write-2-*']; + + // select only rules that are not ML + selectRulesByName(rulesToSelect); openBulkEditAddIndexPatternsForm(); - typeIndexPatterns(indexPattersToBeAdded); + + // check overwrite index patterns checkbox, ensure warning message is displayed and type index patterns + checkOverwriteIndexPatternsCheckbox(); + cy.get(RULES_BULK_EDIT_INDEX_PATTERNS_WARNING).should( + 'have.text', + `You’re about to overwrite index patterns for ${rulesToSelect.length} selected rules, press Save to apply changes.` + ); + + typeIndexPatterns(indexPattersToWrite); submitBulkEditForm(); - waitForBulkEditActionToFinish({ - updatedCount: rows.length - expectedNumberOfMachineLearningRulesToBeEdited, - }); + waitForBulkEditActionToFinish({ updatedCount: rulesToSelect.length }); // check if rule has been updated goToRuleDetailsOf(RULE_NAME); - hasIndexPatterns(resultingIndexPatterns.join('')); + hasIndexPatterns(indexPattersToWrite.join('')); }); - }); - it('Display success toast after editing the index pattern', () => { - getRulesManagementTableRows().then((rows) => { - const indexPattersToBeAdded = ['index-to-add-1-*', 'index-to-add-2-*']; - - // select only rules that are not ML - selectRulesByName([ + it('Delete index patterns from custom rules', () => { + const rulesToSelect = [ RULE_NAME, 'New EQL Rule', 'Threat Indicator Rule Test', 'Threshold Rule', 'New Terms Rule', - ]); - - openBulkEditAddIndexPatternsForm(); - typeIndexPatterns(indexPattersToBeAdded); - submitBulkEditForm(); + ] as const; + const indexPatternsToDelete = prePopulatedIndexPatterns.slice(0, 1); + const resultingIndexPatterns = prePopulatedIndexPatterns.slice(1); - waitForBulkEditActionToFinish({ - updatedCount: rows.length - expectedNumberOfMachineLearningRulesToBeEdited, - }); - }); - }); + // select only not ML rules + selectRulesByName(rulesToSelect); - it('Overwrite index patterns in custom rules', () => { - const rulesToSelect = [ - RULE_NAME, - 'New EQL Rule', - 'Threat Indicator Rule Test', - 'Threshold Rule', - 'New Terms Rule', - ] as const; - const indexPattersToWrite = ['index-to-write-1-*', 'index-to-write-2-*']; - - // select only rules that are not ML - selectRulesByName(rulesToSelect); - - openBulkEditAddIndexPatternsForm(); - - // check overwrite index patterns checkbox, ensure warning message is displayed and type index patterns - checkOverwriteIndexPatternsCheckbox(); - cy.get(RULES_BULK_EDIT_INDEX_PATTERNS_WARNING).should( - 'have.text', - `You’re about to overwrite index patterns for ${rulesToSelect.length} selected rules, press Save to apply changes.` - ); - - typeIndexPatterns(indexPattersToWrite); - submitBulkEditForm(); + openBulkEditDeleteIndexPatternsForm(); + typeIndexPatterns(indexPatternsToDelete); + submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rulesToSelect.length }); + waitForBulkEditActionToFinish({ updatedCount: rulesToSelect.length }); - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - hasIndexPatterns(indexPattersToWrite.join('')); - }); - - it('Delete index patterns from custom rules', () => { - const rulesToSelect = [ - RULE_NAME, - 'New EQL Rule', - 'Threat Indicator Rule Test', - 'Threshold Rule', - 'New Terms Rule', - ] as const; - const indexPatternsToDelete = prePopulatedIndexPatterns.slice(0, 1); - const resultingIndexPatterns = prePopulatedIndexPatterns.slice(1); - - // select only not ML rules - selectRulesByName(rulesToSelect); - - openBulkEditDeleteIndexPatternsForm(); - typeIndexPatterns(indexPatternsToDelete); - submitBulkEditForm(); - - waitForBulkEditActionToFinish({ updatedCount: rulesToSelect.length }); - - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - hasIndexPatterns(resultingIndexPatterns.join('')); - }); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + hasIndexPatterns(resultingIndexPatterns.join('')); + }); - it('Delete all index patterns from custom rules', () => { - const rulesToSelect = [ - RULE_NAME, - 'New EQL Rule', - 'Threat Indicator Rule Test', - 'Threshold Rule', - 'New Terms Rule', - ] as const; + it('Delete all index patterns from custom rules', () => { + const rulesToSelect = [ + RULE_NAME, + 'New EQL Rule', + 'Threat Indicator Rule Test', + 'Threshold Rule', + 'New Terms Rule', + ] as const; - // select only rules that are not ML - selectRulesByName(rulesToSelect); + // select only rules that are not ML + selectRulesByName(rulesToSelect); - openBulkEditDeleteIndexPatternsForm(); - typeIndexPatterns(prePopulatedIndexPatterns); - submitBulkEditForm(); + openBulkEditDeleteIndexPatternsForm(); + typeIndexPatterns(prePopulatedIndexPatterns); + submitBulkEditForm(); - // error toast should be displayed that that rules edit failed - waitForBulkEditActionToFinish({ failedCount: rulesToSelect.length }); + // error toast should be displayed that that rules edit failed + waitForBulkEditActionToFinish({ failedCount: rulesToSelect.length }); - // on error toast button click display error that index patterns can't be empty - clickErrorToastBtn(); - cy.contains(MODAL_ERROR_BODY, "Index patterns can't be empty"); + // on error toast button click display error that index patterns can't be empty + clickErrorToastBtn(); + cy.contains(MODAL_ERROR_BODY, "Index patterns can't be empty"); + }); }); - }); - describe('Investigation fields actions', () => { - it('Add investigation fields to custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const fieldsToBeAdded = ['source.ip', 'destination.ip']; - const resultingFields = [...prePopulatedInvestigationFields, ...fieldsToBeAdded]; + describe('Investigation fields actions', () => { + it('Add investigation fields to custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const fieldsToBeAdded = ['source.ip', 'destination.ip']; + const resultingFields = [...prePopulatedInvestigationFields, ...fieldsToBeAdded]; - selectAllRules(); + selectAllRules(); - // open add custom highlighted fields form and add 2 new fields - openBulkEditAddInvestigationFieldsForm(); - typeInvestigationFields(fieldsToBeAdded); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + // open add custom highlighted fields form and add 2 new fields + openBulkEditAddInvestigationFieldsForm(); + typeInvestigationFields(fieldsToBeAdded); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - hasInvestigationFields(resultingFields.join('')); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + hasInvestigationFields(resultingFields.join('')); + }); }); - }); - it('Overwrite investigation fields in custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const fieldsToOverwrite = ['source.ip']; + it('Overwrite investigation fields in custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const fieldsToOverwrite = ['source.ip']; - selectAllRules(); + selectAllRules(); - // open add tags form, check overwrite tags and warning message, type tags - openBulkEditAddInvestigationFieldsForm(); - checkOverwriteInvestigationFieldsCheckbox(); + // open add tags form, check overwrite tags and warning message, type tags + openBulkEditAddInvestigationFieldsForm(); + checkOverwriteInvestigationFieldsCheckbox(); - cy.get(RULES_BULK_EDIT_INVESTIGATION_FIELDS_WARNING).should( - 'have.text', - `You’re about to overwrite custom highlighted fields for the ${rows.length} rules you selected. To apply and save the changes, click Save.` - ); + cy.get(RULES_BULK_EDIT_INVESTIGATION_FIELDS_WARNING).should( + 'have.text', + `You’re about to overwrite custom highlighted fields for the ${rows.length} rules you selected. To apply and save the changes, click Save.` + ); - typeInvestigationFields(fieldsToOverwrite); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + typeInvestigationFields(fieldsToOverwrite); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - hasInvestigationFields(fieldsToOverwrite.join('')); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + hasInvestigationFields(fieldsToOverwrite.join('')); + }); }); - }); - it('Delete investigation fields from custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const fieldsToDelete = prePopulatedInvestigationFields.slice(0, 1); - const resultingFields = prePopulatedInvestigationFields.slice(1); + it('Delete investigation fields from custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const fieldsToDelete = prePopulatedInvestigationFields.slice(0, 1); + const resultingFields = prePopulatedInvestigationFields.slice(1); - selectAllRules(); + selectAllRules(); - // open add tags form, check overwrite tags, type tags - openBulkEditDeleteInvestigationFieldsForm(); - typeInvestigationFields(fieldsToDelete); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + // open add tags form, check overwrite tags, type tags + openBulkEditDeleteInvestigationFieldsForm(); + typeInvestigationFields(fieldsToDelete); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - hasInvestigationFields(resultingFields.join('')); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + hasInvestigationFields(resultingFields.join('')); + }); }); - }); - it('Delete all investigation fields from custom rules', () => { - getRulesManagementTableRows().then((rows) => { - selectAllRules(); + it('Delete all investigation fields from custom rules', () => { + getRulesManagementTableRows().then((rows) => { + selectAllRules(); - openBulkEditDeleteInvestigationFieldsForm(); - typeInvestigationFields(prePopulatedInvestigationFields); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + openBulkEditDeleteInvestigationFieldsForm(); + typeInvestigationFields(prePopulatedInvestigationFields); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if rule has been updated - goToRuleDetailsOf(RULE_NAME); - assertDetailsNotExist(INVESTIGATION_FIELDS_DETAILS); + // check if rule has been updated + goToRuleDetailsOf(RULE_NAME); + assertDetailsNotExist(INVESTIGATION_FIELDS_DETAILS); + }); }); }); - }); - describe('Timeline templates', () => { - beforeEach(() => { - loadPrepackagedTimelineTemplates(); - }); + describe('Timeline templates', () => { + beforeEach(() => { + loadPrepackagedTimelineTemplates(); + }); - it('Apply timeline template to custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const timelineTemplateName = 'Generic Endpoint Timeline'; + it('Apply timeline template to custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const timelineTemplateName = 'Generic Endpoint Timeline'; - selectAllRules(); + selectAllRules(); - // open Timeline template form, check warning, select timeline template - clickApplyTimelineTemplatesMenuItem(); - cy.get(RULES_BULK_EDIT_TIMELINE_TEMPLATES_WARNING).contains( - `You're about to apply changes to ${rows.length} selected rules. If you previously applied Timeline templates to these rules, they will be overwritten or (if you select 'None') reset to none.` - ); - selectTimelineTemplate(timelineTemplateName); + // open Timeline template form, check warning, select timeline template + clickApplyTimelineTemplatesMenuItem(); + cy.get(RULES_BULK_EDIT_TIMELINE_TEMPLATES_WARNING).contains( + `You're about to apply changes to ${rows.length} selected rules. If you previously applied Timeline templates to these rules, they will be overwritten or (if you select 'None') reset to none.` + ); + selectTimelineTemplate(timelineTemplateName); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if timeline template has been updated to selected one - goToRuleDetailsOf(RULE_NAME); - getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', timelineTemplateName); + // check if timeline template has been updated to selected one + goToRuleDetailsOf(RULE_NAME); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', timelineTemplateName); + }); }); - }); - it('Reset timeline template to None for custom rules', () => { - getRulesManagementTableRows().then((rows) => { - const noneTimelineTemplate = 'None'; + it('Reset timeline template to None for custom rules', () => { + getRulesManagementTableRows().then((rows) => { + const noneTimelineTemplate = 'None'; - selectAllRules(); + selectAllRules(); - // open Timeline template form, submit form without picking timeline template as None is selected by default - clickApplyTimelineTemplatesMenuItem(); + // open Timeline template form, submit form without picking timeline template as None is selected by default + clickApplyTimelineTemplatesMenuItem(); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - // check if timeline template has been updated to selected one, by opening rule that have had timeline prior to editing - goToRuleDetailsOf(RULE_NAME); - getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', noneTimelineTemplate); + // check if timeline template has been updated to selected one, by opening rule that have had timeline prior to editing + goToRuleDetailsOf(RULE_NAME); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', noneTimelineTemplate); + }); }); }); - }); - describe('Schedule', () => { - it('Default values are applied to bulk edit schedule fields', () => { - getRulesManagementTableRows().then((rows) => { - selectAllRules(); - clickUpdateScheduleMenuItem(); + describe('Schedule', () => { + it('Default values are applied to bulk edit schedule fields', () => { + getRulesManagementTableRows().then((rows) => { + selectAllRules(); + clickUpdateScheduleMenuItem(); - assertUpdateScheduleWarningExists(rows.length); + assertUpdateScheduleWarningExists(rows.length); - assertDefaultValuesAreAppliedToScheduleFields({ - interval: 5, - lookback: 1, + assertDefaultValuesAreAppliedToScheduleFields({ + interval: 5, + lookback: 1, + }); }); }); - }); - it('Updates schedule for custom rules', () => { - getRulesManagementTableRows().then((rows) => { - selectAllRules(); - clickUpdateScheduleMenuItem(); + it('Updates schedule for custom rules', () => { + getRulesManagementTableRows().then((rows) => { + selectAllRules(); + clickUpdateScheduleMenuItem(); - assertUpdateScheduleWarningExists(rows.length); + assertUpdateScheduleWarningExists(rows.length); - typeScheduleInterval('20'); - setScheduleIntervalTimeUnit('Hours'); + typeScheduleInterval('20'); + setScheduleIntervalTimeUnit('Hours'); - typeScheduleLookback('10'); - setScheduleLookbackTimeUnit('Minutes'); + typeScheduleLookback('10'); + setScheduleLookbackTimeUnit('Minutes'); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - goToRuleDetailsOf(RULE_NAME); + goToRuleDetailsOf(RULE_NAME); - assertRuleScheduleValues({ - interval: '20h', - lookback: '10m', + assertRuleScheduleValues({ + interval: '20h', + lookback: '10m', + }); }); }); - }); - it('Validates invalid inputs when scheduling for custom rules', () => { - getRulesManagementTableRows().then((rows) => { - selectAllRules(); - clickUpdateScheduleMenuItem(); + it('Validates invalid inputs when scheduling for custom rules', () => { + getRulesManagementTableRows().then((rows) => { + selectAllRules(); + clickUpdateScheduleMenuItem(); - // Validate invalid values are corrected to minimumValue - for 0 and negative values - typeScheduleInterval('0'); - setScheduleIntervalTimeUnit('Hours'); + // Validate invalid values are corrected to minimumValue - for 0 and negative values + typeScheduleInterval('0'); + setScheduleIntervalTimeUnit('Hours'); - typeScheduleLookback('-5'); - setScheduleLookbackTimeUnit('Seconds'); + typeScheduleLookback('-5'); + setScheduleLookbackTimeUnit('Seconds'); - submitBulkEditForm(); - waitForBulkEditActionToFinish({ updatedCount: rows.length }); + submitBulkEditForm(); + waitForBulkEditActionToFinish({ updatedCount: rows.length }); - goToRuleDetailsOf(RULE_NAME); + goToRuleDetailsOf(RULE_NAME); - assertRuleScheduleValues({ - interval: '1h', - lookback: '1s', + assertRuleScheduleValues({ + interval: '1h', + lookback: '1s', + }); }); }); }); - }); -}); + } +); // ES|QL rule type is supported only in ESS environment // Adding 2 use cases only for this rule type, while it is disabled on serverless diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_data_view.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_data_view.cy.ts index 3b9ddf73ad3c..20c8f50ea21b 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_data_view.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/bulk_actions/bulk_edit_rules_data_view.cy.ts @@ -59,7 +59,7 @@ const expectedIndexPatterns = ['index-1-*', 'index-2-*']; describe( 'Bulk editing index patterns of rules with a data view only', - { tags: ['@ess', '@serverless'] }, + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { const TESTED_CUSTOM_QUERY_RULE_DATA = getNewRule({ index: undefined, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/deletion/rule_delete.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/deletion/rule_delete.cy.ts index 4c9168744920..8cb25f60b513 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/deletion/rule_delete.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/deletion/rule_delete.cy.ts @@ -21,7 +21,7 @@ import { createRule, findAllRules } from '../../../../../tasks/api_calls/rules'; import { deleteAlertsAndRules } from '../../../../../tasks/api_calls/common'; import { login } from '../../../../../tasks/login'; -describe('Rule deletion', { tags: ['@ess', '@serverless'] }, () => { +describe('Rule deletion', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { const testRules = [ getNewRule({ rule_id: 'rule1', name: 'Rule 1', enabled: false }), getNewRule({ rule_id: 'rule2', name: 'Rule 2', enabled: false }), diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/export_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/export_rule.cy.ts index cc270d41c10a..855c4e17afe0 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/export_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/export_rule.cy.ts @@ -52,7 +52,7 @@ const prebuiltRules = Array.from(Array(7)).map((_, i) => { }); }); -describe('Export rules', { tags: ['@ess', '@serverless'] }, () => { +describe('Export rules', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { const downloadsFolder = Cypress.config('downloadsFolder'); beforeEach(() => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/import_rules.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/import_rules.cy.ts index 4b8fe5b5312b..0cd0a0a687e4 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/import_rules.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/import_export/import_rules.cy.ts @@ -20,7 +20,7 @@ import { RULES_MANAGEMENT_URL } from '../../../../../urls/rules_management'; const RULES_TO_IMPORT_FILENAME = 'cypress/fixtures/7_16_rules.ndjson'; const IMPORTED_EXCEPTION_ID = 'b8dfd17f-1e11-41b0-ae7e-9e7f8237de49'; -describe('Import rules', { tags: ['@ess', '@serverless'] }, () => { +describe('Import rules', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { beforeEach(() => { login(); deleteAlertsAndRules(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts index aa42d7bea0f5..270a9146f65a 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_actions/snoozing/rule_snoozing.cy.ts @@ -43,7 +43,7 @@ import { TOOLTIP } from '../../../../../screens/common'; const RULES_TO_IMPORT_FILENAME = 'cypress/fixtures/7_16_rules.ndjson'; -describe('rule snoozing', { tags: ['@ess', '@serverless'] }, () => { +describe('rule snoozing', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { beforeEach(() => { login(); deleteAlertsAndRules(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/common_flows.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/common_flows.cy.ts index e881fd76860d..6aded7a9a1f8 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/common_flows.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/common_flows.cy.ts @@ -53,129 +53,135 @@ import { ruleDetailsUrl } from '../../../../urls/rule_details'; // This test is meant to test all common aspects of the rule details page that should function // the same regardless of rule type. For any rule type specific functionalities, please include // them in the relevant /rule_details/[RULE_TYPE].cy.ts test. -describe('Common rule detail flows', { tags: ['@ess', '@serverless'] }, function () { - beforeEach(() => { - login(); - deleteAlertsAndRules(); - deleteConnectors(); - createTimeline().then((response) => { - createRule({ - ...getNewRule({ - rule_id: 'rulez', - description: ruleFields.ruleDescription, - name: ruleFields.ruleName, - severity: ruleFields.ruleSeverity, - risk_score: ruleFields.riskScore, - tags: ruleFields.ruleTags, - false_positives: ruleFields.falsePositives, - note: ruleFields.investigationGuide, - timeline_id: response.body.data.persistTimeline.timeline.savedObjectId, - timeline_title: response.body.data.persistTimeline.timeline.title ?? '', - interval: ruleFields.ruleInterval, - from: `now-1h`, - query: ruleFields.ruleQuery, - enabled: false, - max_signals: 500, - threat: [ - { - ...ruleFields.threat, - technique: [ - { - ...ruleFields.threatTechnique, - subtechnique: [ruleFields.threatSubtechnique], - }, - ], - }, - ], - }), - }).then((rule) => { - cy.wrap(rule.body.id).as('ruleId'); +describe( + 'Common rule detail flows', + { tags: ['@ess', '@serverless', '@serverlessQA'] }, + function () { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + deleteConnectors(); + createTimeline().then((response) => { + createRule({ + ...getNewRule({ + rule_id: 'rulez', + description: ruleFields.ruleDescription, + name: ruleFields.ruleName, + severity: ruleFields.ruleSeverity, + risk_score: ruleFields.riskScore, + tags: ruleFields.ruleTags, + false_positives: ruleFields.falsePositives, + note: ruleFields.investigationGuide, + timeline_id: response.body.data.persistTimeline.timeline.savedObjectId, + timeline_title: response.body.data.persistTimeline.timeline.title ?? '', + interval: ruleFields.ruleInterval, + from: `now-1h`, + query: ruleFields.ruleQuery, + enabled: false, + max_signals: 500, + threat: [ + { + ...ruleFields.threat, + technique: [ + { + ...ruleFields.threatTechnique, + subtechnique: [ruleFields.threatSubtechnique], + }, + ], + }, + ], + }), + }).then((rule) => { + cy.wrap(rule.body.id).as('ruleId'); + }); }); }); - }); - it('Only modifies rule active status on enable/disable', function () { - visit(ruleDetailsUrl(this.ruleId)); - cy.get(RULE_NAME_HEADER).should('contain', ruleFields.ruleName); + it('Only modifies rule active status on enable/disable', function () { + visit(ruleDetailsUrl(this.ruleId)); + cy.get(RULE_NAME_HEADER).should('contain', ruleFields.ruleName); - cy.intercept('POST', '/api/detection_engine/rules/_bulk_action?dry_run=false').as( - 'bulk_action' - ); - cy.get(RULE_SWITCH).should('be.visible'); - cy.get(RULE_SWITCH).click(); - cy.wait('@bulk_action').then(({ response }) => { - cy.wrap(response?.statusCode).should('eql', 200); - cy.wrap(response?.body.attributes.results.updated[0].max_signals).should( - 'eql', - getExistingRule().max_signals + cy.intercept('POST', '/api/detection_engine/rules/_bulk_action?dry_run=false').as( + 'bulk_action' ); - cy.wrap(response?.body.attributes.results.updated[0].enabled).should('eql', true); + cy.get(RULE_SWITCH).should('be.visible'); + cy.get(RULE_SWITCH).click(); + cy.wait('@bulk_action').then(({ response }) => { + cy.wrap(response?.statusCode).should('eql', 200); + cy.wrap(response?.body.attributes.results.updated[0].max_signals).should( + 'eql', + getExistingRule().max_signals + ); + cy.wrap(response?.body.attributes.results.updated[0].enabled).should('eql', true); + }); }); - }); - it('Displays rule details', function () { - visit(ruleDetailsUrl(this.ruleId)); - cy.get(RULE_NAME_HEADER).should('contain', ruleFields.ruleName); - cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', ruleFields.ruleDescription); - cy.get(ABOUT_DETAILS).within(() => { - getDetails(SEVERITY_DETAILS) - .invoke('text') - .then((text) => { - cy.wrap(text.toLowerCase()).should('equal', ruleFields.ruleSeverity); + it('Displays rule details', function () { + visit(ruleDetailsUrl(this.ruleId)); + cy.get(RULE_NAME_HEADER).should('contain', ruleFields.ruleName); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', ruleFields.ruleDescription); + cy.get(ABOUT_DETAILS).within(() => { + getDetails(SEVERITY_DETAILS) + .invoke('text') + .then((text) => { + cy.wrap(text.toLowerCase()).should('equal', ruleFields.ruleSeverity); + }); + getDetails(RISK_SCORE_DETAILS).should('have.text', ruleFields.riskScore); + getDetails(REFERENCE_URLS_DETAILS).should((details) => { + expect(removeExternalLinkText(details.text())).equal(ruleFields.referenceUrls.join('')); }); - getDetails(RISK_SCORE_DETAILS).should('have.text', ruleFields.riskScore); - getDetails(REFERENCE_URLS_DETAILS).should((details) => { - expect(removeExternalLinkText(details.text())).equal(ruleFields.referenceUrls.join('')); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', ruleFields.falsePositives.join('')); + getDetails(TAGS_DETAILS).should('have.text', ruleFields.ruleTags.join('')); }); - getDetails(FALSE_POSITIVES_DETAILS).should('have.text', ruleFields.falsePositives.join('')); - getDetails(TAGS_DETAILS).should('have.text', ruleFields.ruleTags.join('')); - }); - cy.get(THREAT_TACTIC).should( - 'contain', - `${ruleFields.threat.tactic.name} (${ruleFields.threat.tactic.id})` - ); - cy.get(THREAT_TECHNIQUE).should( - 'contain', - `${ruleFields.threatTechnique.name} (${ruleFields.threatTechnique.id})` - ); - cy.get(THREAT_SUBTECHNIQUE).should( - 'contain', - `${ruleFields.threatSubtechnique.name} (${ruleFields.threatSubtechnique.id})` - ); - cy.get(INVESTIGATION_NOTES_TOGGLE).click(); - cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); - cy.get(DEFINITION_DETAILS).within(() => { - getDetails(INDEX_PATTERNS_DETAILS).should( - 'have.text', - ruleFields.defaultIndexPatterns.join('') + cy.get(THREAT_TACTIC).should( + 'contain', + `${ruleFields.threat.tactic.name} (${ruleFields.threat.tactic.id})` ); - getDetails(CUSTOM_QUERY_DETAILS).should('have.text', ruleFields.ruleQuery); - getDetails(RULE_TYPE_DETAILS).should('have.text', 'Query'); - getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'Security Timeline'); - }); - cy.get(SCHEDULE_DETAILS).within(() => { - getDetails(RUNS_EVERY_DETAILS) - .find(INTERVAL_ABBR_VALUE) - .should('have.text', ruleFields.ruleInterval); - getDetails(ADDITIONAL_LOOK_BACK_DETAILS).find(INTERVAL_ABBR_VALUE).should('have.text', '55m'); + cy.get(THREAT_TECHNIQUE).should( + 'contain', + `${ruleFields.threatTechnique.name} (${ruleFields.threatTechnique.id})` + ); + cy.get(THREAT_SUBTECHNIQUE).should( + 'contain', + `${ruleFields.threatSubtechnique.name} (${ruleFields.threatSubtechnique.id})` + ); + cy.get(INVESTIGATION_NOTES_TOGGLE).click(); + cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(INDEX_PATTERNS_DETAILS).should( + 'have.text', + ruleFields.defaultIndexPatterns.join('') + ); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', ruleFields.ruleQuery); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Query'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'Security Timeline'); + }); + cy.get(SCHEDULE_DETAILS).within(() => { + getDetails(RUNS_EVERY_DETAILS) + .find(INTERVAL_ABBR_VALUE) + .should('have.text', ruleFields.ruleInterval); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS) + .find(INTERVAL_ABBR_VALUE) + .should('have.text', '55m'); + }); }); - }); - it('Deletes one rule from detail page', function () { - visit(ruleDetailsUrl(this.ruleId)); - cy.intercept('POST', '/api/detection_engine/rules/_bulk_delete').as('deleteRule'); + it('Deletes one rule from detail page', function () { + visit(ruleDetailsUrl(this.ruleId)); + cy.intercept('POST', '/api/detection_engine/rules/_bulk_delete').as('deleteRule'); - deleteRuleFromDetailsPage(); + deleteRuleFromDetailsPage(); - // @ts-expect-error update types - cy.waitFor('@deleteRule').then(() => { - cy.get(RULES_MANAGEMENT_TABLE).should('exist'); - cy.get(RULES_MANAGEMENT_TABLE).find(RULES_ROW).should('have.length', 0); - cy.request({ url: '/api/detection_engine/rules/_find' }).then(({ body }) => { - const numberOfRules = body.data.length; - expect(numberOfRules).to.eql(0); + // @ts-expect-error update types + cy.waitFor('@deleteRule').then(() => { + cy.get(RULES_MANAGEMENT_TABLE).should('exist'); + cy.get(RULES_MANAGEMENT_TABLE).find(RULES_ROW).should('have.length', 0); + cy.request({ url: '/api/detection_engine/rules/_find' }).then(({ body }) => { + const numberOfRules = body.data.length; + expect(numberOfRules).to.eql(0); + }); + cy.get(CUSTOM_RULES_BTN).should('have.text', `Custom rules (${0})`); }); - cy.get(CUSTOM_RULES_BTN).should('have.text', `Custom rules (${0})`); }); - }); -}); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/esql_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/esql_rule.cy.ts index 54f78ba7ac38..ce94f3327e31 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/esql_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rule_details/esql_rule.cy.ts @@ -24,25 +24,29 @@ import { visit } from '../../../../tasks/navigation'; import { ruleDetailsUrl } from '../../../../urls/rule_details'; -describe('Detection ES|QL rules, details view', { tags: ['@ess', '@serverless'] }, () => { - const rule = getEsqlRule(); - - beforeEach(() => { - deleteAlertsAndRules(); - login(); - }); +describe( + 'Detection ES|QL rules, details view', + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, + () => { + const rule = getEsqlRule(); + + beforeEach(() => { + deleteAlertsAndRules(); + login(); + }); - it('displays ES|QL rule specific fields', function () { - createRule(getEsqlRule()).then((createdRule) => { - visit(ruleDetailsUrl(createdRule.body.id)); + it('displays ES|QL rule specific fields', function () { + createRule(getEsqlRule()).then((createdRule) => { + visit(ruleDetailsUrl(createdRule.body.id)); - cy.get(RULE_NAME_HEADER).should('contain', `${rule.name}`); + cy.get(RULE_NAME_HEADER).should('contain', `${rule.name}`); - cy.get(DEFINITION_DETAILS).within(() => { - getDetails(ESQL_QUERY_DETAILS).should('have.text', rule.query); + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(ESQL_QUERY_DETAILS).should('have.text', rule.query); - getDetails(RULE_TYPE_DETAILS).contains('ES|QL'); + getDetails(RULE_TYPE_DETAILS).contains('ES|QL'); + }); }); }); - }); -}); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts index 3f2d718779f7..2e2a5571880c 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_auto_refresh.cy.ts @@ -33,127 +33,131 @@ import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; const RULES_TABLE_REFRESH_INTERVAL_MS = 60000; -describe('Rules table: auto-refresh', { tags: ['@ess', '@serverless'] }, () => { - beforeEach(() => { - login(); - deleteAlertsAndRules(); - setRulesTableAutoRefreshIntervalSetting({ - enabled: true, - refreshInterval: RULES_TABLE_REFRESH_INTERVAL_MS, +describe( + 'Rules table: auto-refresh', + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, + () => { + beforeEach(() => { + login(); + deleteAlertsAndRules(); + setRulesTableAutoRefreshIntervalSetting({ + enabled: true, + refreshInterval: RULES_TABLE_REFRESH_INTERVAL_MS, + }); + createRule(getNewRule({ name: 'Test rule 1', rule_id: '1', enabled: false })); }); - createRule(getNewRule({ name: 'Test rule 1', rule_id: '1', enabled: false })); - }); - it('gets deactivated when any rule selected and activated after rules unselected', () => { - visitRulesManagementTable(); + it('gets deactivated when any rule selected and activated after rules unselected', () => { + visitRulesManagementTable(); - expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); + expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); - // check refresh settings if it's enabled before selecting - expectAutoRefreshIsEnabled(); + // check refresh settings if it's enabled before selecting + expectAutoRefreshIsEnabled(); - selectAllRules(); + selectAllRules(); - // auto refresh should be deactivated (which means disabled without an ability to enable it) after rules selected - expectAutoRefreshIsDeactivated(); + // auto refresh should be deactivated (which means disabled without an ability to enable it) after rules selected + expectAutoRefreshIsDeactivated(); - clearAllRuleSelection(); + clearAllRuleSelection(); - // after all rules unselected, auto refresh should be reset to its previous state - expectAutoRefreshIsEnabled(); - }); + // after all rules unselected, auto refresh should be reset to its previous state + expectAutoRefreshIsEnabled(); + }); - describe('when enabled', () => { - beforeEach(() => { - mockGlobalClock(); - visitRulesManagementTable(); + describe('when enabled', () => { + beforeEach(() => { + mockGlobalClock(); + visitRulesManagementTable(); - expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); - }); + expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); + }); - it('refreshes rules after refresh interval has passed', () => { - cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist'); - cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS); - cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('be.visible'); + it('refreshes rules after refresh interval has passed', () => { + cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist'); + cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS); + cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('be.visible'); - cy.contains(REFRESH_RULES_STATUS, 'Updated now'); - }); + cy.contains(REFRESH_RULES_STATUS, 'Updated now'); + }); - it('refreshes rules on window focus', () => { - cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS / 2); + it('refreshes rules on window focus', () => { + cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS / 2); - cy.window().trigger('blur'); - cy.window().trigger('focus'); + cy.window().trigger('blur'); + cy.window().trigger('focus'); - cy.contains(REFRESH_RULES_STATUS, 'Updated now'); + cy.contains(REFRESH_RULES_STATUS, 'Updated now'); + }); }); - }); - describe('when disabled', () => { - beforeEach(() => { - mockGlobalClock(); - visitRulesManagementTable(); - expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); - }); + describe('when disabled', () => { + beforeEach(() => { + mockGlobalClock(); + visitRulesManagementTable(); + expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); + }); - it('does NOT refresh rules after refresh interval has passed', () => { - disableAutoRefresh(); - cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed to verify auto-refresh doesn't happen + it('does NOT refresh rules after refresh interval has passed', () => { + disableAutoRefresh(); + cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed to verify auto-refresh doesn't happen - cy.contains(REFRESH_RULES_STATUS, 'Updated 2 minutes ago'); - }); + cy.contains(REFRESH_RULES_STATUS, 'Updated 2 minutes ago'); + }); - it('does NOT refresh rules on window focus', () => { - disableAutoRefresh(); - cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed to verify auto-refresh doesn't happen + it('does NOT refresh rules on window focus', () => { + disableAutoRefresh(); + cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed to verify auto-refresh doesn't happen - cy.window().trigger('blur'); - cy.window().trigger('focus'); + cy.window().trigger('blur'); + cy.window().trigger('focus'); - // We need to make sure window focus event doesn't cause refetching. Without some delay - // the following expectations always pass even. It happens since 'focus' event gets handled - // in an async way so the status text is updated with some delay. - // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.wait(1000); + // We need to make sure window focus event doesn't cause refetching. Without some delay + // the following expectations always pass even. It happens since 'focus' event gets handled + // in an async way so the status text is updated with some delay. + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(1000); - // By using a custom timeout make sure it doesn't wait too long due to global timeout configuration - // so the expected text appears after a refresh and the test passes while it shouldn't. - cy.contains(REFRESH_RULES_STATUS, 'Updated 2 minutes ago', { timeout: 10000 }); - }); + // By using a custom timeout make sure it doesn't wait too long due to global timeout configuration + // so the expected text appears after a refresh and the test passes while it shouldn't. + cy.contains(REFRESH_RULES_STATUS, 'Updated 2 minutes ago', { timeout: 10000 }); + }); - it('does NOT get enabled after rules were unselected', () => { - disableAutoRefresh(); - cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed to verify auto-refresh doesn't happen + it('does NOT get enabled after rules were unselected', () => { + disableAutoRefresh(); + cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed to verify auto-refresh doesn't happen - selectAllRules(); + selectAllRules(); - expectAutoRefreshIsDeactivated(); + expectAutoRefreshIsDeactivated(); - clearAllRuleSelection(); + clearAllRuleSelection(); - // after all rules unselected, auto refresh should still be disabled - expectAutoRefreshIsDisabled(); + // after all rules unselected, auto refresh should still be disabled + expectAutoRefreshIsDisabled(); + }); }); - }); - describe('when one rule is selected', () => { - it('does NOT refresh after refresh interval has passed', () => { - mockGlobalClock(); - visitRulesManagementTable(); + describe('when one rule is selected', () => { + it('does NOT refresh after refresh interval has passed', () => { + mockGlobalClock(); + visitRulesManagementTable(); - expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); + expectNumberOfRules(RULES_MANAGEMENT_TABLE, 1); - selectRulesByName(['Test rule 1']); + selectRulesByName(['Test rule 1']); - // mock 1 minute passing to make sure refresh is not conducted - cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist'); - cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed - cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist'); + // mock 1 minute passing to make sure refresh is not conducted + cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist'); + cy.tick(RULES_TABLE_REFRESH_INTERVAL_MS * 2); // Make sure enough time has passed + cy.get(RULES_TABLE_AUTOREFRESH_INDICATOR).should('not.exist'); - // ensure rule is still selected - getRuleRow('Test rule 1').find(EUI_CHECKBOX).should('be.checked'); + // ensure rule is still selected + getRuleRow('Test rule 1').find(EUI_CHECKBOX).should('be.checked'); - cy.get(REFRESH_RULES_STATUS).should('have.not.text', 'Updated now'); + cy.get(REFRESH_RULES_STATUS).should('have.not.text', 'Updated now'); + }); }); - }); -}); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts index f23f703e3815..e852a752254d 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts @@ -30,7 +30,7 @@ import { import { disableAutoRefresh } from '../../../../tasks/alerts_detection_rules'; import { getNewRule } from '../../../../objects/rule'; -describe('Rules table: filtering', { tags: ['@ess', '@serverless'] }, () => { +describe('Rules table: filtering', { tags: ['@ess', '@serverless', '@serverlessQA'] }, () => { beforeEach(() => { login(); // Make sure persisted rules table state is cleared diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_links.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_links.cy.ts index ace4406b1c22..1e88be519bf6 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_links.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_links.cy.ts @@ -13,7 +13,7 @@ import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; import { RULES_MANAGEMENT_URL } from '../../../../urls/rules_management'; -describe('Rules table: links', { tags: ['@ess', '@serverless'] }, () => { +describe('Rules table: links', { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, () => { beforeEach(() => { login(); deleteAlertsAndRules(); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_sorting.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_sorting.cy.ts index 6ecf803161dd..7d9e9c1b202d 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_sorting.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_sorting.cy.ts @@ -37,7 +37,7 @@ import { import { TABLE_FIRST_PAGE, TABLE_SECOND_PAGE } from '../../../../screens/table_pagination'; import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; -describe('Rules table: sorting', { tags: ['@ess', '@serverless'] }, () => { +describe('Rules table: sorting', { tags: ['@ess', '@serverless', '@serverlessQA'] }, () => { beforeEach(() => { login(); deleteAlertsAndRules(); diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts index fe54f75dbdba..7101571036c4 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts @@ -103,6 +103,12 @@ export function SvlSearchIndexDetailPageProvider({ getService }: FtrProviderCont await testSubjects.existOrFail('loadingErrorBackToIndicesButton'); await testSubjects.existOrFail('reloadButton'); }, + async expectIndexNotFoundErrorExists() { + const pageLoadErrorElement = await ( + await testSubjects.find('pageLoadError') + ).findByClassName('euiTitle'); + expect(await pageLoadErrorElement.getVisibleText()).to.contain('Not Found'); + }, async clickPageReload() { await retry.tryForTime(60 * 1000, async () => { await testSubjects.click('reloadButton', 2000); diff --git a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts index 8ba8e8d0300d..7192eca9d13c 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts @@ -124,6 +124,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('has page load error section', async () => { await pageObjects.svlSearchIndexDetailPage.expectPageLoadErrorExists(); + await pageObjects.svlSearchIndexDetailPage.expectIndexNotFoundErrorExists(); }); it('reload button shows details page again', async () => { await es.indices.create({ index: indexName });